本章將和大家分享 Docker Swarm 叢集的搭建過程。廢話不多說,下面我們直接進入主題。
一、Docker Swarm 簡介
1、簡介
Docker Swarm 是 Docker 的叢集管理工具。它將 Docker 主機池轉變為單個虛擬 Docker 主機。 Docker Swarm 提供了標準的 Docker API,所有任何已經與 Docker 守護程式通訊的工具都可以使用 Swarm 輕鬆地擴充套件到多個主機。
支援的工具包括但不限於以下各項:
- Dokku
- Docker Compose
- Docker Machine
- Jenkins
2、原理
如下圖所示,swarm 叢集由管理節點(manager)和工作節點(work node)構成。
- swarm mananger:負責整個叢集的管理工作包括叢集配置、服務管理等所有跟叢集有關的工作。
- work node:即圖中的 available node,主要負責執行相應的服務來執行任務(task)。
3、什麼是Docker Swarm?
Swarm是Docker的一個編排工具,在之前我們只是在一臺機器來進行docker的管理:
但是有時容器並不一定都在一臺主機上,如果是分散式的處於多臺主機上,這時就可以藉助於Swarm,Swarm是Docker自帶的編排工具,只要你安裝了Docker就會存在Docker Swarm工具。
Swarm中的模式是有兩大類節點,一類是manager節點,另一類是worker節點,manager節點負責服務的建立和排程,worker節點主要是執行容器服務,當然manager節點也是可以執行容器服務的。
manager節點狀態、資訊的同步根據Raft consensus group的網路進行通訊同步的,而worker之間的通訊依靠的是Gossip network做到的。
另外一個重要的概念就是service,我們可以在一個manager節點上建立一個服務,但是可以根據這一個服務建立多個容器的任務,這些容器任務執行在不同的節點上。
4、如何進行Swarm叢集的搭建?
- 在swarm模式下初始化一個Swarm叢集,並且將當前主機加入到該叢集作為manager節點
- 加入其它節點到該叢集中
- 部署service到該叢集中
二、Docker Swarm 叢集搭建
1、建立多節點叢集
1)準備多臺Linux伺服器
此處我準備了3臺機器:
其中 192.168.4.250 作為 manager 節點,其它兩臺作為 worker 節點。
2)檢視Swarm命令
docker swarm --help
可以看到其中有一個 init 命令,這就是初始化一個Swarm,我們再看看這個 init 的引數:
docker swarm init --help
可以看到它有很多的引數,其中第一個就是將本機的地址新增進去,讓自己成為一個manager節點,這樣其它的節點都可以知道這個節點的存在。
3)建立一個manager節點
在此之前我們應該先知道自己本機的ip,以便於“--advertise-addr string”這個引數使用,檢視本機ip:
ip addr
然後就可以初始化 manager 節點:
docker swarm init --advertise-addr=192.168.4.250
[root@localhost ~]# docker swarm init --advertise-addr=192.168.4.250 Swarm initialized: current node (c06ilqppns9dg7c1wsk63egyf) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. [root@localhost ~]#
可以看到已經建立了一個 swarm manager 節點,“--advertise-addr string”引數的值 192.168.4.250 是自己的ip地址,相當於將自己加入到 swarm 中。在執行的結果中也說明了其它 worker 加入的方式。
以上輸出,證明已經初始化成功。需要把以下這行復製出來,在增加工作節點時會用到:
docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377
要向此叢集新增一個工作節點,直接執行以上這個命令即可。
4)開放manager節點的2377埠
# 檢視防火牆狀態 systemctl status firewalld # 如果開啟了防火牆則永久放行2377埠 firewall-cmd --add-port=2377/tcp --permanent # 重新載入防火牆 firewall-cmd --reload # 檢視永久開放的埠 firewall-cmd --permanent --list-ports
5)建立worker節點
在建立 manager 節點時我們知道,要向此叢集新增一個工作節點,直接執行以下這個命令(建立manager節點的時候複製出來的)即可:
docker swarm join --token SWMTKN-1-1o3cg3ppm9ylolsb336cfyxp53a2nurn74s0nnt1r8loaf1w6z-5evpjdk9djt3qfude6smjvr5a 192.168.4.250:2377
此處,我另外再開啟了兩臺 Linux 伺服器,將它們加入到 swarm 中成為 worker 節點:
可以看到已經成功了。
6)檢視節點狀態
需要注意的是檢視節點狀態只能在 manager 節點那臺機器上檢視,普通節點無法執行檢視命令:
docker node ls
可以看到有三臺機器了。
這時候使用 docker info 命令檢視,就可以看到 Swarm 處於啟用狀態:
docker info
2、部署服務到叢集中
注意:跟叢集管理有關的任何操作,都是在管理節點上操作的。
上面我們已經將節點建立好了,現在可以在這些節點上建立服務了,那麼就需要看看 docker service 的幫助資訊:
docker service --help
[root@localhost ~]# docker service --help Usage: docker service COMMAND Manage Swarm services Commands: create Create a new service inspect Display detailed information on one or more services logs Fetch the logs of a service or task ls List services ps List the tasks of one or more services rm Remove one or more services rollback Revert changes to a service's configuration scale Scale one or multiple replicated services update Update a service Run 'docker service COMMAND --help' for more information on a command. [root@localhost ~]#
可以看到有 create 這個命令,可以這樣理解,docker service create 相當於docker run 就是建立容器,只不過在 swarm 中是不同的表現方式。
1)在manager節點上部署服務
docker service create --name nginx-service nginx
可以檢視是否建立成功:
docker service ls
可以具體檢視這個 service 的內容(例如:檢視服務執行在哪個節點上):
docker service ps nginx-service
檢視服務 nginx-service 部署的具體資訊:
docker service inspect --pretty nginx-service
2)擴充套件叢集服務(水平擴充套件)
我們將上述的 nginx-service 服務擴充套件到多個節點。
docker service scale nginx-service=5
已經有5個 nginx-service 服務的容器正在執行了。可以先看看serverice:
docker service ls
再看看具體的容器數量:
docker service ps nginx-service
可以看到5個容器在不同的節點上,其中有2個在manager節點,有3個在worker節點上。
當然,每一個節點都可以自己檢視自己目前執行的容器,比如worker節點檢視自己執行的容器:
docker ps
3)自動修復
scale在swarm中除了水平擴充套件外,還有一個作用,那就是修復作用,比如將某一個節點中的容器刪除掉,那麼很快swarm中發覺並進行修復,最終數量還是會和原來的保持一致。
假如現在刪除worker中的一個容器:
docker rm -f 容器Id
我們在manager節點中檢視容器情況:
可以看到紅色就是我們刪掉的容器,但是後面它又馬上補充了一個,保持了整個系統的穩定性。
4)刪除服務
# 語法 docker service rm 服務名稱 # 示例 docker service rm nginx-service # 檢視是否已刪除 docker service ps nginx-service
5)停止某個節點接收新的任務
檢視所有的節點:
docker node ls
可以看到目前所有的節點都是Active,可以接收新的任務分配。
停止節點worker-node1:
docker node update --availability drain worker-node1
注意:worker-node1狀態變為Drain。不會影響到叢集的服務,只是 worker-node1 節點不再接收新的任務,叢集的負載能力有所下降。
重新啟用節點worker-node1:
docker node update --availability active worker-node1
本文部分內容參考博文:https://www.runoob.com/docker/docker-swarm.html
至此本文就全部介紹完了,如果覺得對您有所啟發請記得點個贊哦!!!
此文由博主精心撰寫轉載請保留此原文連結:https://www.cnblogs.com/xyh9039/p/18578834
版權宣告:如有雷同純屬巧合,如有侵權請及時聯絡本人修改,謝謝!!!