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

