回滚Deployment控制器下的应⽤发布

若因各种原因导致滚动更新⽆法正常进⾏,如镜像⽂件获取失败、“⾦丝雀”遇险等,则应该将应⽤回滚到之前的版本,或者回滚到由⽤户指定的历史记录中的版本。
Deployment控制器的回滚操作可使⽤“kubectl rollout undo”命令完成,例如,下⾯的命令可将myapp-deploy回滚⾄此前的版本:

~]$ kubectl rollout undo deployments myapp-deploy
deployment.apps "myapp-deploy"

等回滚完成后,验证myapp-deploy的ReplicaSet控制器对象是否已恢复到指定的历史版本以确保其回滚正常完成。在“kubectl rollout undo”命令上使⽤“--to-revision”选项指定revision号码即可回滚到历史特定版本,例如,假设myapp-deploy包含如下的revision历史记录:

~]$ kubectl rollout history deployments myapp-deploy
deployments "myapp-deploy"
REVISION CHANGE-CAUSE
1 kubectl patch deployments myapp-deploy --patch={"spec": {"minReady-Seconds": 5}}
2 kubectl patch deployments myapp-deploy --patch={"spec": {"strategy":{"rollingUpdate": {"maxSurge": 1, "maxUnavailable": 0}}}}
3 kubectl set image deployments myapp-deploy myapp=ikubernetes/myapp:v3
4 kubectl set image deployments myapp-deploy myapp=ikubernetes/myapp:v4

若要回滚到号码为2的revision记录,则使⽤如下命令即可完成:

~]$ kubectl rollout undo deployments myapp-deploy --to-revision=2
deployment.apps "myapp-deploy"

回滚操作中,其revision记录中的信息会发⽣变动,回滚操作会被当作⼀次滚动更新追加进历史记录中,⽽被回滚的条⽬则会被删除。需要注意的是,如果此前的滚动更新过程处于“暂停”状态,那么回滚操作就需要先将Pod模板的版本改回到之前的版本,然后“继续”更新,否则,其将⼀直处于暂停状态⽽⽆法回滚。

原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/15184783.html