在上一篇文章中你更新了服务的实例数。在本文中,我们尝试部署一个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。