1、应用回滚简介
在滚动更新过程中,如果新版本的pod启动失败或者已升级完成,但新版本中存在bug,则可以选择回滚到之前的可用版本。‘kubectl rollout‘命令可以方便的执行回滚和其他滚动更新管理,该命令支持Deployment、DaemonSet和statefulset资源
- 查看博客网站的历史版本
[root@k8s-master ~]# kubectl rollout history deployment/django-blog -n blog
deployment.apps/django-blog
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
5 <none>
6 <none>
7 <none>
REVISION:修订版本,从0开始递增
CHANGE-CAUSE:变更原因,可以通过 kubectl annotate 命令进行设置,例如将最近一次变更原因设置为v2
- 将最近一次变更原因设置为v2
[root@k8s-master ~]# kubectl annotate deployment/django-blog kubernetes.io/change-cause="v2" -n blog
deployment.apps/django-blog annotated
- 再次查看历史版本
[root@k8s-master ~]# kubectl rollout history deployment/django-blog -n blog
deployment.apps/django-blog
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
5 <none>
6 <none>
7 v2
- 回滚到上一个版本,既v1版本
[root@k8s-master ~]# kubectl rollout undo deployment/django-blog -n blog
deployment.apps/django-blog rolled back
- 注意:如果想回滚到指定的修订版本,可以使用--to-revision参数指定修订版本号。
操作完成后,可以通过 kubectl rollout status 子命令实时监控回滚进度
2、回滚实现机制
Deployment是通过ReplicaSet实现滚动更新,每次触发滚动更新都会创建一个新的ReplicaSet。完成滚动更新后,旧ReplicaSet会被保留。这样做的原因是,旧的ReplicaSet保存对应版本的pod配置信息。kubectl rollout undo命令的回滚机制是基于这些历史ReplicaSet实现的。
如果执行混滚到修订版本2,则kubernetes首先将修订版本号2重新标记为4,然后根据修订版本号找到对应的ReplicaSet,接着逐步增加该ReplicaSet的pod副本数,同时逐渐减少当前ReplicaSet的pod副本数,已实现平滑的回滚过程
Deployment默认保留10个历史版本,这可以通过revisionHistoryLimit字段进行设置
3、暂停和恢复滚动更新
kubectl roolout pause 和 kubectl rollout resume子命令分别用于暂停和恢复滚动更新过程,通常用于解决滚动更新过程中的问题。例如,当新版本出现问题时,可以执行暂停操作,然后进行问题排查和修复。问题解决后,执行恢复操作,使其继续进行。这两个子命令的用法如下
- 暂停滚动更新过程
kubectl rollout pause 资源类型/资源名称
- 恢复滚动更新过程
kubectl rollout resume 资源类型/资源名称
4、重启pod
在kubernetes1.15版本以后,kubec rollout命令新增了一个子命令restart,用于重新启动指定资源的滚动更新过程,这将导致所有pod重建。这对于需要重建pod的场景非常有用,如重新加载配置、重新拉取镜像等。kubectl rollout restart 子命令的用法如下
kubectl rollout restart 资源类型/资源名称
[root@k8s-master ~]# kubectl rollout restart deployment/django-blog -n blog
[root@k8s-master ~]# kubectl get pod -A -o wide|grep blog
blog django-blog-c6b69955f-cg9cg 1/1 Running 0 36s 10.244.85.251 k8s-node01 <none> <none>
blog django-blog-c6b69955f-dss72 1/1 Running 0 25s 10.244.58.220 k8s-node02 <none> <none>
blog django-blog-c6b69955f-dw59b 1/1 Running 0 13s 10.244.85.243 k8s-node01 <none> <none>
blog django-blog-d7d675654-jfn5b 1/1 Terminating 0 109s 10.244.58.244 k8s-node02 <none> <none>
blog django-blog-d7d675654-jft4h 1/1 Terminating 0 98s 10.244.85.240 k8s-node01 <none> <none>
blog django-blog-d7d675654-tppv4 1/1 Terminating 0 87s 10.244.58.245 k8s-node02 <none> <none>
标签:kubectl,回滚,kubernetes,django,blog,灰度,应用,rollout,k8s
From: https://www.cnblogs.com/suyj/p/18418143