Deployment Controller详解(下)

上一篇在《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
    Deployment Controller详解(下)_第1张图片
    可以看到前后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观察部署的状态直至完成。

Deployment Controller详解(下)_第2张图片
可以看到已经将之前的版本更新成最新版本了。

注意:在恢复暂停的部署之前,无法进行回滚。

Tips:关于Deployment Controller ,本文仅介绍了其使用方法,能够让新手快速使用起来,更多的细节可以阅读官方文档。

你可能感兴趣的:(kubernetes,kubernetes,云原生,容器,运维)