k8s-滚动升级与回滚

k8s业务镜像版本升级与回滚的操作流程,首先根据开发给的代码包进行镜像构建,上传镜像到内部harbor仓库中,修改对应yaml文件中的镜像tag号,最后执行kubectl set image 命令将镜像更新。deployment控制器支持两种更新策略:滚动更新与重建更新。默认滚动更新

滚动更新

  滚动更新是默认的更新策略,滚动更新是基于新版本镜像创建pod,然后在删除一部分旧版本oid,然后在创建新版本pod,在删除一部分旧版本pod,直到旧版本pod删除完毕,滚动更新优势在于升级过中不会导致服务不可用,缺点是升级过程中会导致两个版本在短时间内并存。
  具体的升级过称是在执行更新操作后k8s会在创建一个新版的ReplicaSet控制器,在删除旧版本的ReplicaSet控制器下的pod同时会在新版本的ReplicaSet控制器下创建新的pod,直到旧版本的pod全部被删除完后再把旧版本的ReplicaSet控制器也回收掉。
  在执行滚动更新的同时,为了保证服务的可用性,当前控制器内不可以的pod不能超出一定范围,因为需要至少保留一定数量的pod以保证服务可以被客户端正常访问,可以通过一下参数指定:  #kubectl explain deployment.spec.strategy
      deployment.spec.strategy.rollingUpdate.maxSurge #指定升级期间pod总数可以超出定义好的期望的pod数或者百分比,默认为25%,如果设置为10%,假如当前pod为100,拿么升级时最多创建110个pod即额外有10%的pod临时会超出道歉指定的副本数限制。
      deployment.spec.strategy.rollingUpdate.maxUnavailable #指定在升级期间最大不可用的pod数量,可以是整数或者当前pod的百分比,默认是25%,键入当前pod为100,拿么升级时会有25个pod不可用,还有75个pod可用的。
  #注意!!!!以上两个值不能同时为0,如果同时为0将无法实现滚动更新。

重建更新

先删除现有的pod,然后基于新版本的镜像重建,优势是同时只有一个版本在线,不会产生多版本在线问题,缺点是pod删除后到pod重建成功中间的时间导致服务无法访问,因此使用较少。

升级操作

目前版本
滚动升级命令
kubectl set image deployment/需要升级deployment名称 pod名称=镜像名称
开始执行升级
#kubectl set image deployment/tomcat tomcat-lhl-app1=10.0.0.109/lhl/tomcatweb:v2 -nlhl
deployment.apps/tomcat image updated
升级过称
升级后
升级完成

回滚操作

当前版本

执行回滚到上一次版本

#  kubectl rollout undo deployment/tomcat -nlhl
deployment.apps/tomcat rolled back
回滚过称
回滚完成

暂停升级

暂停升级后会停止滚动升级的操作两个版本同时存在,在未解除暂停状态会一直暂停升级
kubectl rollout pause deployment/tomcat -nlhl
暂停状态

恢复暂停

解除回滚升级暂停,继续回滚升级
kubectl rollout resume deployment/tomcat -nlhl
继续升级
升级完毕