清空 swarm 上的节点
在本教程的早期步骤中,所有节点都已以可用性运行。Swarm Manager 可以将任务分配给任何节点,因此最多
现在,所有节点都可用于接收任务。Active
Active
有时,例如计划内维护时间,您需要将节点设置为 availability。 可用性 阻止节点接收新任务
从 Swarm Manager 中。这也意味着 Manager 会停止在
node 并在具有可用性的节点上启动副本任务。Drain
Drain
Active
重要
将节点设置为 不会从该节点中删除独立容器, 例如使用 、 或 Docker 引擎创建的 应用程序接口。节点的状态(包括 )仅影响节点的调度能力 Swarm 服务工作负载。
Drain
docker run
docker compose up
Drain
如果尚未打开,请打开一个终端并通过 ssh 连接到您 运行您的 Manager 节点。例如,本教程使用名为 .
manager1
验证您的所有节点是否都处于活动状态。
$ 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:7.4.0 c5uo6kdmzpon37mgj9mwglcfw
运行以查看 swarm 管理器如何分配 tasks 添加到不同的节点:
docker service ps redis
$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 26 seconds redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Running Running 26 seconds redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 26 seconds
在这种情况下,Swarm Manager 为每个节点分配了一个任务。您可以 查看在环境中的节点之间以不同方式分配的任务。
run 以耗尽一个节点 已分配任务:
docker node update --availability drain <NODE-ID>
$ docker node update --availability drain worker1 worker1
检查节点以检查其可用性:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...
耗尽的节点显示 。
Drain
Availability
运行以查看 swarm 管理器如何更新 服务的任务分配:
docker service ps redis
redis
$ docker service ps redis NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR redis.1.7q92v0nr1hcgts2amcjyqg3pq redis:7.4.0 manager1 Running Running 4 minutes redis.2.b4hovzed7id8irg1to42egue8 redis:7.4.0 worker2 Running Running About a minute \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6 redis:7.4.0 worker1 Shutdown Shutdown 2 minutes ago redis.3.9bg7cezvedmkgg6c8yzvbhwsd redis:7.4.0 worker2 Running Running 4 minutes
Swarm Manager 通过结束节点上的任务来保持所需状态 具有可用性,并在具有可用性的节点上创建新任务。
Drain
Active
run 返回 drained 节点设置为 active 状态:
docker node update --availability active <NODE-ID>
$ docker node update --availability active worker1 worker1
检查节点以查看更新的状态:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...
当您将节点设置回可用性时,它可以接收新任务:
Active
- 在服务更新期间进行扩展
- 在滚动更新期间
- 当您将另一个节点设置为 Availability 时
Drain
- 当任务在另一个活动节点上失败时
后续步骤
接下来,您将学习如何使用 Swarm 模式路由网格