Linux入门教程:管理swarm(10) – swarm实践 – 滚动更新服务,在本文中,我们尝试部


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

$ docker service create \   --replicas 3 \   --name redis \   --update-delay 10s \   redis:3.0.6   0u6a4s31ybk7yw2wyvtikmu50

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

$ docker service inspect --pretty redis   ID:             0u6a4s31ybk7yw2wyvtikmu50 Name:           redis Mode:           Replicated  Replicas:      3 Placement:  Strategy:      Spread UpdateConfig:  Parallelism:   1  Delay:         10s ContainerSpec:  Image:         redis:3.0.6 Resources:

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

$ docker service update --image redis:3.0.7 redis redis

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

停止第一个任务。 对已停止的任务执行更新。 启动已经完成更新的容器。 如果更新任务返回RUNNING,等待一个指定的延迟然后停止下一个任务。 如果在任何时候任务返回FAIlED,停止更新。

5.执行docker service inspect –pretty redis命令来查看当前状态:

$ docker service inspect --pretty redis   ID:             0u6a4s31ybk7yw2wyvtikmu50 Name:           redis Mode:           Replicated  Replicas:      3 Placement:  Strategy:      Spread UpdateConfig:  Parallelism:   1  Delay:         10s ContainerSpec:  Image:         redis:3.0.7 Resources:

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

$ docker service inspect --pretty redis   ID:             0u6a4s31ybk7yw2wyvtikmu50 Name:           redis ...snip... Update status:  State:      paused  Started:    11 seconds ago  Message:    update paused due to failure or early termination of task 9p7ith557h8ndf0ui9s0q951b ...snip...

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

docker service update redis

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

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

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

相关内容