美文网首页Docker SwarmDocker容器程序员
Docker Swarm 进阶:服务滚动部署

Docker Swarm 进阶:服务滚动部署

作者: Anoyi | 来源:发表于2018-01-17 09:57 被阅读377次

    文/Anoyi

    服务平滑升级,即服务不停机更新,客户端无感知。

    ► 案例演示:Redis 版本升级 4.0.4 -> 4.0.5

    1、创建 overlay 网络

    docker network create \
      --attachable \
      --driver overlay \
      redis_network
    

    说明:添加 --attachable 是为了待会 redis-cli 的连接,生产环境建议不加

    2、创建 redis 服务,版本 4.0.4

    docker service create \
      --name redis \
      --replicas 2 \
      --network redis_network \
      redis:4.0.4
    

    3、使用 redis-cli 连接到 redis 服务

    新建一个终端窗口,执行:

    docker run -it --network redis_network --rm redis redis-cli -h redis -p 6379
    

    说明:此处用的 latest 版本的 redis 镜像客户端,与服务端版本无关

    4、升级 redis 服务到 4.0.5 版本

    执行以下命令,同时注意观察 redis-cli 连接的变化:

    docker service update --image redis:4.0.5 redis
    

    现象:整个升级过程 redis-cli 没有断开连接,说明升级过程是平滑的,不间断的。

    5、查看 redis 服务的任务列表

    docker service ps redis
    

    ► 附加内容

    1、任务或任务组之间更新延迟时间的设置

    使用 --update-delay 来配置,单位 smh,1小时20分30秒即 1h20m30s

    2、任务调度器并行任务数量的配置

    默认并行任务的数量为 1,如上案例所示,redis 服务有 2 个副本,在更新过程中,会有 2 个新的任务来执行 2 个副本的更新,由于最大并发任务执行量是 1,所以 2 个副本会依次更新。

    可以通过 --update-parallelism 来配置最大任务并发执行数量。

    3、任务更新失败的情况

    默认情况下,当对单个任务的更新返回 RUNNING 状态时,调度程序开始更新另一个任务,直到所有任务都更新。如果在更新期间任务返回 FAILED 状态,则调度程序会暂停更新。

    可以使用 docker service createdocker service update--update-failure-action 来控制失败后的行为。

    4、平滑升级的条件

    服务平滑升级需要至少2个副本,单副本服务在更新过程中不可用。

    ► 相关资料

    相关文章

      网友评论

      • 闻帅Domain:写的很好,榜样啊。作者工作几年了?从文笔看很年轻啊。速度与激情,速度与激情。
        Anoyi:@闻帅dd 0.5 年,谢谢关注! :kissing_heart:
      • cooling2016:您好,若若请教下,docker-machine 和docker-swarm 有何关联?
        Anoyi:@cooling2016 docker-machine 和 docker-swarm 没有关联关系,docker-machine 的作用是用来创建虚拟机的,有多个虚拟机之后就方便模拟多服务器的环境

      本文标题:Docker Swarm 进阶:服务滚动部署

      本文链接:https://www.haomeiwen.com/subject/xkpgnxtx.html