上一篇在《Deployment Controller详解(上)》中介绍了Deployment Controller 的创建、更新和回滚。了解了这三个功能,基本上也就懂得了大厂PaaS平台中服务的灰度升级、失败回滚等操作是如何实现的了。
接下来本文会介绍Deployment Controller的暂停和恢复部署。
4. 暂停和恢复滚动更新部署
设想,现在有这么一个场景:在新版本上线之前可能会对线上服务有多次的修改,例如修改服务版本、容器占用的cpu以及内存等等。在完全修改之前并不想影响线上服务的运行。
此时便可以利用Deployment暂停滚动更新,等完全修改完成后,再开始更新。
查看当前服务
接上一篇,已经部署好了nginx-deployment,
获取部署详细信息以及获取发布状态:
kubectl get deploy
-----
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 4/4 4 4 14h
-----
kubectl get rs
-----
NAME DESIRED CURRENT READY AGE
nginx-deployment-848dd6cfb5 4 4 4 15h
暂停
kubectl rollout pause deployment/nginx-deployment
可以看到以下输出:
deployment.apps/nginx-deployment paused
更新
- 更新 Deployment 的镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.14.2
上一篇中将镜像更新成了1.16.1,此次再更新回1.14.2
- 查看是否开始滚动更新
kubectl rollout history deployment/nginx-deployment
- 获取 rollout 状态以验证现有 ReplicaSet 是否未更改:
kubectl get rs
可以看到前后rs版本并没有任何变化,也就意味着并没有开始更新。
继续更新
kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
只要暂停部署,对部署的任何更新都不会影响之前的功能。
恢复部署
最后,恢复部署部署并观察新的 ReplicaSet 是否出现了所有新更新:
kubectl rollout resume deployment/nginx-deployment
执行kubectl get rs -w
观察部署的状态直至完成。
可以看到已经将之前的版本更新成最新版本了。
注意:在恢复暂停的部署之前,无法进行回滚。
Tips:关于Deployment Controller ,本文仅介绍了其使用方法,能够让新手快速使用起来,更多的细节可以阅读官方文档。