乾貨-使用Docker swarm mode創建多節點容器集群

docker-強大的容器管理服務

1.初始化創建swarm

docker swarm init --advertise-addr <MANAGER-IP>

  • --listen-addr:指定swarm節點監聽的地址/網路介面及埠,默認埠為0.0.0.0:2377

  • --advertise-addr:指定為其它swarm節點提供API access和overlay networking的監聽地址和埠,若不指出,會使用--listen-addr指定的埠;若系統有多個IP地址,這個參數必須指定監聽到哪個網路地址

2.查看swarm信息

docker info

有相關swarm信息(示例如下)

Swarm: active

Advertisements

NodeID: os0l8xe87o0nz0sc04vrrpppl

Is Manager: true

ClusterID: o1c3g9ockktlagwpqirgb49no

Managers: 1

Nodes: 2

Orchestration:

Task History Retention Limit: 5

Raft:

Snapshot Interval: 10000

Number of Old Snapshots to Retain: 0

Heartbeat Tick: 1

Election Tick: 3

Dispatcher:

Heartbeat Period: 5 seconds

CA Configuration:

Advertisements

Expiry Duration: 3 months

Node Address: 192.168.1.146

Manager Addresses:

192.168.1.146:2377

3.增加swarm節點

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377

4.查看主節點供連接信息

docker swarm join-token worker

docker swarm join-token manager

重新生成token

swarm join-token --rotate

強烈建議manager節點為奇數個,方便在某節點故障時選舉出leader,以下為manager節點規劃和可FT數,以此類推,即swarm cluster允許(N-1)/2個節點故障。

docker swarm mode cluster節點建議

分散式manager節點配置:不同節點上配置的manager節點數,保證更好的容錯性

swarm manager nodes

運行manager-only節點(默認manager節點也是worker節點),即將節點狀態變為drain狀態

docker node update --availability drain <NODE-ID>

節點從故障中恢復

docker swarm init --force-new-cluster --listen-addr node01:2377

The --force-new-cluster flag puts the Docker Engine into swarm mode as a manager node of a single-node cluster. It discards cluster membership information that existed before the loss of the quorum but it retains data necessary to the Swarm cluster such as services, tasks and the list of worker nodes.This flag forces an existing node that was part of a quorum that was lost to restart as a single node Manager without losing its data

5.在主節點上查看所有節點信息

docker node ls

6.創建(發布)服務

docker service create --replicas 1 --name helloworld alpine ping docker.com

  • --replicas:服務實例數

  • --name:服務名稱

  • alpine:鏡像名稱

  • ping docker.com:執行的命令等參數

還有其它常用參數如:

--publish:設置映射到外面的埠

--env:設置環境變數

--workdir:設置運行目錄

--user:設置運行用戶

--mode:設置任務模式

--network:創建overlay網路

--update-delay:設置更新時間間隔

--update-parallelism:設置同時更新的任務數,默認是1

--update-failure-action:設置更新失敗后的行為,如continue

具體查詢--help或https://docs.docker.com/engine/reference/commandline/service_create/

配置掛載項:--mount

掛載項分為卷掛載(默認)和綁定掛載,卷是指容器任務完成並被移除后仍然存在的存儲,推薦使用已有的卷掛載

docker service create --mount src=<VOLUME-NAME>,dst=<CONTAINER-PATH> --name myservice <IMAGE>

docker service create --mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1> --name myservice <IMAGE>

綁定掛載是指來自那些調度部署容器任務的主機文件系統路徑,docker會掛載到容器內部的路徑,這個文件系統路徑必須在swarm初始化容器任務之前已存在,同時綁定掛載是有風險的,通常情況下不推薦使用,因為需要在每個機器上存在此掛載的文件系統路徑,調度程序隨時可能重新調度分配那些不健康或者無法連接的服務容器,並且此種掛載不能保證開發和生產一致。

docker service create --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> --name myservice <IMAGE>

docker service create --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH>,readonly --name myservice <IMAGE>

7.查看服務狀態

docker service ls

8.查看服務詳細信息

docker service inspect --pretty helloworld

  • --pretty:以人性華(非json)方式顯示,方便查看

9.查看有哪些節點運行此服務

docker service ps helloworld

也可在每個swarm節點上直接使用docker ps查看運行的容器

10.變更服務任務數(只能在manager節點執行,可同時變更多個服務的任務數)

docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>

例如:docker service scale helloworld=5表示實例數變更為5個

11.刪除服務(只能在manager節點執行)

docker service rm helloworld

可通過docker service inspect helloworld確認是否刪除

12.滾動更新

docker service update --image redis:3.0.7 redis

默認更新步驟如下:

關閉第一個任務(實例)

開始在此關閉節點執行計劃中的更新

更新完成後啟動此任務

如果被更新的節點狀態返回為RUNNING,等待指定的delay時間,然後停止下一個任務

如果,在更新的任意時間,任務返回FAILED,則暫停更新

更新完成後可以使用docker service inspect --pretty redis查看服務的images是否更新成功

若更新失敗,使用docker service inspect --pretty <SERVICE-ID>會顯示失敗,可重新使用docker service update <SERVICE-ID>再次重啟更新

使用docker service ps <SERVICE-ID>可查看滾動更新

13.停用節點

docker node update --availability drain <NODE-ID>

被信用的節點即不會再接受新的任務指派,也會停止節點上所有運行的任務,此節點上的服務狀態會顯示為Shutdown,且它的任務會被重新指派到新的可用節點上

14.啟用節點

docker node update --availability active <NODE-ID>

此時節點可以接受新的任務指派

15.查看本地節點信息

docker node inspect self --pretty

16.提升或者降職節點

docker node promote node-3 node-2

docker node demote node-3 node-2

17.節點退出swarm

docker swarm leave

主管理節點退出時需要加--force

待節點退出后,可在任意管理節點從節點列表中刪除掉此節點

docker node rm node-2

18.創建overlay網路

docker network create --driver overlay my-network

Advertisements

你可能會喜歡