kubernetes Pod的升级与回滚

一:Deployment的升级

1.通过kubectl set image命令为Deployment设置新的镜像名称
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1

2.使用kubectl edit命令修改Deployment的配置 将spec.template.spec.containers[0].images 从nginx:1.7.9 更改为1.9.1; 保存退出后,kubernetes会自动升级镜像。
3.通过kubectl rollout status 可以查看deployment的更新过程
在Deployment的定义中,可以通过spec.strategy指定Pod更新的策略:

1.Recreate(重建): 设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod.
2.RollingUpdate(滚动更新):以滚动更新的方式来逐个更新Pod,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和maxSurge)来控制滚动更新的过程。
通常来说,不鼓励更新Deployment的标签选择器,因为这样会导致Deployment选择的Pod列表发生变化,也可能与其它控制器产生冲突。

:Deployment的回滚

所有Deployment的发布历史记录都保留在系统中,如果要进行回滚:

发布应用时记录版本次 kubectl apply -f xxxx.yaml --record

1. 用kubectl rollout history命令检查这个Deployment部署的历史记录
2.用kubectl rollout undo deployment/nginx-deployment 撤销本次发布回滚到上一个部署版本
3.用kubectl rollout undo deployment/nginx-deployment --to-revision=2 回滚到指定版本

三:暂停和恢复Deployment的部署操作,以完成复杂的修改

对应一次复杂的Deployment配置修改,为了避免频繁触发Deployment的更新操作,可以暂停Deployment的更新操作,然后进行配置修改,再回复Deployment.一次性触发完整的更新操作。
使用命令:kubectl rollout pause deployment/nginx-deployment

四:使用kubectl rolling-update命令完成RC的滚动升级

对应RC的滚动升级,Kubernetes还提供了一个kubectl rolling-update 命令进行实现。该命令创建一个新的RC,然后自动控制旧的RC中的副本数量逐渐减少到0,同时新的RC中的Pod副本的数量从0逐步增加到目标值,来完成Pod的升级。 需要注意的是新旧RC要再同一个命名空间内。

五:其它管理对象的更新策略
1.DaemonSet的更新策略
a.OnDelete:  默认配置。只有旧的Pod被用户手动删除后,才触发新建操作。
b.RollingUpdate: 就版本的Pod将被自动杀掉,然后自动创建新版本的DaemonSet Pod.

2.StatefulSet的更新策略
StatefulSet的更新策略正逐渐向Deployment和DaemonSet的更新策略看齐。

原文:http://blog.itpub.net/28624388/viewspace-2154452/

 

posted @ 2019-09-23 17:59  linyouyi  阅读(2592)  评论(0编辑  收藏  举报