K8s - Kubernetes使用详解7(滚动更新、回滚)

作者: hangge 发布时间: 2019-09-02 浏览: 2488 次 编辑

七、滚动更新、回滚

1,滚动更新

滚动更新的含义:一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新。
滚动更新的好处:最大好处是零停机,整个更新过程始终有副本在运行,从而保证了业余的连续性。

(1)假设我们要部署三个副本的应用,初始镜像是 httpd:2.4.16,配置文件为 httpd.v1.yml,内容如下: 

原文:K8s - Kubernetes使用详解7(滚动更新、回滚)


(2)然后通过 kubectl apply 进行部署:

1
kubectl apply -f httpd.v1.yml


(3)接着我们需要将镜像更新到 httpd:2.4.17,配置文件为 httpd.v2yml,内容如下: 

原文:K8s - Kubernetes使用详解7(滚动更新、回滚)


(4)再次执行 kubectl apply 进行部署:

1
kubectl apply -f httpd.v2.yml


(5)通过 kubectl get pods 可以观察滚动更新的过程,可以看到 v1 的 Pod 被逐个删除,同时启动了新的 v2 Pod。 

原文:K8s - Kubernetes使用详解7(滚动更新、回滚)


2,回滚

    kubectl apply 每次更新应用时 Kubernetes 都会记录下当前的配置,保存为一个 revision(版次),这样就可以回滚到某个特定 revision
    默认配置下,Kubernetes 只会保留最近的几个 revision,可以在 Deployment 配置文件中通过 revisionHistoryLimit 属性增加 revision 数量。

(1)假设我们这里有三个配置文件 httpd.v1.ymlhttpd.v2.yml  httpd.v3.yml,分别对应不同的 httpd 镜像 2.4.162.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

原文:K8s - Kubernetes使用详解7(滚动更新、回滚)


(4)如果要回滚到某个版本,比如 revision 1,可以执行如下命令:

1
kubectl rollout undo deployment httpd --to-revision=1


(5)此时,revison 历史记录也会发生相应变化。原先的 revison 1 变成了 revison 4

原文:K8s - Kubernetes使用详解7(滚动更新、回滚)


原文链接:https://www.hangge.com/blog/cache/detail_2436.html