在之前的章节,所以的节点状态都为ACTIVE了。swarm管理器能分配任务到任何ACTIVE的节点,所以目前为止所有的节点都可以接收任务。
不过有时候如维护期间,你需要设置一个节点为DRAIN状态,也就是下线节点。DRAIN状态的节点不再接受来自swarm管理器发来的新任务。也意味着管理器停止DRAIN状态节点的任务然后再在ACTIVE节点上新起一个副本任务来替代之前的任务。
1.登录manager1机器。
2.查看目前所有的节点都为Active状态。
- $ docker node ls
- ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
- 1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active
- 38ciaotwjuritcdtn9npbnkuz worker1 Ready Active
- e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader
3.如果你没有运行之前滚动更新的步骤,那么先执行如下命令创建redis服务:
- $ docker service create –replicas 3 –name redis –update-delay 10s redis:3.0.6
- c5uo6kdmzpon37mgj9mwglcfw
4.执行docker service ps redis查看swarm管理器把任务分配到了哪些节点:
- $ docker service ps redis
- ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE
- 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis redis:3.0.6 Running 26 seconds Running manager1
- 7h2l8h3q3wqy5f66hlv9ddmi6 redis.2 redis redis:3.0.6 Running 26 seconds Running worker1
- 9bg7cezvedmkgg6c8yzvbhwsd redis.3 redis redis:3.0.6 Running 26 seconds Running worker2
在这个示例中,swarm管理器为每个节点分配一个任务。
5.执行docker node update –availability drain 来下线一个节点:
- docker node update –availability drain worker1
- worker1
6.查看这个节点的状态:
- $ docker node inspect –pretty worker1
- ID: 38ciaotwjuritcdtn9npbnkuz
- Hostname: worker1
- Status:
- State: Ready
- Availability: Drain
- …snip…
下线的节点显示Drain状态。
7.执行docker service ps redis来查看swarm管理器是如何重新分配redis任务到其它可用节点的:
- $ docker service ps redis
- ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
- 7q92v0nr1hcgts2amcjyqg3pq redis.1 redis:3.0.6 manager1 Running Running 4 minutes
- b4hovzed7id8irg1to42egue8 redis.2 redis:3.0.6 worker2 Running Running About a minute
- 7h2l8h3q3wqy5f66hlv9ddmi6 _ redis.2 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago
- 9bg7cezvedmkgg6c8yzvbhwsd redis.3 redis:3.0.6 worker2 Running Running 4 minutes
swarm管理器停止已下线节点的redis任务并在其它Active节点创建一个新任务来维持设定redis副本数。
8.执行docker node update –availability active 来上线已下线的节点:
- $ docker node update –availability active worker1
- worker1
9.查看上一步更新节点的状态:
- $ docker node inspect –pretty worker1
- ID: 38ciaotwjuritcdtn9npbnkuz
- Hostname: worker1
- Status:
- State: Ready
- Availability: Active
- …snip…
当设置节点重新为Active状态时,在以下几种情况会重新接收新任务: