亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Docker Swarm集群部署實戰

發布時間:2020-06-02 08:47:45 來源:網絡 閱讀:2952 作者:wx5b9c94b17c62a 欄目:云計算

基本概念:

Swarm介紹:
Swarm是Docker公司在2014年12月初發布的一套較為簡單的工具,用來管理Docker集群,它將一群Docker宿主機變成一個單一的虛擬的主機。
Swarm使用標準的Docker API接口作為其前端訪問入口,換言之,各種形式的Docker Client(dockerclient in Go, docker_py,docker等)均可以直接與Swarm通信。Swarm幾乎全部用Go語言來完成開發,Swarm0.2版本增加了一個新的策略來調度集群中的容器,使得在可用的節點上傳播它們,以及支持更多的Docker命令以及集群驅動。Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm自己不運行容器,它只是接受docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味著,即使Swarm由于某些原因掛掉了,集群中的節點也會照常運行,當Swarm重新恢復運行之后,它會收集重建集群信息。
docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味著,即使Swarm由于某些原因掛掉了,集群中的節點也會照常運行,當Swarm重新恢復運行之后,它會收集重建集群信息。

Swarm集群的特性:
集群中可以都是manager,但不可以都是worker。

  • Node:節點.
  • manager:經理,管理者
  • worker:工作者
  • service:一個任務,用來定義worker端接收manager的命令。

準備環境:

三臺主機(centos7):
docker version:12版本以上。

node01:172.16.1.30
node02:172.16.1.31
node03:172.16.1.32

(1)首先修改主機名:

[root@sqm-docker01 ~]# hostnamectl set-hostname node01
[root@sqm-docker01 ~]# hostnamectl set-hostname node02
[root@sqm-docker01 ~]# hostnamectl set-hostname node03

(2)三臺主機分別配置域名解析:
[root@node01 ~]# vim /etc/hosts
Docker Swarm集群部署實戰
(3)設置免密登錄:
//一直默認回車,生成密鑰:
Docker Swarm集群部署實戰

//將密鑰拷貝給node02和node03:
[root@node01 ~]# ssh-copy-id  node02
[root@node01 ~]# ssh-copy-id  node03
//有了免密登錄,將host域名解析文件拷貝給其他兩個節點:
[root@node01 ~]# scp /etc/hosts  root@172.16.1.31:/etc/hosts
[root@node01 ~]# scp /etc/hosts  root@172.16.1.32:/etc/hosts

項目操作:

1)初始化集群:

指定當前主機為集群的創建者(leader)
Docker Swarm集群部署實戰

2)既然在初始化集群時,已經提示加入集群的命令(將其復制),所以接下來將node02和node03主機加入到該集群:

Docker Swarm集群部署實戰
Docker Swarm集群部署實戰

//查看節點是否加入到集群中:
提示:這步操作只有manager才有權限查看。

Docker Swarm集群部署實戰

*####如果其他節點需要加入到該集群中,并且需要指定身份,當你忘掉初始化集群時生成的命令時,可以執行以下命進行查看命令
注意:只有manager端才有權限進行查看。

#查看以worker端加入這個集群
[root@sqm-docker01 ~]# docker swarm join-token worker

Docker Swarm集群部署實戰

#查看以manager的身份加入這個集群
[root@sqm-docker01 ~]# docker swarm join-token manager

Docker Swarm集群部署實戰

(3)配置web Ui界面:

#拉取鏡像:
用的是本地的鏡像包,所以直接導入:
[root@node01 ~]# docker load --input myvisualizer.tar
Docker Swarm集群部署實戰

#運行服務:
[root@node01 ~]# docker run -d -p 8000:8080 -e HOST=172.16.1.30 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock  --name visualizer  dockersamples/visualizer
  • HOST指定地址為本機地址

##訪問web網頁界面:
URL:http://172.16.1.30:8000/
Docker Swarm集群部署實戰

可以看到集群中的三個節點。

(4)搭建swarm集群網絡(overlay網絡)

還記得在之前搭建overlay的博文中,在搭建overlay網絡時需要先部署consul(數據中心),但現在是在swarm集群的環境中,默認自帶consul服務的功能,所以可以在直接創建overlay網絡。

##創建overlay網絡:
[root@node01 ~]# docker network  create -d overlay --attachable  docker

注意:在創建overlay網絡時,如果沒有加上--attachable,那么此網絡不可以應用于容器上。

##在node01和node02之上分別運行一個容器,測試是否能夠正常通信:
[root@node01 ~]# docker run -itd --name test1 --network docker busybox
[root@node02 ~]# docker run -itd --name test2 --network docker busybox

Docker Swarm集群部署實戰

(5)搭建私有倉庫(共享鏡像)

搭建私有倉庫的目的是為了能夠在一個集群中大家共用私有倉庫中的鏡像,能夠很方便的部署服務,并且在公司中為了安全考慮,大多都是部署自己的私有倉庫。

//以官方的registry鏡像進行部署:
[root@node01 ~]# docker run -d --name registry --restart=always -p 5000:5000 registry:latest
//修改docker配置文件:
[root@node01 ~]# vim /usr/lib/systemd/system/docker.service 

修改內容如下:
Docker Swarm集群部署實戰

//重啟docker服務:
[root@sqm-docker01 ~]# systemctl daemon-reload
[root@sqm-docker01 ~]# systemctl restart docker.service
//直接將配置文件拷貝給node02和node03
[root@sqm-docker01 ~]# scp /usr/lib/systemd/system/docker.service  node02:/usr/lib/systemd/system/docker.service

[root@sqm-docker01 ~]# scp /usr/lib/systemd/system/docker.service  node03:/usr/lib/systemd/system/docker.service

拷貝過去后,需要在node02和node03重載進程并且重啟docker服務。

####部署完私有倉庫,我們最好測試一下:

在node01上將apache鏡像上傳到私有倉庫中:
[root@node01 ~]# docker tag httpd:latest  172.16.1.30:5000/myhttpd
[root@node01 ~]# docker push 172.16.1.30:5000/myhttpd

在其他節點上進行拉取:
[root@node02 ~]# docker pull 172.16.1.30:5000/myhttpd
Docker Swarm集群部署實戰
[root@node03 ~]# docker pull 172.16.1.30:5000/myhttpd
Docker Swarm集群部署實戰

(6)docker swarm集群配置service服務

##發布任務,并且創建副本數量為2
[root@node01 ~]# docker service create  --replicas 2 --name web01 -p 80:80 172.16.1.30:5000/myhttpd:latest 

--replicas:副本,可以基于該副本進行復制。--replicas 1表示只需要一個容器。

//查看服務:
[root@node01 ~]# docker service  ls

Docker Swarm集群部署實戰
//查看服務運行在集群中的哪個節點之上:
它是會參考節點的各種性能配置以及工作量,來實現分配到給哪個節點,以實現負載均衡

Docker Swarm集群部署實戰
除了通過命令行的方式進行查看service的各種信息,還可以通過web網頁進行查看:
Docker Swarm集群部署實戰

發布第二個服務:
[root@node01 ~]# docker service create --replicas 4 --name web02 -p 80 172.16.1.30:5000/myhttpd #隨機生成端口
Docker Swarm集群部署實戰
可以看到依然會均衡的分布在每個節點。

(7)service服務的擴容與縮容:

實現擴容和縮容的原因很明確,縮容是當某一個節點壓力過大,或者是服務器配置不足以承受所運行的服務,需要減少容器,以保證穩定運行,擴容呢?是當 某個節點的服務器處于閑置的狀態下,多給分配幾個服務運行,也是不影響的。

1)擴容:
[root@node01 ~]# docker service  scale web01=6

Docker Swarm集群部署實戰
在web網頁進行查看:
Docker Swarm集群部署實戰

2)縮容:
[root@node01 ~]# docker service  scale web02=1

Docker Swarm集群部署實戰
在web網頁上進行查看:
Docker Swarm集群部署實戰

(8)設置manager不參加工作:

在一個集群中,最好的狀態是指定manager節點不參加工作,讓node節點進行工作,好比是在一個公司中,老板是不可能工作的是吧,一般會去讓員工進行工作。

Docker Swarm集群部署實戰

##指定manager節點不參加工作:
[root@node01 ~]# docker node update  --availability drain  node01 

Docker Swarm集群部署實戰
Docker Swarm集群部署實戰

從上圖可以看到,manager已經不參加工作,所以運行的容器默認已經工作在node01和node02上。

(9)指定副本運行節點位置:

如果有需求,需要將發布的所以服務運行在同一臺服務器上,該怎么實現呢?
方法一:

1)定義標簽:
[root@node01 ~]# docker node update  --label-add disk=max node03  ##將標簽定義到節點3上
2)發布服務:
[root@node01 ~]# docker service  create  --name test --replicas 5 -p 80 --constraint 'node.labels.disk==max'  172.16.1.30:5000/myhttpd

查看是否指定成功:
Docker Swarm集群部署實戰
Docker Swarm集群部署實戰

方法二:
直接指定節點主機名。
[root@node01 ~]# docker service create --replicas 5 --name testname --constraint 'node.hostname==node02' -p 80 172.16.1.30:5000/myhttpd
Docker Swarm集群部署實戰

service服務的更新&回滾:

1,服務的更新:

將以上服務(test)更新為2.0版本。

[root@node01 ~]# docker tag 172.16.1.30:5000/myhttpd:latest 172.16.1.30:5000/myhttpd:v2.0
[root@node01 ~]# docker push 172.16.1.30:5000/myhttpd:v2.0 

[root@node01 ~]# docker service update --image 172.16.1.30:5000/myhttpd:v2.0 test
Docker Swarm集群部署實戰
注意:當服務的版本升級了,它原來的版本依然會進行保留的。
并且在更新的過程中,默認是一個一個的依次進行更新的,當一個更新完成后,再去更新下一個。

2,服務自定義更新:

將以上服務進行更新為3.0版本。

[root@node01 ~]# docker tag 172.16.1.30:5000/myhttpd:v2.0 172.16.1.30:5000/myhttpd:v3.0
[root@node01 ~]# docker push 172.16.1.30:5000/myhttpd:v3.0 

[root@node01 ~]# docker service update --image 172.16.1.30:5000/myhttpd:v3.0 --update-parallelism 2 --update-delay 1m test

參數解釋:
--update-parallelism 2 :設置并行(同時)更新的副本數。
--update-delay 1m(m(分鐘 s(秒) h (小時)d(天) w(星期)):指定滾動更新的時間間隔。

Docker Swarm集群部署實戰
Docker Swarm集群部署實戰

3,服務的回滾操作:

當我們執行回滾操作時,默認是回滾到上一次操作的版本,只能在前后兩個版本之間進行回滾,不能連續回滾。

[root@node01 ~]# docker service update --rollback test
Docker Swarm集群部署實戰
登陸web網頁更直觀的進行查看:
Docker Swarm集群部署實戰

回滾成功。。。

##測試再次回滾,它會回滾到哪個版本呢?

[root@node01 ~]# docker service  update --rollback test

Docker Swarm集群部署實戰

可以看到它會回滾到第一次回滾前的一個版本。證明是不可以連續回滾的。

docker swarm集群命令匯總:

//初始化集群:docker swarm init --advertise-addr 本機ip地址
//查看節點信息:docker node ls
//以worker端加入這個集群:docker swarm join-token worker
//以manager端加入這個集群:docker swarm join-token manager
//將節點升級為manager:docker node promote node2
//將節點降級為worker:docker node demote node2
//脫離集群:docker swarm leave
//刪除節點(只有脫離了集群,才能夠刪除):docker node rm node2

//強制刪除集群:docker swarm leave -f (必須強制刪除)

//查看服務:docker service ls
//查看服務運行在哪個節點上(隨機的):docker service ps 任務名

//發布一個任務:
docker service create --replicas 2 --name test -p 80 httpd:latest
//刪除所有任務(容器):docker service rm ........(任務名)
或者:docker service ls | xargs docker service rm

//將任務進行擴容:docker service scale 服務名稱=2
//進行縮容:docker service scale 服務名稱=1

//設置某個節點工作:docker node update --availability active 節點名
//設置某個節點暫時不工作(掛起): docker node update --availability pause 節點名
//設置某個節點不參加工作: docker node update --availability drain 節點名
//更新服務:docker service update --image 172.16.1.30:5000/my_nginx:3.0(鏡像名) test2(服務名)
//自定義更新:
docker service update --image 172.16.1.30:5000/my_nginx:4.0 --update-parallelism 2 --update-delay 1m test2

//服務回滾: docker service update --rollback bdqn2


———————— 本文至此結束,感謝閱讀 ————————

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

烟台市| 咸宁市| 十堰市| 且末县| 金乡县| 白朗县| 平舆县| 会泽县| 保康县| 三江| 蕉岭县| 西丰县| 唐山市| 花莲县| 桂平市| 满洲里市| 甘德县| 龙游县| 绿春县| 巴楚县| 小金县| 禄劝| 石楼县| 岱山县| 宿松县| 江阴市| 如皋市| 光泽县| 营口市| 交口县| 阿合奇县| 台湾省| 威信县| 蓝山县| 闽清县| 永年县| 错那县| 年辖:市辖区| 台北市| 紫金县| 汽车|