Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主機抽象為一個整體,並且通過一個入口統一管理這些 Docker 主機上的各種 Docker 資源。
docker swarm集群工作原理:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/
環境准備 |
環境准備
准備4台centos服務器,生產環境建議用阿里雲服務器,學習環境可以在本機用vmware創建4個centos虛擬機。
每台centos服務器上都要安裝docker。
centos版本:8.5
docker版本:20.10.11
以四台機器為例,2 個 manager 2個 worker。
但生產環境建議是 3個manager 以上,如果只有2台 manager,當主manager掛掉之后,另一台從manager是不會升級為主manager的 ,因為從manager升級為主manager的條件是存活的從manager節點個數必須大於1。
虛擬機 | 狀態 | 備注 |
192.168.1.200 | manager | 用這台初始化創建集群成為manager |
192.168.1.201 | manager | 加入成manager |
192.168.1.202 | worker | |
192.168.1.203 | worker |
首先,兩台管理節點 192.168.1.200與192.168.1.201需要開放防火牆端口2377,允許與工作節點服務器通訊,如果是阿里雲服務器,還要開通阿里雲安全組的2377端口。
firewall-cmd --zone=public --add-port=2377/tcp --permanent firewall-cmd --reload
docker swarm命令 |
docker swarm命令
創建集群: docker swarm init --advertise-addr 虛擬機IP 查看增加 manager的授權命令: docker swarm join-token manager 查看增加 worker 的授權命令: docker swarm join-token worker 管理器節點脫離 docker swarm集群: docker swarm leave --force 工作節點脫離Docker Swarm集群 docker swarm leave
搭建docker集群 |
搭建swarm集群,swarm集群包含兩個管理節點,兩個工作節點。
【第1步】初始化swarm集群,創建主管理節點
管理節點與工作節點可以使用內網地址與外網地址,將192.168.1.200這台服務器初始化為管理節點,切換到200這台服務器。使用內網地址初始化節點:
docker swarm init --advertise-addr 192.168.1.200 或者 docker swarm init --advertise-addr 192.168.1.200 --listen-addr 192.168.1.200:2377
輸出文字的意思是此地址已經加入到了這個swarm,你可以使用 docker swarm join --token xxxxx 命令將其它節點加入到這個swarm中來成為工作節點,
如果想添加管理節點,使用 docker swarm join-token manager 命令來進行管理。
查看節點信息,這個命令只能在管理節點上使用。
docker node ls
manager為Leader表示管理節點,為空的表示工作節點。
注意:定要開放所有管理節點服務器的端口,然后重啟防火牆,如果是阿里雲服務器,還要開通阿里雲安全組,不然加入worker 會報如下錯誤:
Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host"
將兩台管理節點192.168.1.200與192.168.1.201的防火牆開放 2377 端口,允許工作節點與它通訊,開放端口后其它工作節點才可以加入進來 。
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload
【第2步】加入備用管理節點
理論上最好將三台機加入到管理節點。
但現在服務器不夠,總共只有四台,所以只額外將 192.168.1.201 這台機加入到備用管理節點。
由於這台機也是管理節點,所以要開放防火牆2377端口。
firewall-cmd --zone=public --add-port=2377/tcp --permanent firewall-cmd --reload
然后在初始化集群的管理節點 192.168.1.200 上查看加入到manager節點的命令:
docker swarm join-token manager
然后在192.168.1.201這台機上執行:
docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-6j8gnwhx52vjdvq7w0hq8uklv 192.168.1.200:2377
加入到swarm管理節點成功。
查看節點信息:
docker node ls
manager為Leader表示創建集群時創建的管理節點,Reachable(可達)表示加入進來的管理節點,為空的表示工作節點。
如果加入管理節點的時候如果報下面的錯誤,是防火牆或阿里雲安全組沒有開放2377端口,需要開放防火牆端口。
Error response from daemon: manager stopped: can’t initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host”
【第3步】添加兩台工作節點
將192.168.1.202與192.168.1.203兩台機加入到剛剛創建的docker swarm集群。
在任意一台管理節點上使用如下命令查看加入worker節點的命令。
docker swarm join-token worker
分別切換到將192.168.1.202與192.168.1.203,分別執行命令:
docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-a6zep6y0n18614nj9w1swrnlp 192.168.1.201:2377
加入工作節點成功。
查看節點信息:
docker swarm join-token worker
manager為Leader表示創建集群時創建的管理節點,Reachable(可達)表示加入進來的管理節點,為空的表示工作節點。
脫離swarm集群 |
工作節點脫離swarm集群。
切換到工作節點服務器,執行命令
dokcer swarm leave
管理節點脫離swarm集群。
管理節點脫離集群的前提是所有工作節點全部已脫離了集群后,使用 docker swarm leave 命令將管理節點本身脫離集群。
如果還有一台工作節點未脫離集群,還想讓管理節點脫離集群,加 --force參數。
dokcer swarm leave --force