管理swarm(11) – swarm实践 –下线节点

在之前的章节,所以的节点状态都为ACTIVE了。swarm管理器能分配任务到任何ACTIVE的节点,所以目前为止所有的节点都可以接收任务。
不过有时候如维护期间,你需要设置一个节点为DRAIN状态,也就是下线节点。DRAIN状态的节点不再接受来自swarm管理器发来的新任务。也意味着管理器停止DRAIN状态节点的任务然后再在ACTIVE节点上新起一个副本任务来替代之前的任务。
1.登录manager1机器。
2.查看目前所有的节点都为Active状态。

  1. $ docker node ls
  2.  
  3. ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  4. 1bcef6utixb0l0ca7gxuivsj0    worker2   Ready   Active
  5. 38ciaotwjuritcdtn9npbnkuz    worker1   Ready   Active
  6. e216jshn25ckzbvmwlnh5jr3g *  manager1  Ready   Active        Leader

3.如果你没有运行之前滚动更新的步骤,那么先执行如下命令创建redis服务:

  1. $ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6
  2.  
  3. c5uo6kdmzpon37mgj9mwglcfw

4.执行docker service ps redis查看swarm管理器把任务分配到了哪些节点:

  1. $ docker service ps redis
  2.  
  3. ID                         NAME     SERVICE  IMAGE        LAST STATE          DESIRED STATE  NODE
  4. 7q92v0nr1hcgts2amcjyqg3pq  redis.1  redis    redis:3.0.6  Running 26 seconds  Running        manager1
  5. 7h2l8h3q3wqy5f66hlv9ddmi6  redis.2  redis    redis:3.0.6  Running 26 seconds  Running        worker1
  6. 9bg7cezvedmkgg6c8yzvbhwsd  redis.3  redis    redis:3.0.6  Running 26 seconds  Running        worker2

在这个示例中,swarm管理器为每个节点分配一个任务。
5.执行docker node update –availability drain 来下线一个节点:

  1. docker node update --availability drain worker1
  2.  
  3. worker1

6.查看这个节点的状态:

  1. $ docker node inspect --pretty worker1
  2.  
  3. ID:         38ciaotwjuritcdtn9npbnkuz
  4. Hostname:       worker1
  5. Status:
  6.  State:         Ready
  7.  Availability:      Drain
  8. ...snip...

下线的节点显示Drain状态。
7.执行docker service ps redis来查看swarm管理器是如何重新分配redis任务到其它可用节点的:

  1. $ docker service ps redis
  2.  
  3. ID                         NAME          IMAGE        NODE      DESIRED STATE  CURRENT STATE           ERROR
  4. 7q92v0nr1hcgts2amcjyqg3pq  redis.1       redis:3.0.6  manager1  Running        Running 4 minutes
  5. b4hovzed7id8irg1to42egue8  redis.2       redis:3.0.6  worker2   Running        Running About a minute
  6. 7h2l8h3q3wqy5f66hlv9ddmi6   \_ redis.2   redis:3.0.6  worker1   Shutdown       Shutdown 2 minutes ago
  7. 9bg7cezvedmkgg6c8yzvbhwsd  redis.3       redis:3.0.6  worker2   Running        Running 4 minutes

swarm管理器停止已下线节点的redis任务并在其它Active节点创建一个新任务来维持设定redis副本数。
8.执行docker node update –availability active 来上线已下线的节点:

  1. $ docker node update --availability active worker1
  2.  
  3. worker1

9.查看上一步更新节点的状态:

  1. $ docker node inspect --pretty worker1
  2.  
  3. ID:         38ciaotwjuritcdtn9npbnkuz
  4. Hostname:       worker1
  5. Status:
  6. State:          Ready
  7. Availability:       Active
  8. ...snip...

当设置节点重新为Active状态时,在以下几种情况会重新接收新任务:

  • 在增大服务规模期间
  • 在滚动更新期间
  • 当设置另一个节点为Drain状态时
  • 当一个任务在另一个Active节点失败时
  • 标签:Swarm 发布于:2019-11-20 08:06:37