当前位置: > > > K8s - Kubernetes使用详解7(滚动更新、回滚)

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

七、滚动更新、回滚

1,滚动更新

滚动更新的含义:一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新。
滚动更新的好处:最大好处是零停机,整个更新过程始终有副本在运行,从而保证了业余的连续性。
(1)假设我们要部署三个副本的应用,初始镜像是 httpd:2.4.16,配置文件为 httpd.v1.yml,内容如下: 

(2)然后通过 kubectl apply 进行部署:
kubectl apply -f httpd.v1.yml

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

(4)再次执行 kubectl apply 进行部署:
kubectl apply -f httpd.v2.yml

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

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 对应的是哪个配置文件。
kubectl apply -f httpd.v1.yml --record
kubectl apply -f httpd.v2.yml --record
kubectl apply -f httpd.v3.yml --record

(3)通过如下命令可以查看 revison 历史记录:
kubectl rollout history deployment httpd

(4)如果要回滚到某个版本,比如 revision 1,可以执行如下命令:
kubectl rollout undo deployment httpd --to-revision=1

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