Docker中的集群管理與應(yīng)用方式
一、項(xiàng)目案例
1、準(zhǔn)備主機(jī)
(1)關(guān)閉防火墻,或者開放TCP端口2377(用于集群管理通信)、TCP/UPD端口7946(用于節(jié)點(diǎn)之間的通信)、UDP端口4789(用于overlay網(wǎng)絡(luò)流量監(jiān)控)
(2)安裝docker
(3)設(shè)置靜態(tài)ip
(4)修改主機(jī)名
2、創(chuàng)建Swarm集群
(1)主節(jié)點(diǎn)創(chuàng)建新的Swarm集群
[root@manager01 ~]# docker swarm init --advertise-addr 192.168.75.129 Swarm initialized: current node (y8rm15jh2qs5e3qsh6n13cxfh) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
(2)第一個工作節(jié)點(diǎn)加入集群
[root@worker01 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377
(3)第二個工作節(jié)點(diǎn)加入集群
[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-e8m7203crmlpwsmdfn3afyyss 192.168.75.129:2377 This node joined a swarm as a worker.
(4)查看集群節(jié)點(diǎn)信息
[root@manager01 ~]# docker info
3、查看節(jié)點(diǎn)信息
[root@manager01 ~]# docker node inspect worker01 --pretty
注:
(1)STATUS列表示節(jié)點(diǎn)當(dāng)前狀態(tài),Ready表示正常,Down表示已宕機(jī)
(2)AVAILABILITY列表示該節(jié)點(diǎn)的可用性狀態(tài),有3種狀態(tài)
- 活動(Active):調(diào)度器能夠安排任務(wù)到該節(jié)點(diǎn)。
- 暫停(Pause):調(diào)度器不能安排任務(wù)到該節(jié)點(diǎn)。但是已經(jīng)存在的任務(wù)會繼續(xù)運(yùn)行
- 候選者(Drain):調(diào)度器不能安排任務(wù)到該節(jié)點(diǎn),且會停止已存在的任務(wù),并將這些任務(wù)分配到其他處于活動狀態(tài)的節(jié)點(diǎn)中。
(3)MANAGER STATUS列表示管理器狀態(tài),共有以下4中狀態(tài)
- 領(lǐng)導(dǎo)者(Leader):為Swarm集群做出所有管理和編排的主要管理器節(jié)點(diǎn)
- 候選者(Reachable):如果領(lǐng)導(dǎo)節(jié)點(diǎn)變?yōu)椴豢捎茫瑒t候選者節(jié)點(diǎn)有資格成為新的領(lǐng)導(dǎo)者節(jié)點(diǎn)。
- 不可用(Unavailable):該節(jié)點(diǎn)不能和其他管理節(jié)點(diǎn)產(chǎn)生任何聯(lián)系,這種情況下,應(yīng)該添加一個新的管理器節(jié)點(diǎn)到集群中,或者將一個工作節(jié)點(diǎn)升級為管理器節(jié)點(diǎn)。
- 空白:表明該節(jié)點(diǎn)是工作者節(jié)點(diǎn)
4、讓節(jié)點(diǎn)脫離集群
(1)在工作節(jié)點(diǎn)執(zhí)行,使worker02脫離集群,要在worker02主機(jī)上執(zhí)行
[root@worker02 ~]# docker swarm leave
(2)在主節(jié)點(diǎn)查看worker02的信息,并刪除該節(jié)點(diǎn)
[root@manager01 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION y8rm15jh2qs5e3qsh6n13cxfh * manager01 Ready Active Leader 23.0.2 f0aw8dor6hlkth9kzy4m3k0vt worker01 Ready Active 23.0.2 xjpsue874nrm0hm3tw39mvwhl worker02 Down Active 23.0.2 [root@manager01 ~]# docker node rm worker02 worker02 [root@manager01 ~]#
5、讓節(jié)點(diǎn)以管理器角色加入集群
(1)獲取加入管理角色的命令
[root@manager01 ~]# docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377 [root@manager01 ~]#
(2)worker02加入集群的管理節(jié)點(diǎn)
[root@worker02 ~]# docker swarm join --token SWMTKN-1-48xia8024q8de6jxhca3whxenfeayo7hx8tdvg7lb1c28i4zfo-3davlb9zjkr6gvvkrtu8mz3w2 192.168.75.129:2377
(3)查看集群節(jié)點(diǎn)信息
[root@manager01 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION y8rm15jh2qs5e3qsh6n13cxfh * manager01 Ready Active Leader 23.0.2 f0aw8dor6hlkth9kzy4m3k0vt worker01 Ready Active 23.0.2 pgm7vq62akim0ms9kz8duguru worker02 Ready Active Reachable 23.0.2 [root@manager01 ~]#
6、降級和升級節(jié)點(diǎn)
(1)在管理節(jié)點(diǎn)降級為工作節(jié)點(diǎn),在管理節(jié)點(diǎn)執(zhí)行
[root@worker02 ~]# docker node demote worker02
(2)在工作節(jié)點(diǎn)升級為管理節(jié)點(diǎn),在工作節(jié)點(diǎn)執(zhí)行
[root@worker02 ~]# docker node promote worker02
二、Docker Swarm 集群部署和管理服務(wù)
1、將服務(wù)部署到Swarm集群中
(1)創(chuàng)建服務(wù)
# docker service create --name swarm-web01 nginx
(2)使用docker service ls 命令查看正在運(yùn)行的服務(wù)列表
# docker service ls ID NAME MODE REPLICAS IMAGE PORTS r5wx100nb2t6 swarm-web01 replicated 1/1 nginx:latest
REPLICAS列為m/n:n代表副本數(shù),m代表正在運(yùn)行的副本
(3)使用 docker service ps 命令查看顯示任務(wù)列表信息,查看每個副本運(yùn)行節(jié)點(diǎn)的狀態(tài)信息
[root@master01 ~]# docker service ps swarm-web01
(4)使用docker service inspect 顯示有關(guān)服務(wù)的詳細(xì)信息,–pretty選項(xiàng)表示易于閱讀的格式
[root@master01 ~]# docker service inspect --pretty swarm-web01 ID: r5wx100nb2t6vrtdsobnc1deg #服務(wù)ID Name: swarm-web01 #服務(wù)名稱 Service Mode: Replicated #服務(wù)模式,這里為復(fù)制模式 Replicas: 1 #副本數(shù) Placement: #服務(wù)配置 UpdateConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-first RollbackConfig: #回滾配置 Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: #容器定義 Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 Init: false Resources: Endpoint Mode: vip #端點(diǎn)模式
2、伸縮服務(wù)
(1)增加服務(wù)副本數(shù)
# docker service scale swarm-web01=5
查看任務(wù)列表(管理節(jié)點(diǎn))
# docker service ps swarm-web01
(2)減少文件副本數(shù)
# docker service scale swarm-web01=3
3、刪除swarm服務(wù)
# docker service rm swarm-web01
4、對服務(wù)的任務(wù)進(jìn)行滾動更新
(1)部署nginx到集群中,并配置8秒的更新延遲策略
# docker service create --replicas 3 --name my-web01 --update-delay 8s nginx
–update-delay 選項(xiàng)用于配置更新一個或多個任務(wù)之間的延遲時間,時間可以使用的單位有秒(s)、分鐘(min)或小時(h)、還可以組合使用更多單位的時間,如5min30s,表示延遲5分鐘30秒
默認(rèn)情況下,調(diào)度器一次更新一個任務(wù),可以通過 --update-parallelism 選項(xiàng)來配置調(diào)度器同事(并發(fā))更新的最大服務(wù)任務(wù)數(shù)。
默認(rèn)情況下,當(dāng)對單個任務(wù)的更新完成并返回運(yùn)行狀態(tài)時,調(diào)度器會調(diào)度另一個任務(wù)來更新,直到所有任務(wù)被更新。如果在任務(wù)更新期間的任何時間都返回失?。‵AILED)狀態(tài),則調(diào)度器會暫停更新??梢允褂?--update-failure-action 選項(xiàng)來控制 docker service create 或 docker service update 命令的行為。
(2)查看my-web01服務(wù)的詳細(xì)信息
[root@master01 ~]# docker service inspect my-web01 --pretty ID: c5k770ixaswchg3p96lsh9g3p Name: my-web01 Service Mode: Replicated Replicas: 3 Placement: UpdateConfig: #更新配置 Parallelism: 1 #同時更新的最大任務(wù)數(shù) Delay: 8s #更新之間的延遲操作時間 On failure: pause #更新失敗后的操作 Monitoring Period: 5s #每個任務(wù)更新后的延遲時間 Max failure ratio: 0 #更新期間容許的失敗率 Update order: stop-first #更新順序 RollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: #容器定義 Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 Init: false Resources: Endpoint Mode: vip
(3)使用 docker service update 命令更新容器鏡像
# docker service update --image nginx:latest my-web01
(4)手動回滾到前一個版本
# docker service update --rollback my-web01
三、配置和管理Docker Swarm網(wǎng)絡(luò)
1、創(chuàng)建自定義overlay網(wǎng)絡(luò)
# docker network create -d overlay nginx-net01
查看創(chuàng)建的overlay網(wǎng)絡(luò)
# docker network ls
2、將swarm服務(wù)連接到自定義overlay網(wǎng)絡(luò)
部署服務(wù)時,如果不使用 --network 選項(xiàng)顯示聲明,則服務(wù)將連接到默認(rèn)的ingress網(wǎng)絡(luò),在生產(chǎn)環(huán)境下,建議使用自定義 overlay 網(wǎng)絡(luò)。
(1)創(chuàng)建服務(wù)并連接到 nginx-net01 網(wǎng)絡(luò)
# docker service create --name my-nginx01 --publish published=8000,target=80 --replicas=3 --network nginx-net01 nginx
(2)查看該服務(wù)的詳細(xì)信息
[root@master01 ~]# docker service inspect my-nginx01 --pretty ID: qxmmj8przpjlrdulxm57sz1l6 Name: my-nginx01 Service Mode: Replicated Replicas: 3 Placement: UpdateConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Update order: stop-first RollbackConfig: Parallelism: 1 On failure: pause Monitoring Period: 5s Max failure ratio: 0 Rollback order: stop-first ContainerSpec: Image: nginx:latest@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31 Init: false Resources: Networks: nginx-net01 Endpoint Mode: vip Ports: PublishedPort = 8000 #發(fā)布端口 Protocol = tcp #發(fā)布協(xié)議 TargetPort = 80 #目標(biāo)端口 PublishMode = ingress #發(fā)布模式
注:自定義 overlay 網(wǎng)絡(luò)的服務(wù)發(fā)布模式仍然為ingress,即通過路由網(wǎng)發(fā)布。
(3)為 swarm 服務(wù)更換overlay 網(wǎng)絡(luò)連接。
創(chuàng)建新的網(wǎng)絡(luò)
# docker network create -d overlay nginx-net100
為服務(wù)添加overlay網(wǎng)絡(luò)
# docker service update --network-add nginx-net100 my-nginx01
(4)overlay 網(wǎng)絡(luò)在工作節(jié)點(diǎn)上會隨著服務(wù)的刪除而自動刪除,但在管理器節(jié)點(diǎn)上并不會自動刪除,在管理器節(jié)點(diǎn)上一次執(zhí)行以下命令刪除上述服務(wù)和網(wǎng)絡(luò)
# docker service rm my-nginx01 # docker network rm nginx-net01 nginx-net100
3、驗(yàn)證swarm服務(wù)發(fā)布模式
- ipgress:路由網(wǎng)模式,不管該節(jié)點(diǎn)有沒有部署該服務(wù),都能通過該節(jié)點(diǎn)訪問該服務(wù)
- host:主機(jī)模式,如果該節(jié)點(diǎn)沒有部署該服務(wù),這 curl http://未部署節(jié)點(diǎn)ip:80 無法訪問
(1)創(chuàng)建2個副本的服務(wù),并以路由網(wǎng)模式對外發(fā)布端口
# docker service create --name my-nginx01 --publish published=8088,target=80 --replicas 2 nginx
(2)訪問worker02 節(jié)點(diǎn)上的服務(wù)(目前在worker02 節(jié)點(diǎn)未運(yùn)行該服務(wù)),發(fā)現(xiàn)可以訪問
[root@master01 ~]# curl http://192.168.65.141:8088
(3)創(chuàng)建2個副本的服務(wù),并以主機(jī)模式對外發(fā)布端口
# docker service create --name my-nginx02 --publish published=8080,target=80,mode=host --replicas 2 nginx
(4)查看服務(wù)的發(fā)布模式
[root@master01 ~]# docker service inspect my-nginx02 --pretty ... ... Ports: PublishedPort = 8080 Protocol = tcp TargetPort = 80 PublishMode = host #發(fā)布模式
(5)訪問worker02 節(jié)點(diǎn)上的服務(wù)(目前在worker02 節(jié)點(diǎn)未運(yùn)行該服務(wù)),發(fā)現(xiàn)訪問被拒絕
[root@master01 ~]# curl http://192.168.65.141:8080 curl: (7) Failed connect to 192.168.65.141:8080; 拒絕連接
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解通過Docker搭建Mysql容器+Tomcat容器連接環(huán)境
本篇文章主要介紹了通過Docker搭建Mysql容器+Tomcat容器連接環(huán)境,具有一定的參考價值,有興趣的可以了解一下。2017-01-01docker下安裝Elasticsearch設(shè)置賬號密碼的步驟記錄
這篇文章主要介紹了docker下安裝Elasticsearch設(shè)置賬號密碼的步驟,包括拉取鏡像、創(chuàng)建配置文件和用戶密碼文件、掛載文件到容器、使用Kibana或API創(chuàng)建用戶、驗(yàn)證配置、以及持久化數(shù)據(jù)和日志,需要的朋友可以參考下2025-04-04Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案
這篇文章主要介紹了Docker容器沒有權(quán)限寫入宿主機(jī)目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker數(shù)據(jù)卷掛載及宿主機(jī)目錄掛載使用和區(qū)別
本文主要介紹了Docker數(shù)據(jù)卷掛載及宿主機(jī)目錄掛載使用和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02docker容器通過ping直接運(yùn)行獲取公網(wǎng)IP操作
這篇文章主要介紹了docker容器通過ping直接運(yùn)行獲取公網(wǎng)IP操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11