Policy Information
Deployment控制器支持控制更新过程中的控制,如“暂停(pause)”或“继续(resume)”更新操作。
比如有一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
# 1、更新deployment的版本,并配置暂停deployment
[root@master ~]# kubectl set image deploy your_deploy_name nginx=nginx:1.17.4 -n your_namespace && kubectl rollout pause deployment your_deploy_name -n your_namespace
deployment.apps/nginx-deployment image updated
deployment.apps/nginx-deployment paused
# 2、观察更新状态
# - your_deploy_name 你的deploy名称
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl rollout status deploy your_deploy_name -n your_namespace
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 4 new replicas have been updated...
# 3、监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl get rs -n your_namespace -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES
nginx-deployment-5d89bdfbf9 3 3 3 19m nginx nginx:1.17.1
nginx-deployment-675d469f8b 0 0 0 14m nginx nginx:1.17.2
nginx-deployment-6c9f56fcfb 2 2 2 3m16s nginx nginx:1.17.4
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl get pods -n your_namespace
NAME READY STATUS RESTARTS AGE
nginx-deployment-5d89bdfbf9-rj8sq 1/1 Running 0 7m33s
nginx-deployment-5d89bdfbf9-ttwgg 1/1 Running 0 7m35s
nginx-deployment-5d89bdfbf9-v4wvc 1/1 Running 0 7m34s
nginx-deployment-6c9f56fcfb-996rt 1/1 Running 0 3m31s
nginx-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 3m31s
# 4、确保更新的pod没问题了,继续更新
# - your_deploy_name 你的deploy名称
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl rollout resume deploy your_deploy_name -n your_namespace
deployment.apps/nginx-deployment resumed
# 5、查看最后的更新情况
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl get rs -n your_namespace -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES
nginx-deployment-5d89bdfbf9 0 0 0 21m nginx nginx:1.17.1
nginx-deployment-675d469f8b 0 0 0 16m nginx nginx:1.17.2
nginx-deployment-6c9f56fcfb 4 4 4 5m11s nginx nginx:1.17.4
# - your_namespace 你的命名空间名称
[root@master ~]# kubectl get pods -n your_namespace
NAME READY STATUS RESTARTS AGE
nginx-deployment-6c9f56fcfb-7bfwh 1/1 Running 0 37s
nginx-deployment-6c9f56fcfb-996rt 1/1 Running 0 5m27s
nginx-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 5m27s
nginx-deployment-6c9f56fcfb-rf84v 1/1 Running 0 37s
评论