排空群集中的节点
在教程的早期步骤中,所有节点都以Active可用性运行。swarm管理器可以将任务分配给任何Active节点,因此到目前为止,所有节点都可以接收任务。
有时,例如计划维护时间,您需要将节点设置为Drain可用性。Drain可用性会阻止节点从群集管理器接收新任务。这也意味着管理器会停止在节点上运行的任务,并在具有Active可用性的节点上启动副本任务。
重要
将节点设置为
Drain不会从该节点移除独立容器, 例如使用docker run、docker compose up或Docker Engine API创建的容器。节点的状态,包括Drain,仅影响节点调度 swarm服务工作负载的能力。
如果还没有,请打开终端并通过SSH连接到运行管理节点的机器。例如,本教程使用了一台名为
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运行
docker service ps redis以查看 swarm 管理器如何将任务分配到不同的节点:$ 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在这种情况下,群管理器将每个任务分配给每个节点。您可能会看到任务在您的环境中的节点之间分配不同。
运行
docker node update --availability drain来排空一个已分配任务的节点:$ docker node update --availability drain worker1 worker1检查节点以确认其可用性:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...排空的节点显示
Drain为Availability。运行
docker service ps redis以查看 swarm 管理器如何更新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群管理器通过在具有
Drain可用性的节点上结束任务并在具有Active可用性的节点上创建新任务来维持所需状态。运行
docker node update --availability active将排空的节点返回到活动状态:$ docker node update --availability active worker1 worker1检查节点以查看更新后的状态:
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...当你将节点设置回
Active可用性时,它可以接收新任务:- during a service update to scale up
- during a rolling update
- when you set another node to
Drainavailability - when a task fails on another active node
下一步
接下来,您将学习如何使用Swarm模式路由网格