CC00142.CloudKubernetes——|KuberNetes&资源调度.V12|——|statefulset.v04|更新.V01|RollingUpdate|

一、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更新成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值