Linux入门教程:管理swarm(11) – swarm实践 –下线节点,swarmswarm管理器能分


在之前的章节,所以的节点状态都为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状态时,在以下几种情况会重新接收新任务:

在增大服务规模期间 在滚动更新期间 当设置另一个节点为Drain状态时 当一个任务在另一个Active节点失败时

相关内容