在 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

「可用性」欄位顯示排程器是否可以將工作指派給節點。

  • 「作用中」表示排程器可以將工作指派給節點。
  • 「暫停」表示排程器不會將新工作指派給節點,但現有工作會繼續執行。
  • 「排出」表示排程器不會將新工作指派給節點。排程器會關閉任何現有工作,並將其排程在可用的節點上。

「管理者狀態」欄位顯示節點參與 Raft 共識的狀態。

  • 沒有值表示不參與 Swarm 管理的工作節點。
  • 「領導者」表示該節點是主要管理節點,負責 Swarm 的所有 Swarm 管理和協調決策。
  • 「可連線」表示該節點是參與 Raft 共識仲裁的管理節點。如果領導節點無法使用,則該節點有資格被選為新的領導者。
  • 「無法使用」表示該節點是無法與其他管理者通訊的管理者。如果管理節點無法使用,您應該將新的管理節點加入 Swarm 或將工作節點晉升為管理者。

如需 Swarm 管理的詳細資訊,請參閱《Swarm 管理指南》。

檢查個別節點

您可以在管理節點上執行 docker node inspect <節點 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 管理工作,且無法用於工作指派。
  • 排出節點,以便您可以將其關閉進行維護。
  • 暫停節點,使其無法接收新工作。
  • 還原無法使用或已暫停節點的可用性狀態。

例如,若要將管理節點的可用性變更為「排出」

$ docker node update --availability drain node-1

node-1

請參閱列出節點以瞭解不同可用性選項的說明。

新增或移除標籤中繼資料

節點標籤提供彈性的節點組織方法。您也可以在服務限制中使用節點標籤。在建立服務時套用限制,以限制排程器為服務指派工作的節點。

在管理節點上執行 docker node update --label-add 以將標籤中繼資料新增至節點。 --label-add 旗標支援 <鍵><鍵>=<值> 對。

針對您要新增的每個節點標籤傳遞一次 --label-add 旗標

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

node-1

您使用 docker node update 為節點設定的標籤僅適用於 swarm 中的節點實體。請勿將它們與 dockerd 的 Docker Daemon 標籤混淆。

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

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

然而,引擎標籤仍然有用,因為某些不影響容器安全協調的功能可能更適合以去中心化的方式設定。例如,引擎可以有一個標籤來指示它具有某種類型的磁碟裝置,這可能與安全性沒有直接關係。這些標籤更容易被 swarm Orchestrator「信任」。

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

晉升或降級節點

您可以將工作節點提升為管理節點角色。當管理節點無法使用或您想要將管理節點離線進行維護時,這非常有用。同樣地,您可以將管理節點降級為工作節點角色。

注意事項

無論您提升或降級節點的原因為何,您都必須始終在 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 服務依賴一個或多個 插件,則這些插件需要在服務可能部署到的每個節點上都可用。您可以手動在每個節點上安裝插件,也可以使用腳本進行安裝。您也可以使用 Docker API,通過指定 PluginSpec 而不是 ContainerSpec,以類似於全局服務的方式部署插件。

注意事項

目前無法使用 Docker CLI 或 Docker Compose 將插件部署到 swarm。此外,也無法從私有儲存庫安裝插件。

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

離開 Swarm

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

例如,要讓工作節點離開 swarm

$ docker swarm leave

Node left the swarm.

當節點離開 swarm 時,Docker Engine 將停止在 Swarm 模式下運行。Orchestrator 不再將任務排程到該節點。

如果該節點是管理節點,您將收到有關維持法定人數的警告。要覆蓋警告,請傳遞 --force 旗標。如果最後一個管理節點離開 swarm,swarm 將變得不可用,需要您採取災難復原措施。

有關維持法定人數和災難復原的資訊,請參閱 Swarm 管理指南

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

例如

$ docker node rm node-2

深入瞭解