天天看點

極簡入門Docker-Swarm叢集管理

極簡入門Docker-Swarm叢集管理

👨🏻‍🎓部落客介紹:大家好,我是芝士味的椒鹽,一名在校大學生,熱愛分享知識,很高興在這裡認識大家🌟

🌈擅長領域:Java、大資料、運維、電子

🙏🏻如果本文章各位小夥伴們有幫助的話,🍭關注+👍🏻點贊+🗣評論+📦收藏,相應的有空了我也會回訪,互助!!!

🤝另本人水準有限,旨在創作簡單易懂的文章,在文章描述時如有錯,懇請各位大佬指正,在此感謝!!!

@[TOC]

什麼是Swarm

  • Swarm是Docker公司推出的用來管理docker叢集的平台.
  • Swarm內建在Docker中無需安裝
  • 工作原理
極簡入門Docker-Swarm叢集管理

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台!
  • 實驗:
  • 原本的雙主雙從配置如下分布
極簡入門Docker-Swarm叢集管理
  • 将swarm1停掉,在swarm4為上使用docker node ls檢視叢集狀态,會發現卡住[驗證雙主雙從的缺點]
  • 啟動swarm1會發現原本為管理節點的swarm4變成主節點leader,現在啟動的swarm1變成管理節點Reachable
極簡入門Docker-Swarm叢集管理

- 讓swarm3 leave叢集,節點清單不會删除會顯示

STATUS=Down

極簡入門Docker-Swarm叢集管理
  • 當swarm3重新加入叢集之後,原本的那條STATUS還是會存在,隻不過會有一個新的叢集id,可以用docker node rm id将其記錄删除
極簡入門Docker-Swarm叢集管理
  • Tips ⚠️ :如果是某一個節點短暫的時間因為故障停掉了,然後又回來了,那麼原本Down的那條記錄就會變回Ready,效果不是和leave一樣!切記!

---

  • 将雙主雙從轉變成準守Raft協定,實驗如下:
  • 在swarm2上使用docker swarm leave先讓其離開叢集
  • 在有權限的manager或者leader上獲得manager的令牌docker swarm join-token manager
  • 将令牌給swarm2,則swarm2變成Reachable節點
極簡入門Docker-Swarm叢集管理
  • 停掉swarm2,不會讓叢集停止,會顯示不可達。這就是保證高可用。遵守Raft協定
極簡入門Docker-Swarm叢集管理

Swarm彈性服務

  • Swarm建立彈性服務
  • 彈性!擴縮容!叢集!
  • 容器、副本、服務。
  • docker-compose up !啟動單個項目,單機。
  • 叢集swarm:docker service...
  • 灰階釋出/金絲雀釋出
灰階釋出是指在黑與白之間,能夠平滑過渡的一種釋出方式。AB test就是一種灰階釋出方式,讓一部分使用者繼續用A,一部分使用者開始用B,如果使用者對B沒有什麼反對意見,那麼逐漸擴大範圍,把所有使用者都遷移到B上面來。灰階釋出可以保證整體系統的穩定,在初始灰階的時候就可以發現、調整問題,以保證其影響度,而我們平常所說的金絲雀部署也就是灰階釋出的一種方式
              

Tips ⚠️ :

docker run

啟動容器,不具備擴縮容的功能!

docker service

服務啟動,具有擴縮容的功能,滾動更新!

  • 執行個體操作:
  • 在基于Raft協定的基礎上操作。
  • docker service create -p 5000:80 —name=menginx nginx

    建立nginx服務
  • docker service inspect menginx

    檢視menginx服務的中繼資料
  • docker service update —replicas 3 menginx

    擴充多個副本數量,也就是啟動多個nginx服務

Tips ⚠️ :通路的時候位址是init初始化docker叢集時的位址,不管這台主機是否正常隻要有兩台台以上的MR存活,叢集就會向外提供服務。docker node ls檢視到某個ID後面有星号說明目前正處于該伺服器下。

  • docker service scale menginx=5

    scale的作用和update效果一樣的擴縮容
  • 概念總結
  • Swarm:叢集的管理和編号
  • Node:就是一個docker節點
  • Service:任務,可以管理節點或者工作節點來運作
  • Task:容器内的指令
  • 不變邏輯
  • 調整service以什麼方式運作
#每個工作節點上運作一個任務
docker service --mode global
#按照一定規則在各個工作節點上運作指定個數的任務。
docker service --mode replicated
                  
  • 拓展:網絡模式 "PublishMode": "ingress"
  • Swarm:
  • Overlay:将幾台不同的伺服器上的,ip是不同的,使用Overlay将叢集變成一個整體,加入一個共同的網絡。
  • "ingress":特殊的Overlay網絡!負載均衡!IPVS VIP