文章目錄
- 一、什么是docker swarm?
- 二、docker swarm基本結構圖
- 三、準備作業
- 1.準備三臺cetnos8已安裝docker的虛擬機,并且配置好ip地址,
- 2.更改主機名
- 3.配置hosts檔案
- 4.關閉防火墻和selinux
- 四、docker swarm集群部署
- 1.創建swarm集群
- 2.添加節點主機到swarm集群
- 3.創建一個服務
- 4.swarm的動態縮容服務
- 總結
一、什么是docker swarm?
Docker Swarm 和 Docker Compose 一樣,都是 Docker 官方容器編排專案,但不同的是,Docker Compose 是一個在單個服務器或主機上創建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創建容器集群服務,對于微服務的部署,顯然 Docker Swarm 會更加適合, Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm自己不運行容器,它只是接受Docker客戶端發來的請求,調度適合的節點來運行容器,這就意味著,即使Swarm由于某些原因掛掉了,集群中的節點也會照常運行,放Swarm重新恢復運行之后,他會收集重建集群資訊,
二、docker swarm基本結構圖

在結構圖可以看出 Docker Client使用Swarm對 集群(Cluster)進行調度使用,
上圖可以看出,Swarm是典型的master-slave結構,通過發現服務來選舉manager,manager是中心管理節點,各個node上運行agent接受manager的統一管理,集群會自動通過Raft協議分布式選舉出manager節點,無需額外的發現服務支持,避免了單點的瓶頸問題,同時也內置了DNS的負載均衡和對外部負載均衡機制的集成支持,
三、準備作業
1.準備三臺cetnos8已安裝docker的虛擬機,并且配置好ip地址,
安裝docker步驟centos8及ubuntu安裝docker教程
我的四臺虛擬機如圖(其中一臺是Ubuntu,可以只用三臺centos8的虛擬機即可):

2.更改主機名
#manager虛擬機
[root@manager ~]# hostname set-hostname manager
#worker-1虛擬機
[root@worker-1 network-scripts]# hostname set-hostname worker-1
#worker-2虛擬機
[root@worker-2 network-scripts]# hostname set-hostname worker-2
#worker-3虛擬機--這是ubuntu虛擬機
root@worker3:/home/yejing# hostnamectl set-hostname worker-3
3.配置hosts檔案
[root@worker-1 ~]# vim /etc/hosts
#加上這幾個主機映射關系
192.168.31.31 manager
192.168.31.15 worker-1
192.168.31.16 worker-2
192.168.31.17 worker-3
四臺機器都要進行如上操作!
4.關閉防火墻和selinux
[root@worker-2 ~]# systemctl stop firewalld
[root@worker-2 ~]# systemctl disable firewalld
#臨時關閉selinux
[root@worker-2 ~]# setenforce 0
#永久關閉
[root@worker-2 ~]# vim /etc/selinux/config
#如下圖

四臺機器都要進行如上操作!
四、docker swarm集群部署
1.創建swarm集群
#在manager虛擬機上創建,填自己manager虛擬機的ip地址
[root@manager ~]# docker swarm init --advertise-addr 192.168.31.31
Swarm initialized: current node (z6sfk0wglnqagtbbe07u8f701) is now a manager.
To add a worker to this swarm, run the following command:
#這就是添加節點的方式,(要保存初始化后token,因為在節點加入時要使用token作為通訊的密鑰)
docker swarm join --token SWMTKN-1-40pa2ab7p1zd8n1s6l49u420fcjtxcvqoplxb7r3mupvkenkdo-4ryk8uc16bd2550c1iuweljhi 192.168.31.31:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
#查看節點是否創建成功
[root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
z6sfk0wglnqagtbbe07u8f701 * manager Ready Active Leader 20.10.8
上面命令執行后,該機器自動加入到swarm集群,這個會創建一個集群token,獲取全球唯一的 token,作為集群唯一標識,后續將其他節點加入集群都會用到這個token值,
其中,–advertise-addr引數表示其它swarm中的worker節點使用此ip地址與manager聯系,命令的輸出包含了其它節點如何加入集群的命令,
2.添加節點主機到swarm集群

[root@worker-1 ~]# docker swarm join --token SWMTKN-1-40pa2ab7p1zd8n1s6l49u420fcjtxcvqoplxb7r3mupvkenkdo-4ryk8uc16bd2550c1iuweljhi 192.168.31.31:2377
This node joined a swarm as a worker.
在其他三臺worker虛擬機上都進行上述操作
#在manager虛擬機上查看節點
[root@manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
z6sfk0wglnqagtbbe07u8f701 * manager Ready Active Leader 20.10.8
g4hltfe2aqsyoysvop0c8m21z worker-1 Ready Active 20.10.8
omk1t29nhlxkrjz59eb1lxnrg worker-2 Ready Active 20.10.8
25c3epmxs9kmhuahlgtwjzbsx worker-3 Ready Active 20.10.8
3.創建一個服務
在manager虛擬機上進行操作
#創建一個名字為helloworld的服務,10個副本,使用alpine鏡像,進行ping操作
[root@manager ~]# docker service create --replicas 10 --name helloworld alpine ping docker.com
#查看服務是否創建成功
[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
h911wkvi79wo helloworld replicated 10/10 alpine:latest
4.swarm的動態縮容服務
#擴容為20個
[root@manager ~]# docker service update --replicas 20 helloworld
#縮容為5個
[root@manager ~]# docker service scale helloworld=5
#這個命令也可以用于擴容
即使有臺機器宕機,其他機器也能夠分配20個副本,實作了高可用,
總結
至此,docker swarm集群部署成功!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295290.html
標籤:其他
上一篇:虛擬化--KVM
