Docker Swarm部署及節點管理


Swarm Cluster

Swarm cluster集群是一組運行Docker並加入到集群中的機器。之后可繼續執行docker命令,不過現在它們是由集群管理器在集群上執行。集群中的機器可以是物理的,也可以是虛擬的,加入集群后被稱為節點。

可以使用不同的策略來控制容器運行的節點。確保每台機器只獲得指定容器的一個實例。

節點類型

  • managers
  • workers

managers節點

  • 是集群中唯一能夠執行命令的機器
  • 維護集群狀態
  • 調度services
  • swarm 模式HTTP API端點

swarm 管理器使用 Raft 來實現維護整個 swarm 集群一致的內部狀態
如果是測試的目的可以只運行一個 swarm 管理節點。如果單管理器的 swarm 出問題下線了,服務仍然會運行,不過你需要創建一個新的集群來恢復它。
要利用 swarm 模式的容錯功能,建議創建奇數的管理節點。當有多個管理節點時,如果一個leader節點宕機,其余的manager節點將選擇一個新的leader,並恢復集群狀態的編排和維護。默認情況下,管理器節點也運行任務。

  • 三個管理節點的 swarm 最大允許一個管理節點宕機
  • 五個管理節點的 swarm 最大允許兩個管理節點宕機
  • N 個管理節點的 swarm 最大允許(N-1)/2 個管理節點宕機
    Docker 推薦最多創建 7 個管理節點

worker節點

Worker 節點是 Docker Engine 的實例,其唯一目的是運行容器。 Worker 節點不參與Raft 分布狀態,不作調度的決策或提供 swam 模式的 HTTP API 服務。
為了防止調度程序將任務放置在多節點集群中的管理器節點上,可以將manager節點的狀態設為Drain ,調度程序優雅地停止節點上的任務,並在活動節點上調度任務。調度程序不會將新任務分配給狀態為Drain的節點。

改變節點角色

當管理節點下線時可能會想把 worker 節點提升為管理節點,可以通過docker node promote 來把一個 worker 節點提升為管理節點 詳細信息

也可以把管理節點降級為worker節點 詳細信息


創建一個集群

啟動一個swarm manager節點

  1. 添加docker damon的網絡監聽

    [root@localhost ~]# vim /usr/lib/systemd/system/docker.service
    
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
    
  2. 初始化swarm manager節點

    [root@localhost ~]# docker swarm init --advertise-addr 192.168.126.128
    Swarm initialized: current node (ne4zc6ntfqi608w0svyd8u68h) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-0freguc5obmm505ujge4q3eem8hjnezq2f9c8czicezga4jn1j-awza9pu4on6v5ltos9cq7c9xc 192.168.126.128:2377
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
    
    [root@localhost ~]# 
    
    --advertise-addr 允許集群中的其他節點訪問Swarmkit API和覆蓋網絡。swarm中的其他節點必須能夠訪問此地址。
    
    以worker節點加入集群的命令可以通過 docker swarm join-token worker 獲得
    以manager節點加入集群的命令可通過docker swarm join-token manager 獲得
    
    
    • 將當前節點切換到群集模式。
    • 創建一個名為default的集群。
    • 指定當前節點為群集的leader manager節點。
    • 用機器主機名命名節點。
    • 將管理器配置為監聽端口2377上的活動網絡接口。
    • 將當前節點設置為Active,這意味着它可以從調度程序接收任務。
    • 為參與集群的引擎啟動內部分布式數據存儲,以維護集群及其上運行的所有服務的一致視圖。
    • 默認情況下,為群集生成一個自簽名根CA。
    • 默認情況下,為worker和manager節點生成令牌以加入集群。
    • 創建一個名為ingress的覆蓋網絡,用於發布集群外部的服務端口。
    • 為您的網絡創建一個覆蓋的默認IP地址和子網掩碼

2376 docker守護進程端口
2377 集群管理端口

添加一個工作節點

  1. 添加docker damon的網絡監聽 略

  2. 加入集群

    [root@localhost ~]# docker swarm join --token SWMTKN-1-0freguc5obmm505ujge4q3eem8hjnezq2f9c8czicezga4jn1j-awza9pu4on6v5ltos9cq7c9xc 192.168.126.128:2377
    This node joined a swarm as a worker.
    [root@localhost ~]# 
    

    docker swarm join命令執行以下操作

    • 將當前節點上的Docker引擎切換到群集模式。
    • 從管理器請求TLS證書
    • 用機器主機名命名節點
    • 基於swarm令牌在manager監聽地址上將當前節點連接到swarm。
    • 將當前節點設置為活動可用性,這意味着它可以從調度程序接收任務。
    • 將入口覆蓋網絡擴展到當前節點。

查看集群

  1. 在swarm manager節點執行

    [root@localhost ~]# docker node ls
    ID                            HOSTNAME                STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    l2o08alsqh7az4d4tov1pwjcw     localhost.localdomain   Ready               Active                                  18.09.6
    ne4zc6ntfqi608w0svyd8u68h *   localhost.localdomain   Ready               Active              Leader              18.09.6
    

    AVAILABILITY 表示調度程序是否可以將任務分配給節點

    • Active 可以將任務分配給節點
    • Pause 調度程序不向節點分配新任務,但現有的任務仍然運行
    • Drain 調度程序不向節點分配新任務,已經存在的任務也將被調用到Active節點上

    MANAGER STATUS
    沒有值表示不參與群集管理的工作節點

    • Leader 為集群做出所有的集群管理和編排決策
    • Reachable 表示節點參與Raft仲裁的manager節點。如果leader節點不可用,則該節點有資格成為新的leader
    • Unavailable 表示節點是一個無法與其他manager通信的節點。如果manager節點變為此狀態應該加入一個新的manager節點到集群中,或者將一個工作節點提升為一個manager

查看節點詳細信息

  1. docker node inspect

    docker node inspect self --pretty (查看當前節點的詳細信息)
    
    [root@node1 ~]# docker node inspect i8so3iawiupkswhqsguiw7l91 --pretty
    ID:			i8so3iawiupkswhqsguiw7l91
    Hostname:              	node2
    Joined at:             	2019-06-11 04:46:29.827796972 +0000 utc
    Status:
     State:			Ready
     Availability:         	Active
     Address:		192.168.49.136
    Manager Status:
     Address:		192.168.49.136:2377
     Raft Status:		Reachable
     Leader:		No
    Platform:
     Operating System:	linux
     Architecture:		x86_64
    Resources:
     CPUs:			1
     Memory:		1.777GiB
    Plugins:
     Log:		awslogs, fluentd, gcplogs, gelf, journald, json-file, local, logentries, splunk, syslog
     Network:		bridge, host, macvlan, null, overlay
     Volume:		local
    Engine Version:		18.09.6
    TLS Info:
     TrustRoot:
    -----BEGIN CERTIFICATE-----
    MIIBaTCCARCgAwIBAgIUdZKOgCJWeabnUvO3g/aPe9dO040wCgYIKoZIzj0EAwIw
    EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTkwNjExMDMwNTAwWhcNMzkwNjA2MDMw
    NTAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH
    A0IABCIrZHQWBQCOmVZ1wk3iz5dUSSinyK5+O/2kI/SP0dFhyYkV3fwQTIjRp3xg
    5gHkosPXJzsWD28ozkV4Gmlx9gWjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
    Af8EBTADAQH/MB0GA1UdDgQWBBRBQ7wdTOzgK8zl15i4+GKYM2GJSDAKBggqhkjO
    PQQDAgNHADBEAiAtkLmwd2f7gADeyX82Yc/0KjJOmQnVQkOsZuP+rdVQjwIgLd52
    yom4uvNZpJ7O3u7uNi/dO7fB5v8tGjZ+Vm3Ouo8=
    -----END CERTIFICATE-----
    
     Issuer Subject:	MBMxETAPBgNVBAMTCHN3YXJtLWNh
     Issuer Public Key:	MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIitkdBYFAI6ZVnXCTeLPl1RJKKfIrn47/aQj9I/R0WHJiRXd/BBMiNGnfGDmAeSiw9cnOxYPbyjORXgaaXH2BQ==
    
    

更新節點屬性

  • 改變節點可用性
  • 添加或刪除標簽元數據
  • 更改節點角色
改變節點可用性
  • 清空管理節點,以便只執行swarm管理任務,並且無法進行任務分配。
  • 清空一個節點,以進行維護。
  • 暫停節點,使其無法接收新任務。
  • 恢復不可用節點或暫停節點的可用狀態。
舉例:

[root@node1 ~]# docker node update --availability drain node1
node1
Add or remove label metadata

節點標簽提供了一種靈活的節點組織方法。可以再服務中使用節點標簽,以限制task分配的節點。
在manager節點上運行docker node update --label-add 向節點添加標簽元數據。--label-add支持 或者 =

[root@node1 ~]# docker node update --label-add aaa --label-add bbb=222 --label-add ccc node1
node1

--label-add 可以多次使用

Promote or demote a node

可以將節點角色有worker節點升為manager節點,或者將manager節點降級為worker節點。

【注意】無論提升或降級節點的原因是什么,都必須始終維護集群中管理器節點的仲裁。

  1. 若要提升一個或一組節點,從manager節點運行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.
    
  2. 要降級一個或一組節點,從manager節點運行docker node demote:

    $ docker node demote node-3 node-2
    
    Manager node-3 demoted in the swarm.
    Manager node-2 demoted in the swarm.
    

脫離集群

  1. 在node節點執行

    [root@localhost ~]# docker swarm leave
    Node left the swarm.
    
  2. 節點離開群集后,可以在manager點上運行docker節點rm命令,將節點從節點列表中刪除。

    $ docker node rm node-2
    

集群配置完畢!

參考
https://docs.docker.com/engine/swarm/
https://blog.51cto.com/13555423/2310922


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM