溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

K8S基本使用方法有哪些

發(fā)布時間:2021-12-04 15:08:03 來源:億速云 閱讀:194 作者:小新 欄目:云計算

小編給大家分享一下K8S基本使用方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

pod創(chuàng)建

K8s集群的最小單位是pod,一個pod里面可以包含多的容器,通常以yaml文件去創(chuàng)建pod,也可以使用run命令直接創(chuàng)建

創(chuàng)建pod:命令格式: kubectl create –f [yaml文件]

使用RUN命令直接創(chuàng)建:命令格式:kubectl run –i –t [pod名稱] –image=[鏡像名稱]

列1:通過ymal文件創(chuàng)建一個Redis-master pod

redis-master-controller.yaml 文件內(nèi)容:
apiVersion: v1
kind: ReplicationController
metadata: 
  name: redis-master
  labels:
    name: redis-master
spec:
  replicas:
  selector:
    name: redis-master
  template:
   metadata:
     labels:
       name: redis-master
   spec:
     containers:
     - name: master
       image: kubeguide/redis-master
       ports:
       - containerPort: 6379


kubectl create -f redis-master-controller.yaml

例2: 使用RUN命令直接創(chuàng)建

kubectl run -i -t busybox --image=busybox
kubectl run -i -t busybox --image=busybox --replicas=5  
--replicas 指定副本數(shù) 常用參數(shù)

pod刪除

命令格式: kubectl delete pod/po [pod名稱]

此時雖然顯示pod已經(jīng)刪除,但是你再次查看pod的時候會發(fā)現(xiàn)還是有一個名為busybox**的pod存在,這是因為k8s的安全機制,k8s保證了定義的pod副本數(shù)的恒定,加入一個pod副本數(shù)為5那么有5個pod提供服務(wù),pod壞掉或者刪除掉k8s的安全機制將檢查副本數(shù)量如果pod數(shù)量少于5 那么k8s將會自動創(chuàng)建pod使之保持在數(shù)量為5個。

徹底刪除:

第一種方式是重新編輯yaml文件 如果文件指定多個副本數(shù)將其改為0

第二種方式使用 kubectl delete –f m命令

POD 查看

總體查看

命令 kubectl get pods 進行查看

相對詳細信息查看

kubectl get pod -o wide

更加詳細的信息

命令格式: kubectl describe [po/deploy] [名稱]

pod 和deployment

pod是什么

Pod是k8s集群的最小單元,一個pod里面可以包含多的容器,那么所有屬于這個pod的容器都會運行在一個節(jié)點上面。Pod封裝了一個或多個應(yīng)用程序的容器(比如nginx等),存儲資源,唯一的網(wǎng)絡(luò)IP以及管理容器的一些選項 Pod標示的是一個部署單元,可以理解為Kubernetes中的應(yīng)用程序的單個實例,它可能由單個容器組成,也可能由少量緊密耦合并共享資源的容器組成。如果多個容器在同一Pod下他們公用一個IP所以不能出現(xiàn)重復(fù)的端口號,比如在一個Pod下運行兩個nginx就會有一個容器異常,一個Pod下的多個容器可以使用localhost來訪問對方端口應(yīng)為Pod是最小的單元如果在Pod中容器出現(xiàn)異常終止了是不會重啟,在實際使用場景下基本不會直接使用Pod而是使用Deployment部署自己的應(yīng)用

deployment 是什么

在早期版本使用Replication Controller對Pod副本數(shù)量進行管理,在新的版本中官方推薦使用Deployment來代替RC,Deployment相對RC有這些好處

 特點:

Deployment擁有更加靈活強大的升級、回滾功能,并且支持滾動更新

使用Deployment升級Pod只需要定義Pod的最終狀態(tài),k8s會為你執(zhí)行必要的操作(RC要自己定義如何操作)

進入到容器內(nèi)部操作

K8s進入pod指令和 docker 進入容器指定類似

Docker進入容器指令為:

docker exec –it 容器ID/name sh/bash

K8s進入到pod中容器中指令:

kubectl exec –it pod-name sh/bash

拷貝一個文件到pod指定目錄

命令:kubectl cp file/dir  <some-pod>:某目錄

service與pod or deployment

pod 與 service的關(guān)系

前面寫到創(chuàng)建了POD,但是有了POD依然不能提供服務(wù),此時輪到了我們service上場了,專業(yè)一點講叫服務(wù)發(fā)布。服務(wù)發(fā)布是創(chuàng)建了POD或者deployment 然后還需要創(chuàng)建service發(fā)布出去。 關(guān)聯(lián)pod和service 是通過 labels 標簽實現(xiàn)的。為關(guān)聯(lián)的準確性可以添加多個標簽

例:我們創(chuàng)建一個redis-master的POD 然后在創(chuàng)建一個redis-master 的服務(wù)并發(fā)布

發(fā)布pod

創(chuàng)建pod:
vim redis-master-controller.yaml   
 
apiVersion: v1
kind: ReplicationController
metadata: 
  name: redis-master
  labels:
    name: redis-master
spec:
  replicas:
  selector:
    name: redis-master
  template:
   metadata:
     labels:
       name: redis-master
   spec:
     containers:
     - name: master
       image: kubeguide/redis-master
       ports:
       - containerPort: 6379

發(fā)布Service

vim redis-master-service.yaml   
    
apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    name: redis-master
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    name: redis-master
服務(wù)的創(chuàng)建方式與pod相同:
使用 kubectl create –f [x-service.yaml]
kubectl create -f redis-master-service.yaml

查看服務(wù)

命令 
kubectl get svc –o wide 
服務(wù)的CLUSTER-IP 是服務(wù)的 VIP

查看詳細的描述信息:

Kubectl describe svc [service-name]

銷毀服務(wù)

service的銷毀和pod的銷毀方法相同
命令: kubectl delete –f [x-service.yaml]

注意:創(chuàng)建完整的容器提供服務(wù)包含 POD(Deployment)和 Services,建議Services在Pod之前創(chuàng)建。

Pod 副本數(shù)動態(tài)縮放

方法一 使用命令操作副本數(shù)量

例:創(chuàng)建一個redis-slave 應(yīng)用容器 副本數(shù)量指定為2 然后通過命令進行動態(tài)擴容和縮容

vim redis-slave.yaml

apiVersion: v1
kind: ReplicationController
metadata: 
  name: redis-slave
  labels:
    name: redis-slave
spec:
  replicas: 2
  selector: 
    name: redis-slave
  template: 
    metadata: 
      labels:
        name: redis-slave
    spec:
      containers:
      - name: slave
        image: kubeguide/guestbook-redis-slave
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 6379

kubectl create -f redis-slave.yaml

上面的yaml文件是定義了2個pod副本,我們通過命令擴容到5個

使用scale命令 
kubectl scale rc redis-slave --replicas=5

此時通過 kubectl get pod -o wide 命令去查看,你會發(fā)現(xiàn)有五個redis-slave pod了

縮容的方式一樣 在命令里面指定  --replicas 的數(shù)量即可實現(xiàn)

方法2 修改配置達成縮容擴容
命令 :kubectl edit  rc/deployment [rc/deployment-name]

例:修改應(yīng)用配置 我們上一步將replicas 數(shù)量設(shè)置為5 現(xiàn)在將他改為6 保存退出驗證

kubectl edit rc redis-slave

K8S基本使用方法有哪些

方法3 修改 yaml文件重構(gòu)達成目的
重構(gòu)命令:kubectl replace -f x.yaml

修改配置文件進行重構(gòu)即可,這個是需要釋放已存在的pod,然后創(chuàng)建新的pod的過程

查看已經(jīng)構(gòu)建的服務(wù)使用的端口

查看全部的包括宿主機的

命令:kubectl get endpoints

只查看rc/deploy相關(guān)的端口

kubectl get ep [rc/deploy-name]

pod的狀態(tài)

使用k8s創(chuàng)建pod的幾種狀態(tài)

Pending:Pod已經(jīng)被系統(tǒng)接收,準備下載鏡像。
Running:Pod已經(jīng)分配到節(jié)點,并且所有容器已創(chuàng)建。至少有一個容器仍在運行、正在啟動或重新啟動。
Successed:Pod中的所有容器已成功終止,不會重新啟動。
Failed:Pod中的所有容器已終止,并且至少有一個容器已經(jīng)終止。也就是說,容器退出非零狀態(tài)或被系統(tǒng)終止。
Unknown:由于某種原因,無法獲得Pod狀態(tài),通常是由于與Pod所在主機通信時出現(xiàn)錯誤。

Namespace

查看所有namespace

命令:kubectl get namespace/ns(ns 為簡寫)

注:我們的在未指定namespace創(chuàng)建Pod 會默認使用default 這個命名空間

給pod指定namespace

在給pod指定之前我們k8s集群默認是只有default 這個命名空間,所以我們?nèi)绻褂闷渌臻g需要先創(chuàng)建命名空間

例: 創(chuàng)建一個名為mynamespace的命名空間

cat mynamespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: mynamespace

創(chuàng)建命令與創(chuàng)建pod和service相同

yaml 指定namespace示子:

cat pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox1
  namespace: mynamespace
spec:
  containers:
  - image: gcr.io/google_containers/busybox
    command:
      - sleep
      - "3600"
    name: busybox1


kubectl create -f pod.yaml

創(chuàng)建完pod 此時你使用 kubectl get pod -o wide 或者 kubectl get pod  查看是看不到的,因為這些pod都是在默認空間中的

所以想要查看 mynamespace 空間的pod 需要在查看命令指定namespace空間

命令:

kubectl get pods –n [namespace名稱]
或者
kubectl get pods -o wide –n [namespace名稱]

使用run 命令創(chuàng)建pod指定namespace

kubectl run -i -t busybox --image=busybox --namespace=mynamespace

Kubectl命令行管理對象

K8S基本使用方法有哪些

K8S基本使用方法有哪些

創(chuàng)建資源小技巧

當資源可以使用create 創(chuàng)建時,可以使用 -o yaml 和 --dry-run 查看yaml文件如何寫

-o yaml  以yaml格式輸出

--dry-run 測試創(chuàng)建,不會真的創(chuàng)建資源

例:

kubectl create serviceaccount mycount -o yaml --dry-run

另外一種方法導(dǎo)出摸個pod/deploy yaml文件 用于模板文件可以修改為其他的pod/deploy的yaml

kubectl get pods x-pod -o yaml --export

查看 node標簽

kubectl get nodes --show-labels

給node打標簽

kubectl label nodes node1 zone=foo

zone 標簽key
foo  標簽值

node設(shè)置污點

kubectl taint node node2 node-type=dev:NoExecute

node去污

kubectl taint node node2 node-type:NoExecute-

以上是“K8S基本使用方法有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

k8s
AI