管理叢集中的節點

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

列出節點

若要查看 swarm 中的節點列表,請從管理節點(manager node)執行 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 共識中的參與狀態。

  • 沒有數值表示該工作節點(worker node)不參與 swarm 管理。
  • Leader 表示該節點是主要管理節點,負責對 swarm 做出所有管理與編排決策。
  • Reachable 表示該節點是參與 Raft 共識仲裁的管理節點。如果主節點不可用,該節點有資格參與新主節點的選舉。
  • Unavailable 表示該節點是無法與其他管理節點通訊的管理節點。如果管理節點變得不可用,您應該將新管理節點加入 swarm,或將工作節點提升為管理節點。

有關 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

更新節點

您可以修改節點屬性以:

更改節點可用性

更改節點可用性可以讓您:

  • 封鎖(Drain)管理節點,使其僅執行 swarm 管理任務,而不參與任務分配。
  • 封鎖節點以便進行維護。
  • 暫停(Pause)節點,使其無法接收新任務。
  • 恢復不可用或暫停節點的可用性狀態。

例如,將管理節點更改為 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 daemon 標籤混淆。

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

受入侵的工作節點無法破壞這些特殊的作業負載,因為它無法更改節點標籤。

不過,引擎標籤(Engine labels)仍然很有用,因為某些不影響容器安全編排的功能,可能以分散式方式設定會更好。例如,引擎可能擁有一個標籤,用於指示它具備特定類型的磁碟裝置,這可能與安全性無直接關係。這些標籤更容易被 swarm 編排器「信任」。

請參閱 docker service create CLI 參考以取得有關服務限制條件的更多資訊。

提升或降級節點

您可以將工作節點提升(promote)為管理節點角色。這在管理節點變得不可用,或您希望將管理節點離線進行維護時非常有用。同樣地,您也可以將管理節點降級(demote)為工作節點角色。

注意

無論您提升或降級節點的原因為何,您必須始終維持 swarm 中管理節點的仲裁(quorum)。有關更多資訊,請參閱 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 模式執行。編排器不再會向該節點排程任務。

如果該節點是管理節點,您會收到關於維持仲裁的警告。若要覆寫此警告,請加上 --force 旗標。如果最後一個管理節點離開了 swarm,swarm 將變得不可用,這時您需要採取災難復原措施。

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

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

例如:

$ docker node rm node-2

了解更多

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.