卸載 Swarm 上的節點
在本教學課程的前幾個步驟中,所有節點都以 `作用中` 的可用性執行。Swarm 管理器可以將任務指派給任何 `作用中` 的節點,因此到目前為止,所有節點都可以接收任務。
有時,例如計劃維護時間,您需要將節點設定為 `卸載` 可用性。`卸載` 可用性可防止節點從 Swarm 管理器接收新任務。這也表示管理器會停止在節點上執行的任務,並在具有 `作用中` 可用性的節點上啟動複本任務。
**重要**
將節點設定為 `卸載` 不會從該節點移除獨立容器,例如使用 `docker run`、`docker compose up` 或 Docker Engine API 建立的容器。節點的狀態(包括 `卸載`)只會影響節點排程 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
在這種情況下,Swarm 管理器會將一個任務分配給每個節點。您可能會看到任務在您的環境中的節點之間以不同的方式分配。
執行 `docker node update --availability drain <節點 ID>` 以卸載已指派任務的節點
$ docker node update --availability drain worker1 worker1
檢查節點以檢查其可用性
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Drain ...snip...
卸載的節點在 `可用性` 中顯示 `卸載`。
執行 `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
Swarm 管理器會透過結束具有 `卸載` 可用性的節點上的任務,並在具有 `作用中` 可用性的節點上建立新任務來維護所需的狀態。
執行 `docker node update --availability active <節點 ID>` 以將卸載的節點返回作用中狀態
$ docker node update --availability active worker1 worker1
檢查節點以查看更新的狀態
$ docker node inspect --pretty worker1 ID: 38ciaotwjuritcdtn9npbnkuz Hostname: worker1 Status: State: Ready Availability: Active ...snip...
當您將節點設定回 `作用中` 可用性時,它可以接收新任務
- 在服務更新期間進行擴展
- 在滾動更新期間
- 當您將另一個節點設定為 `卸載` 可用性時
- 當另一個作用中節點上的任務失敗時
後續步驟
接下來,您將學習如何使用 Swarm 模式路由網格