清空叢集中的節點
在本教學課程的前幾個步驟中,所有節點均以 Active(啟用)的可用性狀態執行。Swarm 管理員可以將任務指派給任何 Active 的節點,因此到目前為止,所有節點都能接收任務。
有時,例如在進行排程維護時,您需要將節點設定為 Drain(抽離)可用性狀態。Drain 可用性會阻止節點從 Swarm 管理員接收新任務。這也意味著管理員會停止該節點上正在執行的任務,並將副本任務啟動到具有 Active 可用性的節點上。
重要將節點設定為
Drain並不會移除該節點上的獨立容器(例如使用docker run、docker compose up或 Docker Engine API 所建立的容器)。節點的狀態(包括Drain)僅會影響該節點排程 Swarm 服務工作負載的能力。
如果尚未操作,請打開終端機並透過 ssh 連線到執行管理節點(manager node)的機器。例如,本教學使用的是名為
manager1的機器。確認您所有的節點皆處於啟用狀態。
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 1bcef6utixb0l0ca7gxuivsj0 worker2 Ready Active 38ciaotwjuritcdtn9npbnkuz worker1 Ready Active e216jshn25ckzbvmwlnh5jr3g * manager1 Ready Active Leader如果您尚未從滾動更新 (rolling update)教學中執行
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在此情況下,Swarm 管理員將一個任務分配給了每個節點。您在自己的環境中看到的任務分配方式可能會有所不同。
執行
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...被抽離的節點其
Availability會顯示為Drain。執行
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 minutesSwarm 管理員透過結束具有
Drain可用性節點上的任務,並在具有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可用性時,它便可以接收新任務:- 在進行服務更新以擴大規模時
- 在進行滾動更新時
- 當您將另一個節點設定為
Drain可用性時 - 當另一個啟用節點上的任務失敗時
下一步
接下來,您將學習如何使用 Swarm 模式路由網格 (routing mesh)
使用 Swarm 模式路由網格