1. 程式人生 > 其它 >|NO.Z.00142|——————————|CloudNative|——|KuberNetes&資源排程.V12|-------------------------------------------------------|statefulset.v04|更新.V01|RollingUpdate|

|NO.Z.00142|——————————|CloudNative|——|KuberNetes&資源排程.V12|-------------------------------------------------------|statefulset.v04|更新.V01|RollingUpdate|



[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
[root@k8s-master01 ~]# kubectl get sts web -o yaml
   updateStrategy:
    rollingUpdate:
      partition: 0              
    type: RollingUpdate         
二、StatefulSet更新策略一: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)