清空 swarm 上的節點
在本教程的前面步驟中,所有節點都以 Active
(活躍)可用性狀態執行。叢集管理器可以將任務分配給任何 Active
節點,因此到目前為止,所有節點都可用於接收任務。
有時,例如在計劃維護期間,您需要將節點的可用性設定為 Drain
(排空)。Drain
可用性會阻止節點從叢集管理器接收新任務。這也意味著管理器會停止在該節點上執行的任務,並在具有 Active
可用性的節點上啟動副本任務。
重要將節點設定為
Drain
不會從該節點移除獨立容器,例如使用docker run
、docker compose up
或 Docker 引擎 API 建立的容器。節點的任何狀態,包括Drain
,僅影響該節點排程叢集服務工作負載的能力。
如果你還沒有這樣做,請開啟一個終端並透過 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
檢視叢集管理器如何將任務分配給不同的節點。$ 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 <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
檢視叢集管理器如何更新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 <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 模式的路由網格。
使用 Swarm 模式路由網格