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


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

    滚动更新降低了应用更新的风险,如果某个副本更新失败,整个更新将暂停,其他副本则可以继续提供服务。同时,在更新的过程中,总是有副本在运行的,因此也保证了业务的连续性。

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

    创建服务:

    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 指定新的镜像。

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

    1. 停止第一个副本。

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

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

    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

     
  • 相关阅读:
    汇编实验四
    汇编实验三
    C语言常用标准库函数
    实验一
    NGUI的缓动
    unity之Hashtable ArrayList List
    有关Unity 的一些 笔记之
    有关Unity 的一些 笔记之场景
    有关Unity 的一些 笔记之prefab
    有关Unity 的一些 笔记之消息事件
  • 原文地址:https://www.cnblogs.com/CloudMan6/p/7988455.html
Copyright © 2020-2023  润新知