管理叢集中的節點
作為 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 promote 和 docker node demote 分別是 docker node update --role manager 和 docker 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