溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Dcoker swarm

發(fā)布時間:2020-05-17 23:23:49 來源:網(wǎng)絡(luò) 閱讀:223 作者:qq5bb2021f831d3 欄目:云計算

如果文章內(nèi)容看不懂,最后有個小實驗可以了解一下

docker swarm集群:三劍客之一

準(zhǔn)備:

docker01 docker02 docker03
192.168.1.10 192.168.1.20 192.168.1.30
myvisualizer.tar nginx.tar nginx.tar
nginx.tar

關(guān)閉防火墻,禁用selinux,3臺dockerhost區(qū)別主機名,時間同步

[root@docker01 ~]# systemctl stop firewalld

[root@docker01 ~]# systemctl disable firewalld

[root@docker01 ~]# setenforce 0

時間同步:

mv /etc/localtime/etc/localtime. bk
cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime

docker版本必須是:v1.12版本開始。

[root@docker01 ~]# docker -v
Docker version 18.09.0, build 4d60db4

每臺添加域名解析:

[root@docker01 ~]# vim /etc/hosts

192.168.1.10 docker01
192.168.1.20 docker02
192.168.1.30 docker03

Swarm:作用運行docker engin(引擎)的多個主機組成的集群。

node:每一個docker engin都是一個(node)節(jié)點,分為manager和worker。

? manager node:負責(zé)執(zhí)行編排和集群的管理工作,保持并維護swarm處于期望的狀態(tài)。swram可以有多個manager node,他們會自動協(xié)商并選舉一個Leader執(zhí)行編排任務(wù)。但相反,不能沒有manager node。

? worker node:接受并執(zhí)行manager node派發(fā)的任務(wù),并且默認manager node也是一個worker node,不過可以將它設(shè)置為manager-only node,讓它只負責(zé)編排和管理工作。

service:用來定義worker上執(zhí)行的命令。

1)初始化集群

docker初始化:

[root@docker01 ~]# docker swarm init --advertise-addr 192.168.1.10 

//--advertis-addr:指定其他node通信的地址。

Dcoker swarm

上面返回的結(jié)果告訴我們:初始化成功,并且,如果想要添加work節(jié)點運行下面的命令
docker swarm join --token SWMTKN-1-0tx0cf540mq3stxknq8xlv2183ymeeld9zvxen7x1tepw1z2un-e6onamnuj4nck4bw8k294ujnn 192.168.1.10:2377

PS:這里注意,token只有24小時的有效期。

如果想要添加manager節(jié)點,運行下邊的命令:
docker swarm join-token manager

docker02和docker03運行:

[root@docker02 ~]# docker swarm join --token SWMTKN-1-0tx0cf540mq3stxknq8xlv2183ymeeld9zvxen7x1tepw1z2un-e6onamnuj4nck4bw8k294ujnn 192.168.1.10:2377

當(dāng)其他兩個節(jié)點加入成功之后,我們可以用 docker node ls查看節(jié)點信息

docker01查看:

[root@docker01 ~]# docker node ls

Dcoker swarm

PS:

*:當(dāng)前所在終端

Ready:準(zhǔn)備報,可以進行工作

Active:正在運行中

dokcer02和docker03操作:

docker swarm leave :申請離開一個集群(自動離職),之后查看節(jié)點狀態(tài)會變成down,然后可以通過manager node將其刪除。

自動離職:

[root@docker02 ~]# docker swarm leave 
Node left the swarm.

docker01上操作:

docker node rm xxx:刪除某個節(jié)點(開除)。

開除:

[root@docker01 ~]# docker node  rm docker02
docker02
[root@docker01 ~]# docker node  rm docker03
docker03

基本操作命令:

docker swarm join-token [manager| worker]:生成令牌,可以是manager身份或worker身份。

[root@docker01 ~]# docker swarm join-token manager 
To add a manager to this swarm, run the following command:

docker swarm join --token SWMTKN-1-0tx0cf540mq3stxknq8xlv2183ymeeld9zvxen7x1tepw1z2un-ca100vimkqxp3d2ka30o2y0fi 192.168.1.10:2377

docker02和docker03上操作:

[root@docker03 ~]#     docker swarm join --token SWMTKN-1-0tx0cf540mq3stxknq8xlv2183ymeeld9zvxen7x1tepw1z2un-ca100vimkqxp3d2ka30o2y0fi 192.168.1.10:2377
This node joined a swarm as a manager.

docker node demote (降職):將此swram節(jié)點的manager

降級為work.

docker node promote (升職):將swarm節(jié)點的work升級為manager.

docker01上操作:

[root@docker01 ~]# docker node demote docker02
Manager docker02 demoted in the swarm.
[root@docker01 ~]# docker node demote docker03
Manager docker03 demoted in the swarm.
[root@docker01 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
kzwsrnrij3gauh9kkzio2ktab *   docker01            Ready               Active              Leader              18.09.0
c39620kukfj2lgjm53yw7srq5     docker02            Ready               Active                                  18.09.0
mtghji5h2muwrxrb1j174u66p     docker03            Ready               Active                                  18.09.0

2)部署docker swarm集群網(wǎng)絡(luò)

overlay:覆蓋型網(wǎng)絡(luò)。

docker01操作:

[root@docker01 ~]# docker network create -d overlay --attachable docker
sfot05jf5hkjjdx1el56ffc9e

//attachble:這個參數(shù)必須要加,否則不能用于容器。

在創(chuàng)建網(wǎng)絡(luò)的時候,我們并沒有部署一個存儲服務(wù),比如consul,那是因為docker swarm自帶存儲。

3)部署一個圖形化webUI界面。

docker01導(dǎo)入myvisualizer.tar鏡像

[root@docker01 ~]# docker load < myvisualizer.tar 

[root@docker01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.10 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer

然后可以通過瀏覽器訪問驗證:

Dcoker swarm

如果網(wǎng)頁訪問不到,需要開啟路由轉(zhuǎn)發(fā):

[root@docker01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 

[root@docker01 ~]# sysctl -p
net.ipv4.ip_forward = 1

4)創(chuàng)建service

三臺docker都操作

[root@docker01 ~]# docker service create --replicas 1 --network docker --name web1 -p 80 nginx:latest

//--replicas:副本數(shù)量。

大概可以理解為:一個副本等于一個容器。

//查看service:

[root@docker01 ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
ivihvmk98bz5        web1                replicated          1/1                 nginx:latest        *:80->80/tcp

//查看service信息:

[root@docker01 ~]# docker service ps web1 
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
w9u7bun0cg1f        web1.1              nginx:latest        docker03            Running             Running 4 minutes ago    

//創(chuàng)建5個容器:

[root@docker01 ~]# docker service create --replicas 5 --network docker --name web -p 80 nginx:latest

Dcoker swarm

將docker02掛起后:

Dcoker swarm

將docker03掛起后:都到docker01上

Dcoker swarm

但是當(dāng)docker02和docker03啟動后,工作也回不去

Dcoker swarm

//刪除容器:

[root@docker01 ~]# docker service rm web1
web1

//增加或減少容器:

[root@docker01 ~]# docker service scale web=8

//設(shè)置manager node不參加工作:

[root@docker01 ~]# docker node update --availability drain docker01
docker01

5)搭建私有倉庫

docker pull registry:2

docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2 

docker pull busybox

docker tag busybox:latest 192.168.1.10:5000/busybox

vim /usr/lib/systemd/system/docker.service 

13行:

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.10:5000

systemctl daemon-reload 

systemctl restart docker

 docker push 192.168.1.10:5000/busybox:latest 

6)自定義鏡像

要求:基于httpd鏡像,更改主訪問界面內(nèi)容,鏡像tag版本為v1,v2,v3,對應(yīng)主機面內(nèi)容為111,222,333.

[root@docker01 ~]# mkdir {v1,v2,v3}
[root@docker01 v1]# cd
[root@docker01 ~]# cd v1/
[root@docker01 v1]# cat index.html 
1111111111111111111                          ##另外v2,v3為222 222
[root@docker01 v1]# cat Dockerfile 
FROM httpd
ADD index.html /usr/local/apache2/htdocs/index.html
[root@docker01 v1]# docker build -t 192.168.1.10:5000/httpd:v1 .
[root@docker01 v1]# docker push 192.168.1.10:5000/httpd:v1

7)發(fā)布一個服務(wù),基于上述鏡像

要求:副本數(shù)量為3個。服務(wù)的名稱為:bdqn.

[root@docker01 v1]# docker service create --replicas 3 --name bdqn -p 80:80 192.168.1.10:5000/httpd:v1

PS:到docker02和docker03用docker service ls查看一下,是否一共有三臺bdqn!!!

互聯(lián)網(wǎng)訪問都是這個界面:
Dcoker swarm

docker02:

[root@docker02 ~]# docker exec -it 915bb2da7d43 /bin/bash
root@915bb2da7d43:/usr/local/apache2# cd htdocs/
root@915bb2da7d43:/usr/local/apache2/htdocs# echo 12345 > index.html 

[root@docker02 ~]# curl 127.0.0.1
54321

docker03:

[root@docker03 ~]# docker exec -it bdqn.1.kaksxkdur0fhypukm8q2zms3i /bin/bash
root@31c5f6af1259:/usr/local/apache2# cd htdocs/
root@31c5f6af1259:/usr/local/apache2/htdocs# echo 54321 > index.html 
root@31c5f6af1259:/usr/local/apache2/htdocs# exit
exit
[root@docker03 ~]# curl 127.0.0.1
54321

之后驗證:

[root@docker01 ~]# curl 127.0.0.1
1111111111111111111
[root@docker01 ~]# curl 127.0.0.1
12345
[root@docker01 ~]# curl 127.0.0.1
54321

默認的ingress網(wǎng)絡(luò),包括創(chuàng)建的自定義overlay網(wǎng)絡(luò),為后端真正為用戶提供服務(wù)的container,提供了一個統(tǒng)一的入口。

服務(wù)的擴容與縮容

[root@docker01 ~]# docker service create --replicas 3 --name test -p 80 192.168.1.10:5000/httpd:v1

隨即映射端口范圍30000-32767

[root@docker01 ~]# docker service scale bdqn=6

擴容與縮容可以直接通過scale進行設(shè)置副本數(shù)量。

服務(wù)的升級與回滾

升級操作

[root@docker01 ~]# docker service update --image 192.168.1.10:5000/httpd:v2 bdqn

//平滑的更新。

[root@docker01 ~]# docker service update --image 192.168.1.10:5000/httpd:v3 --update-parallelism 2 --update-delay 1m bdqn

PS:默認情況下,swarm一次只更新一個副本,并且兩個副本之間沒有等待時間,我們可以通過--update-parallelism設(shè)置并行更新的副本數(shù)量。

--update-delay:指定滾動更新的時間間隔。

回滾操作

[root@docker01 ~]# docker service rollback bdqn 

PS:注意docker swarm的回滾操作,默認只能回滾到上一次操作的狀態(tài),并不能連續(xù)回滾操作。

小實驗:
3臺docker:
docker01 docker02 docker03
192.168.1.10 192.168.1.20 192.168.1.30
193.
部署一個swarm集群,要求3臺dockerhost,docker01為manager node,02和03為worker node.
三臺docker都做:
DNS域名解析
[root@docker01 ~]# vim /etc/hosts

192.168.1.10 docker01
192.168.1.20 docker02
192.168.1.30 docker03

初始化:
[root@docker01 ~]# docker swarm init --advertise-addr 192.168.1.10

docker02加入群集:
[root@docker02 ~]# docker swarm join --token SWMTKN-1-3rtvbfgl70u9fndd02kazcne3ib7zqzfhrx7v1ty2ebmod4ex6-2xe4chwto2m04mcwcn601zn54 192.168.1.10:2377

docker03加入群集:
[root@docker03 ~]# docker swarm join --token SWMTKN-1-3rtvbfgl70u9fndd02kazcne3ib7zqzfhrx7v1ty2ebmod4ex6-2xe4chwto2m04mcwcn601zn54 192.168.1.10:2377

[root@docker01 ~]# docker node ls
Dcoker swarm

需要myvisualizer.tar鏡像,可以從網(wǎng)上找
將myvisualizer.tar導(dǎo)入docker鏡像:
[root@docker01 ~]# docker load < myvisualizer.tar

運行myvisualizer.tar
[root@docker01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.10 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer

訪問驗證:
Dcoker swarm

部署一個servcie服務(wù),要求使用httpd鏡像,名稱為test.要求8個副本數(shù)量。并且swarm集群要求:manager 節(jié)點不參加工作。

需要httpd.tar包,可從網(wǎng)上下載
將httpd.tar導(dǎo)入docker鏡像:
[root@docker01 ~]# docker load < httpd.tar

創(chuàng)建一個名叫docker,網(wǎng)卡類型為overlay的網(wǎng)卡:
[root@docker01 ~]# docker network create -d overlay --attachable docker

使用httpd鏡像創(chuàng)建8臺網(wǎng)卡為docker的test容器:
[root@docker01 ~]# docker service create --replicas 8 --network docker --name test -p 80 httpd:latest
驗證
Dcoker swarm

使docker01不參加工作
[root@docker01 ~]# docker node update --availability drain docker01
docker01
驗證:
Dcoker swarm

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI