管理 swarm 中的節點

作為 Swarm 管理生命週期的一部分,您可能需要

列出節點

要檢視 Swarm 中的節點列表,請在管理節點上執行 docker node ls

$ docker node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
46aqrk4e473hjbt745z53cr3t    node-5    Ready   Active        Reachable
61pi3d91s0w3b90ijw3deeb2q    node-4    Ready   Active        Reachable
a5b2m3oghd48m8eu391pefq5u    node-3    Ready   Active
e7p8btxeu3ioshyuj6lxiv6g0    node-2    Ready   Active
ehkv3bcimagdese79dn78otj5 *  node-1    Ready   Active        Leader

AVAILABILITY(可用性)列顯示排程程式是否可以將任務分配給該節點

  • Active(活動)表示排程程式可以將任務分配給該節點。
  • Pause(暫停)表示排程程式不會將新任務分配給該節點,但現有任務仍將繼續執行。
  • Drain(排空)表示排程程式不會將新任務分配給該節點。排程程式會關閉任何現有任務,並將其排程到可用節點上。

MANAGER STATUS(管理器狀態)列顯示節點在 Raft 共識中的參與情況

  • 無值表示不參與 Swarm 管理的 worker 節點。
  • Leader(領導者)表示該節點是主要的管理器節點,負責 Swarm 的所有 Swarm 管理和編排決策。
  • Reachable(可達)表示該節點是參與 Raft 共識仲裁的管理器節點。如果領導者節點變得不可用,該節點有資格被選舉為新的領導者。
  • Unavailable(不可用)表示該節點是一個無法與其他管理器通訊的管理器。如果管理器節點變得不可用,您應該將新的管理器節點加入 Swarm,或者將 worker 節點提升為管理器。

有關 Swarm 管理的更多資訊,請參閱 Swarm 管理指南

檢查單個節點

您可以在管理器節點上執行 docker node inspect <NODE-ID> 來檢視單個節點的詳細資訊。輸出預設為 JSON 格式,但您可以傳遞 --pretty 標誌以人類可讀的格式列印結果。例如:

$ docker node inspect self --pretty

ID:                     ehkv3bcimagdese79dn78otj5
Hostname:               node-1
Joined at:              2016-06-16 22:52:44.9910662 +0000 utc
Status:
 State:                 Ready
 Availability:          Active
Manager Status:
 Address:               172.17.0.2:2377
 Raft Status:           Reachable
 Leader:                Yes
Platform:
 Operating System:      linux
 Architecture:          x86_64
Resources:
 CPUs:                  2
 Memory:                1.954 GiB
Plugins:
  Network:              overlay, host, bridge, overlay, null
  Volume:               local
Engine Version:         1.12.0-dev

更新節點

您可以修改節點屬性以

更改節點可用性

更改節點可用性使您能夠

  • 排空管理器節點,使其僅執行 Swarm 管理任務,並且不可用於任務分配。
  • 排空節點,以便您可以將其關閉進行維護。
  • 暫停節點,使其無法接收新任務。
  • 恢復不可用或已暫停節點的可用性狀態。

例如,要將管理器節點的可用性更改為 Drain(排空)

$ docker node update --availability drain node-1

node-1

有關不同可用性選項的描述,請參閱列出節點

新增或移除標籤元資料

節點標籤提供了一種靈活的節點組織方法。您還可以在服務約束中使用節點標籤。在建立服務時應用約束以限制排程程式為服務分配任務的節點。

在管理器節點上執行 docker node update --label-add,為節點新增標籤元資料。--label-add 標誌支援 <key><key>=<value> 對。

對於要新增的每個節點標籤,傳遞一次 --label-add 標誌

$ docker node update --label-add foo --label-add bar=baz node-1

node-1

您使用 docker node update 為節點設定的標籤僅適用於 Swarm 中的節點實體。不要將它們與 dockerd 的 Docker 守護程式標籤混淆。

因此,節點標籤可用於將關鍵任務限制在滿足特定要求的節點上。例如,僅在應執行特殊工作負載(例如滿足 PCI-SS 合規性的機器)的機器上進行排程。

受損的 worker 無法損害這些特殊工作負載,因為它無法更改節點標籤。

然而,引擎標籤仍然有用,因為一些不影響容器安全編排的功能最好以分散的方式設定。例如,引擎可以有一個標籤來指示它具有某種型別的磁碟裝置,這可能與安全沒有直接關係。這些標籤更容易被 Swarm 編排器“信任”。

有關服務約束的更多資訊,請參閱 docker service create CLI 參考

提升或降級節點

您可以將 worker 節點提升為管理器角色。當管理器節點不可用或您想讓管理器離線進行維護時,這很有用。同樣,您可以將管理器節點降級為 worker 角色。

注意

無論您提升或降級節點的原因是什麼,您都必須始終在 Swarm 中保持管理器節點的仲裁。有關更多資訊,請參閱 Swarm 管理指南

要提升一個或一組節點,請在管理器節點上執行 docker node promote

$ docker node promote node-3 node-2

Node node-3 promoted to a manager in the swarm.
Node node-2 promoted to a manager in the swarm.

要降級一個或一組節點,請在管理器節點上執行 docker node demote

$ docker node demote node-3 node-2

Manager node-3 demoted in the swarm.
Manager node-2 demoted in the swarm.

docker node promotedocker node demote 分別是 docker node update --role managerdocker node update --role worker 的便捷命令。

在 Swarm 節點上安裝外掛

如果您的 Swarm 服務依賴於一個或多個外掛,則這些外掛需要可在服務可能部署的每個節點上使用。您可以手動在每個節點上安裝外掛或編寫安裝指令碼。您還可以透過指定 PluginSpec 而不是 ContainerSpec,以類似於全域性服務的方式使用 Docker API 部署外掛。

注意

目前無法使用 Docker CLI 或 Docker Compose 將外掛部署到 Swarm。此外,無法從私有倉庫安裝外掛。

PluginSpec 由外掛開發者定義。要將外掛新增到所有 Docker 節點,請使用 service/create API,傳遞在 TaskTemplate 中定義的 PluginSpec JSON。

離開 Swarm

在節點上執行 docker swarm leave 命令,將其從 Swarm 中移除。

例如,在 worker 節點上離開 Swarm

$ docker swarm leave

Node left the swarm.

當節點離開 Swarm 時,Docker Engine 將停止在 Swarm 模式下執行。編排器不再向該節點排程任務。

如果該節點是管理器節點,您會收到關於維護仲裁的警告。要覆蓋該警告,請傳遞 --force 標誌。如果最後一個管理器節點離開 Swarm,Swarm 將變得不可用,需要您採取災難恢復措施。

有關維護仲裁和災難恢復的資訊,請參閱 Swarm 管理指南

節點離開 Swarm 後,您可以在管理器節點上執行 docker node rm 將該節點從節點列表中移除。

例如

$ docker node rm node-2

瞭解更多