管理 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 promote
和 docker node demote
分別是 docker node update --role manager
和 docker 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