K8s-Pod控制器


 

在K8s-Pod文檔中我們創建的Pod是非托管的Pod,因為Pod被設計為用后就棄的對象,如果Pod正常關閉,K8s會將該Pod清除,它沒有自愈的能力。Pod控制器是用來保持Pod狀態的一種對象資源,如下為Pod控制器的作用

 

Pod控制組成部分

 

更改標簽選擇器和Pod模板不會影響現有的Pod.更改標簽選擇器會使現有的Pod脫離控制,但不會影響現有Pod的運行,更改Pod模板也不會影響現有Pod的運行,只會影響由改控制器新生成的Pod.

 

作用:

1:確保Pod副本數保持一致

2:當節點故障時會在其他節點運行創建的Pod以替代舊的Pod

3:非常容器實現Pod的水平伸縮。

 

 

 

 

 

三: Pod控制器-ReplicationController

3.1 RC-組成部分

3.1.1 label selector

 標簽選擇器,用於確定控制的Pod

3.1.2 replica count

副本個數,指定用行的Pod數量

 

3.1.3 pod template

Pod模板,用於創建新的Pod副本

 

 

 

 

 

 

 

3.2 RC-創建

我們可以通過yaml格式的文件進行RC的創建

如下一個rc yaml格式的文件

[root@k8s-master-node1 pod-controller]# cat kubia-rc.yaml

apiVersion: v1   # API的版本

kind: ReplicationController  # Pod控制器 RC

metadata:     # 元數據

  name: kubia

spec:        # 規格說明

  replicas: 3   # 副本個數

  selector:    # 標簽選擇器

    app: kubia

  template:  # 標簽的模板

    metadata:

      labels:

        app: kubia  # Pod標簽,這里要確保跟RC的標簽選擇器一致

    spec:

      containers:

        - name: kubia

          image: luksa/kubia

          ports:

          - containerPort: 8080

 

 

創建RC

[root@k8s-master-node1 pod-controller]# kubectl create -f kubia-rc.yaml

查看一下有沒有生成Pod

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels -o wide

 

會生成指定的副本數3個Pod,也會貼上app=kubia的標簽

 

查看我們已經創建的ReplicationController

[root@k8s-master-node1 pod-controller]# kubectl get replicationcontroller -o wide

Replicationcontroller的縮寫時rc

[root@k8s-master-node1 pod-controller]# kubectl get rc -o wide

 

上面的三列分別時所需的Pod數量,實際的Pod數量,已經准備就緒的Pod數量

查看rc kubia的相信信息

[root@k8s-master-node1 pod-controller]# kubectl describe rc kubia

 

 

現在我們嘗試刪除一個Pod,看下發生了什么

# 查看當前Pod

[root@k8s-master-node1 pod-controller]# kubectl get po

NAME          READY   STATUS    RESTARTS   AGE

kubia-7x4dp   1/1     Running   0          32m

kubia-f4b5d   1/1     Running   0          28m

kubia-m7bv2   1/1     Running   0          32m

 

# 嘗試刪除一個Pod

[root@k8s-master-node1 pod-controller]# kubectl delete po kubia-7x4dp

 

# 查看目前Pod 可以看到如果我們手動刪除一個Pod,RC會自動的根據Pod template創建出一個Pod

[root@k8s-master-node1 ~]# kubectl get po

NAME          READY   STATUS              RESTARTS   AGE

kubia-59r66   0/1     ContainerCreating   0          2s

kubia-7x4dp   1/1     Terminating         0          34m

kubia-f4b5d   1/1     Running             0          31m

kubia-m7bv2   1/1     Running             0          34m

 

# 我們使用標簽選擇器刪除這三個Pod

[root@k8s-master-node1 pod-controller]# kubectl delete  po -l app=kubia

 

 

# 再次查看Pod情況

[root@k8s-master-node1 ~]# kubectl get po

NAME          READY   STATUS              RESTARTS   AGE

kubia-59r66   1/1     Terminating         0          3m26s

kubia-dpgp5   0/1     ContainerCreating   0          3s

kubia-f4b5d   1/1     Terminating         0          34m

kubia-jlw9l   0/1     ContainerCreating   0          3s

kubia-m7bv2   1/1     Terminating         0          38m

kubia-m8n9p   0/1     ContainerCreating   0          3s

 

 

現在我們模擬一下節點故障

 

目前有兩個Pod運行在worker 節點2上,現在我們將節點2down掉

# 我們看到節點2成為了NotReady狀態

[root@k8s-master-node1 ~]# kubectl get nodes

NAME               STATUS     ROLES    AGE    VERSION

k8s-master-node1   Ready      master   2d     v1.13.1

k8s-worker-node1   Ready      <none>   2d     v1.13.1

k8s-worker-node2   NotReady   <none>   4h4m   v1.13.1

 

# 再查看Pod狀態

[root@k8s-master-node1 pod-controller]# kubectl get pods

NAME          READY   STATUS    RESTARTS   AGE

kubia-dpgp5   1/1     Running   0          21m

kubia-jlw9l   0/1     Error     0          21m

kubia-m8n9p   0/1     Error     0          21m

 

# 等一會兒我們再次查看,K8s新創建了兩個Pod,實現了自愈

[root@k8s-master-node1 pod-controller]# kubectl get po

NAME          READY   STATUS        RESTARTS   AGE

kubia-dl9zv   1/1     Running       0          5m47s

kubia-dpgp5   1/1     Running       0          29m

kubia-jlw9l   0/1     Terminating   0          29m

kubia-m8n9p   0/1     Terminating   0          29m

kubia-rjvnm   1/1     Running       0          5m47s

 

 

 

 

現在我們將節點2啟動

發現Pod不會在發生改變,會把之前的Erro狀態的Pod刪除掉。

 

 

3.3 RC-作用域

RC 負責管理與標簽選擇器匹配的Pod,而不是綁定關系,兩者沒有互相依賴的關系,我們可以通過修改Pod的標簽,從而脫離RC的管理,但該脫離Pod只是不受RC管理了,不會產生任何影響,所不同的是如果該Pod節點發生故障,Pod因為是非托管的Pod,該Pod會被刪除而不會重建。

 

 

 

這里我們嘗試修改其中一個Pod的標簽

# 以下三個Pod有一個app=kubia的標簽

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

NAME          READY   STATUS    RESTARTS   AGE   LABELS

kubia-dl9zv   1/1     Running   0          35m   app=kubia

kubia-dpgp5   1/1     Running   0          58m   app=kubia

kubia-rjvnm   1/1     Running   0          35m   app=kubia

 

# 現在我們修改其中一個Pod的標簽

[root@k8s-master-node1 pod-controller]# kubectl label po kubia-dl9zv app=wangys --overwrite

 

# 現在看下Pod情況

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

NAME          READY   STATUS              RESTARTS   AGE   LABELS

kubia-dl9zv   1/1     Running             0          35m   app=wangys

kubia-dpgp5   1/1     Running             0          59m   app=kubia

kubia-p5clz   0/1     ContainerCreating   0          3s    app=kubia

kubia-rjvnm   1/1     Running             0          35m   app=kubia

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

NAME          READY   STATUS    RESTARTS   AGE   LABELS

kubia-dl9zv   1/1     Running   0          35m   app=wangys

kubia-dpgp5   1/1     Running   0          59m   app=kubia

kubia-p5clz   1/1     Running   0          9s    app=kubia

kubia-rjvnm   1/1     Running   0          35m   app=kubia

 

說明:修改現有Pod的標簽可以將該Pod移除RC的作用域,不受管理,但是該Pod正常運行不受影響,區別在於這個Pod節點故障就會被刪除。

 

 

 

3.4 RC-Pod模板

對於Pod模板我們可能常常會更新,需要說明的是,如果Pod模板更新,並不會影響現有的Pod運行,影響的是新建的Pod,新建的Pod會根據這個Pod模板創建。

 

我們可以通過修改模板來驗證我們的結論

# 現在三個Pod都有app=kubia的標簽

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

NAME          READY   STATUS    RESTARTS   AGE   LABELS

kubia-dpgp5   1/1     Running   0          82m   app=kubia

kubia-p5clz   1/1     Running   0          23m   app=kubia

kubia-rjvnm   1/1     Running   0          59m   app=kubia

 

# 修改rc文件,新增rel:beta標簽

[root@k8s-master-node1 pod-controller]# kubectl edit rc kubia

 

 

 

 

# 再次查看 原Pod標簽沒有修改

[root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

NAME          READY   STATUS    RESTARTS   AGE   LABELS

kubia-dpgp5   1/1     Running   0          86m   app=kubia

kubia-p5clz   1/1     Running   0          27m   app=kubia

kubia-rjvnm   1/1     Running   0          63m   app=kubia

 

我們刪除一個Pod試試,新Pod會根據修改后的模板創建

[root@k8s-master-node1 pod-controller]# kubectl delete po kubia-dpgp5

 

[root@k8s-master-node1 ~]# kubectl get po --show-labels

NAME          READY   STATUS        RESTARTS   AGE   LABELS

kubia-2r2qx   1/1     Running       0          15s   app=kubia,rel=beta

kubia-dpgp5   1/1     Terminating   0          88m   app=kubia

kubia-p5clz   1/1     Running       0          29m   app=kubia

kubia-rjvnm   1/1     Running       0          65m   app=kubia

[root@k8s-master-node1 ~]# kubectl get po --show-labels

NAME          READY   STATUS    RESTARTS   AGE   LABELS

kubia-2r2qx   1/1     Running   0          38s   app=kubia,rel=beta

kubia-p5clz   1/1     Running   0          30m   app=kubia

kubia-rjvnm   1/1     Running   0          65m   app=kubia

 

3.5 RC-Pod水平伸縮

 

3.5.1  擴容

 

可以通過手動的方式

[root@k8s-master-node1 ~]# kubectl scale rc kubia --replicas=10

 

 

# 查看狀態

 

 

 

 

 

[root@k8s-master-node1 pod-controller]# kubectl get po

NAME          READY   STATUS    RESTARTS   AGE

kubia-2r2qx   1/1     Running   0          8m30s

kubia-5c47l   1/1     Running   0          3m33s

kubia-bfksb   1/1     Running   0          3m33s

kubia-ctkcm   1/1     Running   0          3m33s

kubia-d6zh9   1/1     Running   0          3m33s

kubia-g7296   1/1     Running   0          3m33s

kubia-p5clz   1/1     Running   0          37m

kubia-rjvnm   1/1     Running   0          73m

kubia-rtg4q   1/1     Running   0          3m33s

kubia-s9n8k   1/1     Running   0          3m33s

 

 

 

 

 

 

通過編輯定義來擴容

 

[root@k8s-master-node1 pod-controller]# kubectl edit rc kubia

 

 

 

 

 

 

[root@k8s-master-node1 pod-controller]# kubectl get po

NAME          READY   STATUS    RESTARTS   AGE

kubia-2ctxt   1/1     Running   0          59s

kubia-2r2qx   1/1     Running   0          16m

kubia-5c47l   1/1     Running   0          11m

kubia-7hmm6   1/1     Running   0          59s

kubia-b5kxm   1/1     Running   0          59s

kubia-bfksb   1/1     Running   0          11m

kubia-ctkcm   1/1     Running   0          11m

kubia-d6zh9   1/1     Running   0          11m

kubia-g7296   1/1     Running   0          11m

kubia-jvmt6   1/1     Running   0          59s

kubia-k7kc4   1/1     Running   0          59s

kubia-krbj6   1/1     Running   0          59s

kubia-kw66f   1/1     Running   0          59s

kubia-mktbp   1/1     Running   0          59s

kubia-p5clz   1/1     Running   0          45m

kubia-rjvnm   1/1     Running   0          81m

kubia-rtg4q   1/1     Running   0          11m

kubia-s9n8k   1/1     Running   0          11m

kubia-w9jx6   1/1     Running   0          59s

kubia-zr5s6   1/1     Running   0          59s

 

 

 

3.5.2 縮容

命令行/編輯文件,這里演示命令行

[root@k8s-master-node1 pod-controller]# kubectl scale rc kubia --replicas=3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM