爲了查看集羣中的節點列表,能夠在管理節點中運行docker node ls:node
$ 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顯示調度程序是否能夠向節點分配任務:linux
MANAGER STATUS列顯示了Raft共識中節點的參與狀況:
沒有值表示不參與集羣管理的工做節點。
Leader意味着節點是爲集羣作出全部集羣管理和編配決策的主要管理節點。
Reachable意味着該節點是參與raft共識仲裁的管理節點。若是leader節點不可用,則該節點有資格選舉爲新的leader。
Unavailable意味着節點是沒法與其餘管理器通訊的管理器。若是一個管理器節點變成Unavailable,你應該將一個新的管理器節點加入到集羣中,或者將一個工做節點提高爲一個管理器。
有關集羣管理的更多信息,請參閱 Swarm administration guide。ios
你能夠在管理器節點上運行docker node inspect <NODE-ID>,以查看單個節點的詳細信息。輸出默認爲JSON格式,可是你能夠傳遞--pretty標誌以人類可讀的格式打印結果。例如:docker
$ 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管理器節點,使其僅執行羣集管理任務,且不可用於任務分配。
耗盡drain一個節點,以便你能夠對其進行維護。
暫停pause一個節點,使它不能接收新任務。
恢復不可用unavailable或暫停paused的節點可用狀態。
例如,要更改管理器節點以耗盡Drain可用性:json
$ docker node update --availability drain node-1 node-1
See list nodes for descriptions of the different availability options.api
節點標籤提供了一種靈活的節點組織方法。你還能夠在服務約束中使用節點標籤。在建立服務時應用約束,以限制調度程序爲該服務分配任務的節點。
在管理節點上運行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節點更新爲節點設置的標籤僅適用於集羣中的節點實體。不要將它們與dockerd的docker守護進程標籤混淆。
所以,可使用節點標籤將關鍵任務限制在知足某些需求的節點上。例如,只在應該運行特殊工做負載的機器上調度,例如知足PCI-SS聽從性的機器。
折衷的工做程序沒法折衷這些特殊的工做負載,由於它沒法更改節點標籤。
然而,引擎標籤仍然頗有用,由於一些不影響容器安全編排的特性最好以分散的方式設置。例如,引擎能夠有一個標籤來指示它具備某種類型的磁盤設備,這可能與安全性沒有直接關係。這些標籤更容易被羣編配器「信任」。
有關服務約束的更多信息,請參閱docker service create
CLI reference。ide
你能夠將工做節點提高爲manager角色。當管理節點不可用時,或者須要脫機進行維護時,這很是有用。相似地,你能夠將manager節點降級爲worker角色。ui
注意:不管你提高或降級節點的緣由是什麼,你都必須始終維護集羣中管理器節點的仲裁。有關更多信息,請參閱Swarm administration guide。spa
若要提高一個或一組節點,請從管理節點運行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命令的簡易版
僅支持Edge :此選項僅在Docker CE Edge 版本中可用。參見 Docker CE Edge。
若是你的swarm服務依賴於一個或多個插件,那麼這些插件須要在服務可能部署的每一個節點上可用。你能夠手動在每一個節點上安裝插件,或者編寫安裝腳本。在Docker 17.07及更高版本中,你還能夠經過指定PluginSpec而不是ContainerSpec來使用Docker API以相似全局服務的方式部署插件。
注意:目前尚未辦法使用Docker CLI或Docker Compose將插件部署到集羣中。此外,不可能從私有存儲庫安裝插件。
PluginSpec
是由插件開發人員定義的。要將插件添加到全部Docker節點,請使用service/create API,傳遞在TaskTemplate中定義的PluginSpec JSON。
在一個節點中運行docker swarm leave來將其從集羣中移除
好比下面在工做節點中離開集羣:
$ docker swarm leave
Node left the swarm.
當節點離開集羣時,Docker引擎在集羣模式下中止運行。協調器再也不向節點調度任務。
若是節點是管理器節點,則會收到關於維護仲裁的警告。若要覆蓋警告,請傳遞--force標誌。若是最後一個管理器節點離開集羣,那麼集羣將不可用,須要你採起災難恢復措施。
有關維護仲裁和災難恢復的信息,請參閱Swarm administration guide。
在節點離開集羣以後,你能夠在管理器節點上運行docker node rm命令來從節點列表中刪除該節點,如:
$ docker node rm node-2