- 前言
- 概述
- Swarm模式关键概念
- 开始使用Swarm
- 开始使用Swarm - 安装
- 开始使用Swarm - 创建Swarm
- 开始使用Swarm - 增加节点
- 开始使用Swarm - 发布service
- 开始使用Swarm - 查看service的状态
- 开始使用Swarm - 服务中task的数量
- 开始使用Swarm - 删除service
- 开始使用Swarm - 滚动式更新
- 开始使用Swarm - DRAIN状态的节点
- 开始使用Swarm - Swarm模式端口路由网
- Swarm模式工作原理
- Swarm模式工作原理 - 节点工作原理
- Swarm模式工作原理 - Service工作原理
- Swarm模式工作原理 - 安全(PKI)
- Swarm模式工作原理 - Task的状态
- Swarm管理维护指南
- Swarm管理维护指南 - Swarm中的Manger节点
- Swarm管理维护指南 - 灾备恢复
- Swarm管理维护指南 - 其他
- 其他
- 其他 - Worker节点负载均衡
- 其他 - 强制平衡
- 其他 - 强行移除节点
- 其他 - Manager节点配置静态IP地址
- 其他 - 分布式manager节点
- 其他 - Manager节点的故障排查
- 其他 - 监控Swarm健康
- 其他 - 备份
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
开始使用Swarm - DRAIN状态的节点
之前讲述的内容,都是在所有的节点都是可用的,状态都是ACTIVE。因此,manager可以将任务分配到所有节点上,所以到目前位置所有的节点都可以接受manager分配的任务。
有的时候,例如计划系统维护时,我们需要将节点的状态变成DRAIN。DRAIN状态将阻止节点接收manager分配的任务。同时也意味着,manager将停止该节点上的task,并将task转移到其他ACTIVE状态的节点上运行。
通过ssh登录到manager节点。
查看我们有哪些
ACTIVE状态的节点:$ docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active38ciaotwjuritcdtn9npbnkuz worker1 Ready Activee216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader
部署一个
redis服务:$ docker service create --replicas 3 --name redis --update-delay 10s redis:3.0.6c5uo6kdmzpon37mgj9mwglcfw
运行命令
docker service ps redis查看task分配的情况:$ docker service ps redisNAME IMAGE NODE DESIRED STATE CURRENT STATEredis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 26 secondsredis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Running Running 26 secondsredis.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 worker1worker1
检查节点状态:
$ docker node inspect --pretty worker1ID: 38ciaotwjuritcdtn9npbnkuzHostname: worker1Status:State: ReadyAvailability: Drain...snip...
这里已经完成节点
DRAIN状态的变更。运行命令
docker service ps redis查看manager如何将task重新分配:$ docker service ps redisNAME IMAGE NODE DESIRED STATE CURRENT STATE ERRORredis.1.7q92v0nr1hcgts2amcjyqg3pq redis:3.0.6 manager1 Running Running 4 minutesredis.2.b4hovzed7id8irg1to42egue8 redis:3.0.6 worker2 Running Running About a minute\_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:3.0.6 worker1 Shutdown Shutdown 2 minutes agoredis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:3.0.6 worker2 Running Running 4 minutes
manager为了使
redis的状态保持跟最初设定一致,将DRAIN状态节点上的task转移到一个ACTIVE状态的节点上运行。运行命令
docker node update --availability active <NODE-ID>使节点状态变回到ACTIVE。$ docker node update --availability active worker1worker1
检查节点状态。
$ docker node inspect --pretty worker1ID: 38ciaotwjuritcdtn9npbnkuzHostname: worker1Status:State: ReadyAvailability: Active...snip...
节点状态变回到
ACTIVE后,就可以在如下情况时接受manager分配创建task。- 增加service中task数量
- 滚动式更新时
- 其他节点状态变为
DRAIN时 - 其他节点的task运行失败时。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论