kubernetes-pod的更新策略与回滚策略

1.pod更新策略

增加deployment的replicas参数,kubernetes会按照参数增加pod的副本,更新的方式有两种RollingUpdate与Recreate,这里重点讲RollingUpdate滚动更新方式

...
spec:
  replicas: 2    #指定Pod副本数
  selector:        #指定Pod的选择器
    matchLabels:
      app: myblog
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate        #指定更新方式为滚动更新,默认策略,通过get deploy yaml查看
    ...

2. RollingUpdate

在这里插入图片描述

讲RollingUpdate之前我们先了解两个专有名词,maxSurge与maxUnavailable
maxSurge:最大激增数,通俗的将就是滚动更新的时候需要先创建的pod数。
如何计算maxSurge:maxSurge为百分比的时候默认Pods数的25%,也可以设置固定值,按照上图计算325%=3/4,向上取整为1,maxSurge就为1。
maxUnavailable: 指更新过程中, 最多有几个pod处于无法服务状态
如何算maxUnavailable:当前pod数的25%向下取整加上pod数,按照上图计算就是3
25%=3/4向下取整0,加上3,所以maxUnavailable为3

滚动更新核心思想:需要保证Available(Ready) Pods数不低于 desired pods number - maxUnavailable; 保证所有的非异常状态Pods数不多于 desired pods number + maxSurge。

3.以2个pod为例详细讲述更新过程

1.maxSurge 25%,2个实例,向上取整,则maxSurge为1,意味着最多可以有2+1=3个Pod,那么此时会新创建1个ReplicaSet,RS-new,把副本数置为1,此时呢,副本控制器就去创建这个新的Pod
2.同时,maxUnavailable是25%,副本数2*25%,向下取整,则为0,意味着,滚动更新的过程中,不能有少于2个可用的Pod,因此,旧的Replica(RS-old)会先保持不动,等RS-new管理的Pod状态Ready后,此时已经有3个Ready状态的Pod了,那么由于只要保证有2个可用的Pod即可,因此,RS-old的副本数会有2个变成1个,此时,会删掉一个旧的Pod
3.删掉旧的Pod的时候,由于总的Pod数量又变成2个了,因此,距离最大的3个还有1个Pod可以创建,所以,RS-new把管理的副本数由1改成2,此时又会创建1个新的Pod,等RS-new管理了2个Pod都ready后,那么就可以把RS-old的副本数由1置为0了,这样就完成了滚动更新

4.服务回滚

升级出现问题,需要最快且最好的方式回退到上一次能够提供正常工作的版本,kubernetes提供了回滚机制
revision:更新应用时,K8S都会记录当前的版本号,即为revision,当升级出现问题时,可通过回滚到某个特定的revision,默认配置下,K8S只会保留最近的几个revision,可以通过Deployment配置文件中的spec.revisionHistoryLimit属性增加revision数量,默认是10。

$ kubectl -n namespace rollout history deploy myblog ##CHANGE-CAUSE为空

记录回滚:

$ kubectl apply -f deploy-myblog.yaml --record

$ kubectl -n luffy set image deploy myblog myblog=172.21.51.143:5000/myblog:v2 --record=true

查看deployment更新历史:

$ kubectl -n namespace rollout history deploy myblog
deployment.extensions/myblog
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deploy-myblog.yaml --record=true
2         kubectl set image deploy myblog myblog=172.21.51.143:5000/demo/myblog:v1 --record=true

回滚到具体的REVISION:

$ kubectl -n namespace rollout undo deploy myblog --to-revision=1
deployment.extensions/myblog rolled back
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值