
👨🏻🎓部落客介紹:大家好,我是芝士味的椒鹽,一名在校大學生,熱愛分享知識,很高興在這裡認識大家🌟
🌈擅長領域:Java、大資料、運維、電子
🙏🏻如果本文章各位小夥伴們有幫助的話,🍭關注+👍🏻點贊+🗣評論+📦收藏,相應的有空了我也會回訪,互助!!!
🤝另本人水準有限,旨在創作簡單易懂的文章,在文章描述時如有錯,懇請各位大佬指正,在此感謝!!!
@[TOC]
什麼是Swarm
- Swarm是Docker公司推出的用來管理docker叢集的平台.
- Swarm內建在Docker中無需安裝
- 工作原理
Swarm常用指令
- 常用指令
- 作為叢集的管理docker swarm
- 初始化一個
swarmdocker swarm init
- 指定初始化ip位址節點
docker swarm init --advertise-addr 管理端IP位址
- 去除本地之外的所有管理器身份
docker swarm init --force-new-cluster
- 将節點加入swarm叢集,兩種加入模式manager與worker
docker swarm join
- 工作節點加入管理節點需要通過join-token認證
docker swarm join-token
- 重新擷取docker擷取初始化指令
docker swarm join-token worker
- 離開swarm
docker swarm leave
- 對swarm叢集更新配置
docker swarm update
- 管理swarm節點docker node
- 檢視叢集中的節點
docker node ls
- 将manager角色降級為worker
docker node demote 主機名
- 将worker角色更新為manager
docker node promote 主機名
- 檢視節點的詳細資訊,預設json格式
docker node inspect 主機名
- 檢視節點資訊平鋪格式
docker node inspect --pretty 主機名
- 檢視運作的一個或多個及節點任務數,預設目前節點
docker node ps
- 從swarm中删除一個節點
docker node rm 主機名
- 更新一個節點
docker node update
- 對節點設定狀态(“active”正常|“pause”暫停|“drain”排除自身work任務)
docker node update --availability
- 服務管理docker service
- 建立一個服務
docker service create
- 建立的副本數
docker service create --replicas 副本數
- 指定容器名稱
docker service create --name 名字
- 每次容器與容器之間的更新時間間隔。
docker service create --update-delay s秒
- 更新時同時并行更新數量,預設1
docker service create --update-parallelism 個數
- 任務容器更新失敗時的模式,(“pause”停止|”continue“繼續),預設pause。
docker service create --update-failure-action 類型
- 每次容器與容器之間的復原時間間隔。
docker service create --rollback-monitor 20s
- 復原故障率如果小于百分比允許運作
docker service create --rollback-max-failure-ratio .數值(列“.2”為%20)
- 添加網絡
docker service create --network 網絡名
- 建立volume類型資料卷
docker service create --mount type=volume,src=volume名稱,dst=容器目錄
- 建立bind讀寫目錄挂載
docker service create --mount type=bind,src=宿主目錄,dst=容器目錄
- 建立bind隻讀目錄挂載
docker service create --mount type=bind,src=宿主目錄,dst=容器目錄,readonly
- 建立dnsrr負載均衡模式
docker service create --endpoint-mode dnsrr 服務名
- 建立docker配置檔案到容器本地目錄
docker service create --config source=docker配置檔案,target=配置檔案路徑
- 建立添加端口
docker service create --publish 暴露端口:容器端口 服務名
搭建Docker叢集(雙主雙從)
- 搭建Docker叢集[雙主雙從]
- manager節點和Leader節點是可以觸達的
- docker swarm init -advertise-addr [初始化叢集,節點為主節點發起叢集,公網/内網ip]
- docker swarm join-token worker/manager 擷取令牌,該令牌将未加入叢集的節點變成w/m
- docker node ls 檢視加入叢集的節點
- Raft協定
- 雙主雙從:假設一個節點挂了!其他節點是否可用
- Raft協定:保證大多數節點存活才能用!主節點至少要>3台!
- 實驗:
- 原本的雙主雙從配置如下分布
- 将swarm1停掉,在swarm4為上使用docker node ls檢視叢集狀态,會發現卡住[驗證雙主雙從的缺點]
- 啟動swarm1會發現原本為管理節點的swarm4變成主節點leader,現在啟動的swarm1變成管理節點Reachable
- 讓swarm3 leave叢集,節點清單不會删除會顯示
STATUS=Down
- 當swarm3重新加入叢集之後,原本的那條STATUS還是會存在,隻不過會有一個新的叢集id,可以用docker node rm id将其記錄删除
- Tips ⚠️ :如果是某一個節點短暫的時間因為故障停掉了,然後又回來了,那麼原本Down的那條記錄就會變回Ready,效果不是和leave一樣!切記!
---
- 将雙主雙從轉變成準守Raft協定,實驗如下:
- 在swarm2上使用docker swarm leave先讓其離開叢集
- 在有權限的manager或者leader上獲得manager的令牌docker swarm join-token manager
- 将令牌給swarm2,則swarm2變成Reachable節點
- 停掉swarm2,不會讓叢集停止,會顯示不可達。這就是保證高可用。遵守Raft協定
Swarm彈性服務
- Swarm建立彈性服務
- 彈性!擴縮容!叢集!
- 容器、副本、服務。
- docker-compose up !啟動單個項目,單機。
- 叢集swarm:docker service...
- 灰階釋出/金絲雀釋出
灰階釋出是指在黑與白之間,能夠平滑過渡的一種釋出方式。AB test就是一種灰階釋出方式,讓一部分使用者繼續用A,一部分使用者開始用B,如果使用者對B沒有什麼反對意見,那麼逐漸擴大範圍,把所有使用者都遷移到B上面來。灰階釋出可以保證整體系統的穩定,在初始灰階的時候就可以發現、調整問題,以保證其影響度,而我們平常所說的金絲雀部署也就是灰階釋出的一種方式
Tips ⚠️ :
docker run
啟動容器,不具備擴縮容的功能!
docker service
服務啟動,具有擴縮容的功能,滾動更新!
- 執行個體操作:
- 在基于Raft協定的基礎上操作。
-
建立nginx服務docker service create -p 5000:80 —name=menginx nginx
-
檢視menginx服務的中繼資料docker service inspect menginx
-
擴充多個副本數量,也就是啟動多個nginx服務docker service update —replicas 3 menginx
Tips ⚠️ :通路的時候位址是init初始化docker叢集時的位址,不管這台主機是否正常隻要有兩台台以上的MR存活,叢集就會向外提供服務。docker node ls檢視到某個ID後面有星号說明目前正處于該伺服器下。
-
scale的作用和update效果一樣的擴縮容docker service scale menginx=5
- 概念總結
- Swarm:叢集的管理和編号
- Node:就是一個docker節點
- Service:任務,可以管理節點或者工作節點來運作
- Task:容器内的指令
- 不變邏輯
- 調整service以什麼方式運作
#每個工作節點上運作一個任務
docker service --mode global
#按照一定規則在各個工作節點上運作指定個數的任務。
docker service --mode replicated
- 拓展:網絡模式 "PublishMode": "ingress"
- Swarm:
- Overlay:将幾台不同的伺服器上的,ip是不同的,使用Overlay将叢集變成一個整體,加入一個共同的網絡。
- "ingress":特殊的Overlay網絡!負載均衡!IPVS VIP