4 Kubernetes資源-Pod控制器(1)
Kubernetes中Pod分為自主式和控制器管理式:
- YAML指定類型為Pod的均為自主式,此類Pod退出后不會(huì)被創(chuàng)建;
- YMAL指定類型為ReplicaSet、Deployment、DaemonSet、Job、CronJob、StatefulSet、HPA的均為控制器管理式,在控制器的生命周期內(nèi)始終保持Pod的副本數(shù)據(jù)。
控制器相當(dāng)于狀態(tài)機(jī),用來(lái)控制Pod的具體狀態(tài)和行為。
根據(jù)應(yīng)用場(chǎng)景可以分為:
- 無(wú)狀態(tài)后臺(tái)服務(wù):ReplicaSet和Deployment
- 節(jié)點(diǎn)為單位:DaemonSet
- 批處理任務(wù):Job和CronJob
- 有狀態(tài)后臺(tái)服務(wù):StatefulSet
根據(jù)運(yùn)行方式可以分為:
- 聲明式:Deployment、CronJob,使用apply啟動(dòng)
- 命令式:Pod、ReplicaSet、DaemonSet、Job,使用create啟動(dòng)。
4.1 ReplicaSet
ReplicaSet 資源能夠確保Pod的副本數(shù)保持在用戶期望的值,當(dāng)容器異常退出時(shí)會(huì)自動(dòng)創(chuàng)建新的Pod,反之則刪除。
ReplicaSet控制器通過(guò)匹配Pod的標(biāo)簽獲取自己所管理的Pod,維持所管理的標(biāo)簽的Pod副本數(shù)目。ReplicaSet擁有集合式的標(biāo)簽選擇器,它被設(shè)計(jì)成能控制多個(gè)不同標(biāo)簽的Pod副本,例如應(yīng)用APP發(fā)布了V1和V2兩個(gè)版本,用戶希望APP的Pod副本數(shù)保持固定,并且允許同時(shí)包含V1和V2版本的Pod,就可以用ReplicaSet來(lái)實(shí)現(xiàn)控制。
編寫(xiě)YAML文件,通過(guò)app: tomcat標(biāo)簽將ReplicaSet與Pod資源關(guān)聯(lián):
[root@k8smaster43-11 CSDN]# cat replicaset.yaml
apiVersion: apps/v1 # API版本
kind: ReplicaSet # 資源類型
metadata:name: tomcat-replicaset # RS資源名稱
spec:replicas: 3 # Pod副本數(shù)目selector: matchLabels: app: tomcat # 關(guān)聯(lián)Pod標(biāo)簽template: # 以下是配置Pod資源,可以看做ReplicaSet嵌套了關(guān)聯(lián)的Pod資源 metadata: name: tomcat-pod # Pod資源名稱labels: app: tomcat # Pod資源標(biāo)簽spec: containers: - name: demo-tomcat # Pod容器名稱image: tomcat:8.0 # Pod容器鏡像imagePullPolicy: Never # 鏡像下載模式ports: - containerPort: 8080 # Pod內(nèi)容器服務(wù)端口protocol: TCP # 端口服務(wù)類型
[root@k8smaster43-11 CSDN]#
創(chuàng)建RS資源:
[root@k8smaster43-11 CSDN]# kubectl apply -f replicaset.yaml
replicaset.apps/tomcat-replicaset created
[root@k8smaster43-11 CSDN]#
查看ReplicaSet和對(duì)應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl get rs,pod -o wide --show-labels
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicaset.apps/tomcat-replicaset 3 3 3 2m7s demo-tomcat tomcat:8.0 app=tomcat <none>NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-replicaset-dxddd 1/1 Running 0 2m7s 10.244.2.44 k8sworker43-22 <none> <none> app=tomcat
pod/tomcat-replicaset-mf9c2 1/1 Running 0 2m7s 10.244.2.43 k8sworker43-22 <none> <none> app=tomcat
pod/tomcat-replicaset-z5qpp 1/1 Running 0 2m7s 10.244.1.54 k8sworker43-21 <none> <none> app=tomcat
[root@k8smaster43-11 CSDN]#
刪除ReplicaSet資源并且保留Pod資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f replicaset.yaml --cascade=false
replicaset.apps "tomcat-replicaset" deleted
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get rs,pod -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-replicaset-dxddd 1/1 Running 0 12m 10.244.2.44 k8sworker43-22 <none> <none> app=tomcat
pod/tomcat-replicaset-mf9c2 1/1 Running 0 12m 10.244.2.43 k8sworker43-22 <none> <none> app=tomcat
pod/tomcat-replicaset-z5qpp 1/1 Running 0 12m 10.244.1.54 k8sworker43-21 <none> <none> app=tomcat
[root@k8smaster43-11 CSDN]#
刪除ReplicaSet和對(duì)應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f replicaset.yaml
replicaset.apps "tomcat-replicaset" deleted
[root@k8smaster43-11 CSDN]#
4.2 Deployment
確保Pod的副本數(shù)保持在用戶期望的值,當(dāng)容器異常退出時(shí)會(huì)自動(dòng)創(chuàng)建新的Pod,反之則刪除。Deployment控制器除了包含ReplicaSet的功能,還具有滾動(dòng)升級(jí)、回滾應(yīng)用、擴(kuò)縮容、暫停和繼續(xù)功能。
Deployment控制器可以設(shè)置升級(jí)策略:Recreate重建、RollingUpdate滾動(dòng)更新,其中滾動(dòng)更新包含兩個(gè)參數(shù)maxUnavailabe指定更新過(guò)程中可用狀態(tài)的Pod數(shù)量上限、maxSurge指定更新過(guò)程中Pod總數(shù)超過(guò)副本期望部分的最大值。
編寫(xiě)YAML文件,通過(guò)app: tomcat標(biāo)簽將Deployment、ReplicaSet與Pod資源關(guān)聯(lián):
[root@k8smaster43-11 CSDN]# cat deployment.yaml
apiVersion: apps/v1 # API版本
kind: Deployment # 資源類型
metadata:name: tomcat-deployment # Deployment資源名稱
spec:strategy: # Pod更新策略type: RollingUpdate # RollingUpdate滾動(dòng)更新/Recreate重建rollingUpdate: # RollingUpdate滾動(dòng)更新時(shí)副本數(shù)目策略 maxUnavailable: 2maxSurge: 0# 以下配置與ReplicaSet.spec資源配置相同replicas: 6 # Pod副本數(shù)目selector: matchLabels: app: tomcat # 關(guān)聯(lián)Pod標(biāo)簽template: metadata: name: tomcat-pod # Pod資源名稱labels: app: tomcat # Pod資源標(biāo)簽spec: containers: - name: tomcat # Pod容器名稱image: tomcat:8.0 # Pod容器鏡像imagePullPolicy: Never # 容器下載模式ports: - containerPort: 8080 # Pod內(nèi)容器服務(wù)端口protocol: TCP # 端口服務(wù)類型
[root@k8smaster43-11 CSDN]#
創(chuàng)建Deployment資源:
[root@k8smaster43-11 CSDN]# kubectl apply -f deployment.yaml
deployment.apps/tomcat-deployment created
[root@k8smaster43-11 CSDN]#
查看Deployment、ReplicaSet和對(duì)應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl get deploy,rs,pod -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
deployment.apps/tomcat-deployment 6/6 6 6 15s tomcat tomcat:8.0 app=tomcat <none>NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicaset.apps/tomcat-deployment-7fbcf7c944 6 6 6 15s tomcat tomcat:8.0 app=tomcat,pod-template-hash=7fbcf7c944 app=tomcat,pod-template-hash=7fbcf7c944NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-deployment-7fbcf7c944-68wv5 1/1 Running 0 15s 10.244.2.46 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-dzf92 1/1 Running 0 15s 10.244.2.47 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-m6j2v 1/1 Running 0 15s 10.244.2.45 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-mw8hh 1/1 Running 0 15s 10.244.1.57 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-tqldt 1/1 Running 0 15s 10.244.1.56 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-vw4jj 1/1 Running 0 15s 10.244.1.55 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
[root@k8smaster43-11 CSDN]#
對(duì)副本進(jìn)行擴(kuò)容/縮容
[root@k8smaster43-11 CSDN]# kubectl scale deployment.apps/tomcat-deployment --replicas 10
deployment.apps/tomcat-deployment scaled
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
tomcat-deployment-7fbcf7c944-4sjfj 1/1 Running 0 8s 10.244.1.59 k8sworker43-21 <none> <none>
tomcat-deployment-7fbcf7c944-68wv5 1/1 Running 0 10m 10.244.2.46 k8sworker43-22 <none> <none>
tomcat-deployment-7fbcf7c944-8s54r 1/1 Running 0 8s 10.244.2.48 k8sworker43-22 <none> <none>
tomcat-deployment-7fbcf7c944-dzf92 1/1 Running 0 10m 10.244.2.47 k8sworker43-22 <none> <none>
tomcat-deployment-7fbcf7c944-hl824 1/1 Running 0 8s 10.244.2.49 k8sworker43-22 <none> <none>
tomcat-deployment-7fbcf7c944-lzg9c 1/1 Running 0 8s 10.244.1.58 k8sworker43-21 <none> <none>
tomcat-deployment-7fbcf7c944-m6j2v 1/1 Running 0 10m 10.244.2.45 k8sworker43-22 <none> <none>
tomcat-deployment-7fbcf7c944-mw8hh 1/1 Running 0 10m 10.244.1.57 k8sworker43-21 <none> <none>
tomcat-deployment-7fbcf7c944-tqldt 1/1 Running 0 10m 10.244.1.56 k8sworker43-21 <none> <none>
tomcat-deployment-7fbcf7c944-vw4jj 1/1 Running 0 10m 10.244.1.55 k8sworker43-21 <none> <none>
[root@k8smaster43-11 CSDN]#
對(duì)服務(wù)版本進(jìn)行滾動(dòng)更新,將鏡像從tomcat:8.0更新到tomcat:6.0:
[root@k8smaster43-11 CSDN]# kubectl set image deployment.apps/tomcat-deployment tomcat=tomcat:6.0
deployment.apps/tomcat-deployment image updated
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get deploy,rs,pod -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
deployment.apps/tomcat-deployment 10/10 10 10 61s tomcat tomcat:6.0 app=tomcat <none>NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicaset.apps/tomcat-deployment-5dddc7f6b6 10 10 10 25s tomcat tomcat:6.0 app=tomcat,pod-template-hash=5dddc7f6b6 app=tomcat,pod-template-hash=5dddc7f6b6
replicaset.apps/tomcat-deployment-7fbcf7c944 0 0 0 61s tomcat tomcat:8.0 app=tomcat,pod-template-hash=7fbcf7c944 app=tomcat,pod-template-hash=7fbcf7c944NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-deployment-5dddc7f6b6-4xm6c 1/1 Running 0 17s 10.244.2.75 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-6mb4c 1/1 Running 0 25s 10.244.1.87 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-g7nb5 1/1 Running 0 21s 10.244.1.89 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-km7bf 1/1 Running 0 23s 10.244.1.88 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-kt54w 1/1 Running 0 24s 10.244.2.73 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-kzx56 1/1 Running 0 15s 10.244.1.92 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-mgg2d 1/1 Running 0 15s 10.244.1.91 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-n2d9k 1/1 Running 0 17s 10.244.2.74 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-nplcm 1/1 Running 0 20s 10.244.1.90 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
pod/tomcat-deployment-5dddc7f6b6-nrl9w 1/1 Running 0 25s 10.244.2.72 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=5dddc7f6b6
[root@k8smaster43-11 CSDN]#
對(duì)服務(wù)版本進(jìn)行回滾,將鏡像從tomcat:6.0還原回tomcat:8.0:
[root@k8smaster43-11 CSDN]# kubectl rollout undo deployment.apps/tomcat-deployment
deployment.apps/tomcat-deployment rolled back
[root@k8smaster43-11 CSDN]#
[root@k8smaster43-11 CSDN]# kubectl get deploy,rs,pod -o wide --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS
deployment.apps/tomcat-deployment 10/10 10 10 6m47s tomcat tomcat:8.0 app=tomcat <none>NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS
replicaset.apps/tomcat-deployment-5dddc7f6b6 0 0 0 6m11s tomcat tomcat:6.0 app=tomcat,pod-template-hash=5dddc7f6b6 app=tomcat,pod-template-hash=5dddc7f6b6
replicaset.apps/tomcat-deployment-7fbcf7c944 10 10 10 6m47s tomcat tomcat:8.0 app=tomcat,pod-template-hash=7fbcf7c944 app=tomcat,pod-template-hash=7fbcf7c944NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
pod/tomcat-deployment-7fbcf7c944-6hh5w 1/1 Running 0 2m13s 10.244.1.95 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-6hjxj 1/1 Running 0 2m12s 10.244.2.79 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-9hp95 1/1 Running 0 2m8s 10.244.1.96 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-dk2jt 1/1 Running 0 2m16s 10.244.2.78 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-fkhrb 1/1 Running 0 2m19s 10.244.1.93 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-jc8vw 1/1 Running 0 2m18s 10.244.2.77 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-pfqxk 1/1 Running 0 2m16s 10.244.1.94 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-pm6rg 1/1 Running 0 2m8s 10.244.2.80 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-pxf5b 1/1 Running 0 2m6s 10.244.1.97 k8sworker43-21 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
pod/tomcat-deployment-7fbcf7c944-vnvjl 1/1 Running 0 2m19s 10.244.2.76 k8sworker43-22 <none> <none> app=tomcat,pod-template-hash=7fbcf7c944
刪除Deployment、ReplicaSet和對(duì)應(yīng)Pod的資源:
[root@k8smaster43-11 CSDN]# kubectl delete -f deployment.yaml
deployment.apps "tomcat-deployment" deleted
[root@k8smaster43-11 CSDN]#
對(duì)于滾動(dòng)更新,不同的參數(shù)設(shè)置可以實(shí)現(xiàn)不同的更新效果:
# 先啟動(dòng)一個(gè)新Pod,再停止一個(gè)舊Pod,直到所以Pod都更新完
strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdate# 先停止一個(gè)舊Pod,再啟動(dòng)一個(gè)新Pod,直到所以Pod都更新完
strategy:rollingUpdate:maxSurge: 0maxUnavailable: 1type: RollingUpdate# 停25%舊Pod、啟動(dòng)25%新Pod,直到所以Pod都更新完
strategy:type: RollingUpdaterollingUpdate:maxSurge: 25%maxUnavailable: 25%
總結(jié)
以上是生活随笔為你收集整理的4 Kubernetes资源-Pod控制器(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。