如何滚动更新 Service?- 天天5分钟玩转 Docker 容器技术(102)

在前面的实验中,咱们部署了多个副本的服务,本节将讨论如何滚动更新每个副本。html

滚动更新下降了应用更新的风险,若是某个副本更新失败,整个更新将暂停,其余副本则能够继续提供服务。同时,在更新的过程当中,老是有副本在运行的,所以也保证了业务的连续性。node

下面咱们将部署三副本的服务,镜像使用 httpd:2.2.31,而后将其更新到 httpd:2.2.32。web

建立服务:docker

 

docker service create --name my_web --replicas=3 httpd:2.2.31

 

505.png

将 service 更新到 httpd:2.2.32:
学习

 

docker service update --image httpd:2.2.32 my_web

--image 指定新的镜像。ui

Swarm 将按照以下步骤执行滚动更新:spa

  1. 中止第一个副本。code

  2. 调度任务,选择 worker node。orm

  3. 在 worker 上用新的镜像启动副本。htm

  4. 若是副本(容器)运行成功,继续更新下一个副本;若是失败,暂停整个更新过程。

docker service ps 查看更新结果。

506.png
 

三个副本都已经更新到 httpd:2.2.32。

默认配置下,Swarm 一次只更新一个副本,而且两个副本之间没有等待时间。咱们能够经过 --update-parallelism 设置并行更新的副本数目,经过 --update-delay 指定滚动更新的间隔时间。

好比执行以下命令:

 

docker service update --replicas 6 --update-parallelism 2 --update-delay 1m30s my_web

service 增长到六个副本,每次更新两个副本,间隔时间一分半钟。

docker service inspect 查看 service 的当前配置。

507.png

docker service ps 确保6个副本处于正常状态。

508.png

执行以下命令,将镜像更新到 httpd:2.4.16。

 

docker service update --image httpd:2.4.16 my_web

等待一会,查看更新的状态。

509.png

有4个副本已经更新到 httpd:2.4.16,从启动时间看,确实是分了两批进行,之间间隔90秒,每次更新两个副本。

Swarm 还有个方便的功能是回滚,若是更新后效果不理想,能够经过 --rollback 快速恢复到更新以前的状态。

510.png

service 全部副本都已经恢复到 httpd:2.2.32。

请注意,--rollback 只能回滚到上一次执行 docker service update 以前的状态,并不能无限制地回滚。

滚动更新就讨论到这里,下一节咱们学习 Docker Swarm 如何管理数据。

书籍:

1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

相关文章
相关标签/搜索