七、滚动更新、回滚
1,滚动更新
滚动更新的含义:一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新。
滚动更新的好处:最大好处是零停机,整个更新过程始终有副本在运行,从而保证了业余的连续性。
(1)假设我们要部署三个副本的应用,初始镜像是 httpd:2.4.16,配置文件为 httpd.v1.yml,内容如下:
(2)然后通过 kubectl apply 进行部署:
1 | kubectl apply -f httpd.v1.yml |
(3)接着我们需要将镜像更新到 httpd:2.4.17,配置文件为 httpd.v2yml,内容如下:
(4)再次执行 kubectl apply 进行部署:
1 | kubectl apply -f httpd.v2.yml |
(5)通过 kubectl get pods 可以观察滚动更新的过程,可以看到 v1 的 Pod 被逐个删除,同时启动了新的 v2 Pod。
2,回滚
kubectl apply 每次更新应用时 Kubernetes 都会记录下当前的配置,保存为一个 revision(版次),这样就可以回滚到某个特定 revision。
默认配置下,Kubernetes 只会保留最近的几个 revision,可以在 Deployment 配置文件中通过 revisionHistoryLimit 属性增加 revision 数量。
(1)假设我们这里有三个配置文件 httpd.v1.yml、httpd.v2.yml 和 httpd.v3.yml,分别对应不同的 httpd 镜像 2.4.16、2.4.17 和 2.4.18。
(2)在通过 kubectl apply 部署并更新应用时增加一个 --record 参数:
--record 的作用是将当前命令记录到 revision 记录中,这样我们就可以知道每个 revison 对应的是哪个配置文件。
1 2 3 | kubectl apply -f httpd.v1.yml --record kubectl apply -f httpd.v2.yml --record kubectl apply -f httpd.v3.yml --record |
(3)通过如下命令可以查看 revison 历史记录:
1 | kubectl rollout history deployment httpd |
(4)如果要回滚到某个版本,比如 revision 1,可以执行如下命令:
1 | kubectl rollout undo deployment httpd --to-revision=1 |
(5)此时,revison 历史记录也会发生相应变化。原先的 revison 1 变成了 revison 4。
原文链接:https://www.hangge.com/blog/cache/detail_2436.html