管理swarm(10) – swarm实践 – 滚动更新服务

在上一篇文章中你更新了服务的实例数。在本文中,我们尝试部署一个Redis 3.0.6的容器服务。然后使用滚动更新把它升级到Redis 3.0.7。
1.登录manger1机器。
2.部署Redis 3.0.6到swarm和配置swarm为10秒更新延迟:

  1. $ docker service create \
  2.   --replicas 3 \
  3.   --name redis \
  4.   --update-delay 10s \
  5.   redis:3.0.6
  6.  
  7. 0u6a4s31ybk7yw2wyvtikmu50

在服务部署时你配置了滚动更新策略。
–update-delay参数配置更新服务任务之间的延迟时间或一组任务之间的延迟时间。你可以以秒s,分m,时h单位来配置延迟时间。所以10m30s表示10分钟30秒的延迟。
默认情况下,调度程序一次执行一个更新任务。你可以传递–update-parallelism参数来配置调度程序同时执行的最大更新服务任务数。
默认情况下,当单个更新任务返回RUNNING的状态时,调度器调度继续其它任务直到所有任务更新完成。如果在更新任务期间的任何时候一个任务返回FAILED,调度器暂停更新。你可以在docker service create或docker service update时使用–update-failure-action来控制其行为。
3.查看redis服务:

  1. $ docker service inspect --pretty redis
  2.  
  3. ID:             0u6a4s31ybk7yw2wyvtikmu50
  4. Name:           redis
  5. Mode:           Replicated
  6.  Replicas:      3
  7. Placement:
  8.  Strategy:      Spread
  9. UpdateConfig:
  10.  Parallelism:   1
  11.  Delay:         10s
  12. ContainerSpec:
  13.  Image:         redis:3.0.6
  14. Resources:

4.现在开始更新redis容器。swarm管理器根据UpdateConfig策略来对节点应用更新:

  1. $ docker service update --image redis:3.0.7 redis
  2. redis

默认情况下调度器应用滚动更新的步骤如下:

  • 停止第一个任务。
  • 对已停止的任务执行更新。
  • 启动已经完成更新的容器。
  • 如果更新任务返回RUNNING,等待一个指定的延迟然后停止下一个任务。
  • 如果在任何时候任务返回FAIlED,停止更新。
  • 5.执行docker service inspect –pretty redis命令来查看当前状态:

    1. $ docker service inspect --pretty redis
    2.  
    3. ID:             0u6a4s31ybk7yw2wyvtikmu50
    4. Name:           redis
    5. Mode:           Replicated
    6.  Replicas:      3
    7. Placement:
    8.  Strategy:      Spread
    9. UpdateConfig:
    10.  Parallelism:   1
    11.  Delay:         10s
    12. ContainerSpec:
    13.  Image:         redis:3.0.7
    14. Resources:

    如果更新暂时,下面是service inspect的输出:

    1. $ docker service inspect --pretty redis
    2.  
    3. ID:             0u6a4s31ybk7yw2wyvtikmu50
    4. Name:           redis
    5. ...snip...
    6. Update status:
    7.  State:      paused
    8.  Started:    11 seconds ago
    9.  Message:    update paused due to failure or early termination of task 9p7ith557h8ndf0ui9s0q951b
    10. ...snip...

    执行docker service update 命令来重启已暂停的更新,例如:

    1. docker service update redis

    6.执行docker service ps 来查看滚动更新:

    1. $ docker service ps redis
    2.  
    3. ID                         NAME         IMAGE        NODE       DESIRED STATE  CURRENT STATE            ERROR
    4. dos1zffgeofhagnve8w864fco  redis.1      redis:3.0.7  worker1    Running        Running 37 seconds
    5. 88rdo6pa52ki8oqx6dogf04fh   \_ redis.1  redis:3.0.6  worker2    Shutdown       Shutdown 56 seconds ago
    6. 9l3i4j85517skba5o7tn5m8g0  redis.2      redis:3.0.7  worker2    Running        Running About a minute
    7. 66k185wilg8ele7ntu8f6nj6i   \_ redis.2  redis:3.0.6  worker1    Shutdown       Shutdown 2 minutes ago
    8. egiuiqpzrdbxks3wxgn8qib1g  redis.3      redis:3.0.7  worker1    Running        Running 48 seconds
    9. ctzktfddb2tepkr45qcmqln04   \_ redis.3  redis:3.0.6  mmanager1  Shutdown       Shutdown 2 minutes ago

    在swarm更新完所有的任务前,你会看到有些节点运行着redis:3.0.6,而有些运行redis:3.0.7。

    标签:Swarm 发布于:2019-11-20 08:25:18