DRAIN状态的节点
之前讲述的内容,都是在所有的节点都是可用的,状态都是ACTIVE。因此,manager可以将任务分配到所有节点上,所以到目前位置所有的节点都可以接受manager分配的任务。
有的时候,例如计划系统维护时,我们需要将节点的状态变成DRAIN。DRAIN状态将阻止节点接收manager分配的任务。同时也意味着,manager将停止该节点上的task,并将task转移到其他ACTIVE状态的节点上运行。
通过ssh登录到manager节点。
查看我们有哪些
ACTIVE状态的节点:$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active 38ciaotwjuritcdtn9npbnkuz worker1 Ready Active e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader部署一个
redis服务:$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6 c5uo6kdmzpon37mgj9mwglcfw运行命令
docker service ps redis查看task分配的情况:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 26 seconds redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Running Running 26 seconds redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:3.0.6 worker2 Running Running 26 seconds我们看见每一个node上都被分配了一个task。由于实际实验环境不同,也可能并不是这样分配的。
运行命令
docker node update --availability drain <NODE-ID>将节点状态设置为DRAIN。docker node update --availability drain worker1 worker1检查节点状态:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...这里已经完成节点
DRAIN状态的变更。运行命令
docker service ps redis查看manager如何将task重新分配:$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 4 minutes redis.2.b4hovzed7id8irg1to42egue8 redis:3.0.6 worker2 Running Running About a minute \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes ago redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:3.0.6 worker2 Running Running 4 minutesmanager为了使
redis的状态保持跟最初设定一致,将DRAIN状态节点上的task转移到一个ACTIVE状态的节点上运行。运行命令
docker node update --availability active <NODE-ID>使节点状态变回到ACTIVE。$ docker node update --availability active worker1 worker1检查节点状态。
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...节点状态变回到
ACTIVE后,就可以在如下情况时接受manager分配创建task。- 增加service中task数量
- 滚动式更新时
- 其他节点状态变为
DRAIN时 - 其他节点的task运行失败时。