|NO.Z.00142|——————————|CloudNative|——|KuberNetes&資源排程.V12|-------------------------------------------------------|statefulset.v04|更新.V01|RollingUpdate|
阿新 • • 發佈:2022-03-30
[CloudNative:KuberNetes&資源排程.V12] [Applications.KuberNetes] [StatefulSet應用|容器中匯出映象匯入映象StatefulSet擴容縮容StatefulSet建立pod縮減pod的流程|] [StatefulSet更新策略|StatefulSet灰度釋出|StatefulSet級聯刪除和非級聯刪除|]
一、StatefulSet更新策略
### --- 檢視StatefulSet資原始檔 [root@k8s-master01 ~]# kubectl get sts web -o yaml apiVersion: apps/v1 kind: StatefulSet metadata: creationTimestamp: "2021-04-19T06:24:33Z" generation: 1 manager: kube-controller-manager operation: Update time: "2021-04-19T06:25:18Z" name: web namespace: default resourceVersion: "32795" uid: 1f9db18a-bcb3-4ae4-8aba-90417aa10540 spec: podManagementPolicy: OrderedReady replicas: 2 revisionHistoryLimit: 10 selector: matchLabels: app: nginx serviceName: nginx template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx:1.15.2 imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 name: web protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 updateStrategy: rollingUpdate: partition: 0 type: RollingUpdate status: collisionCount: 0 currentReplicas: 2 currentRevision: web-6949d64dc8 observedGeneration: 1 readyReplicas: 2 replicas: 2 updateRevision: web-6949d64dc8 updatedReplicas: 2
### --- StatefulSet和Deployment一樣,也是選擇了幾種更新方式
~~~ 在使用StatefulSet的時候我們啟動了5個副本,而把這個partition設定為3,
~~~ 它就會更新大於3的這個pod,不大於3的他就不更新。
~~~ 所以說可以利用這個機制來實現簡單的分段更新發布。
~~~ 可以看到他現在更新方式RollingUpdate,也就是滾動更新。
~~~ 之前建立的時候是沒有指定更新方式的,也就是說他預設的更新方式是RollingUpdate
二、StatefulSet更新策略一:RollingUpdate[root@k8s-master01 ~]# kubectl get sts web -o yaml updateStrategy: rollingUpdate: partition: 0 type: RollingUpdate
### --- 準備StatefulSet需要的配置資源
~~~ # 使用RollingUpdate策略去更新容器
~~~ StatefulSet和Deployment更新方式是不一樣的,Deployment是隨機去更新的,而它呢
~~~ 檢視一下RollingUpdate是怎麼樣更新的:是從下往上更新的,從最後一個Pod向上更新
~~~ # 擴容StatefulSet容器副本數量為3 [root@k8s-master01 ~]# kubectl scale --replicas=3 sts web statefulset.apps/web scaled
~~~ # 檢視所有的pod狀態
~~~ 它會先更新web-2,若是在更新web-2的時候,web-0宕機,
~~~ 它會先等待web-0完全啟動之後,再去更新web-1,繼續向下更新
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 7m13s
web-1 1/1 Running 0 6m45s
web-2 1/1 Running 0 30s
### --- 更改映象版本,觸發容器
~~~ # 更改映象版本
[root@k8s-master01 ~]# kubectl edit sts web
spec:
containers:
- image: nginx:1.15.3
~~~ # 在更新的時候刪除web-0,檢視更新過程
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 31s
web-1 1/1 Running 0 48s
web-2 1/1 Terminating 0 90s // web-2已經在更新了
[root@k8s-master01 ~]# kubectl delete po web-0 // web-2更新的時候刪除掉web-0
pod "web-0" deleted
[root@k8s-master01 ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
web-0 0/1 ContainerCreating 0 2s // web-0被刪除
web-1 1/1 Running 0 59s
web-2 0/1 Terminating 0 101s // web-2更新完成之後會重啟啟動web-0,web-0啟動完成之後才會去繼續更新web-1
### --- 檢視StatefulSet更新流程
[root@k8s-master01 ~]# kubectl get po -l app=nginx -w
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 3m53s
web-1 1/1 Running 0 3m20s
web-2 1/1 Running 0 3m33s
web-2 1/1 Terminating 0 4m7s // 從web-2開始更新
web-0 1/1 Terminating 0 4m30s // 在更新web-2的過程中web-0宕機,它會暫停web-2的更新,去啟動web-0,web-0啟動之後繼續之前的web-2更新
web-0 0/1 Pending 0 0s
web-0 0/1 ContainerCreating 0 1s
web-0 1/1 Running 0 3s // web-0啟動
web-2 0/1 Terminating 0 5m // 繼續web-2的更新
web-2 0/1 Pending 0 1s
web-2 0/1 ContainerCreating 0 1s
web-2 1/1 Running 0 3s // web-2更新成功
web-1 1/1 Terminating 0 4m50s
web-1 0/1 Pending 0 0s
web-1 0/1 ContainerCreating 0 0s
web-1 1/1 Running 0 2s // web-1更新成功
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)