iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
1

鬆獅容器小白23連拍

https://ithelp.ithome.com.tw/upload/images/20201005/20025481aRmiquoULG.jpg

Docker Swarm新手入門

前面說了一堆Docker知識,一路走到了這,快要進入的一個與K8s批敵的重頭戲Docker Swarm,不過我們首先要了解Docker Swarm的意義?

我們有注意到,前面的所有示範的容器其實都只有跑在一台宿主機上面,那萬一主機掛了呢?
OK,我想你我大概也猜到了,沒錯,Docker Swarm 簡單說就是可以在多個宿主機上來管理容器的一種管理工具。

透過Docker Swarm,用戶可以非常容易的部署應用程式到任何一台宿主機上面,此外,假始其中一台宿主機離開人世了,也會立刻找一台最佳的宿主機上來啟動新的容器。

了解完定義後也要知道能實際帶給我們什麼樣的好處

Scaling自動擴展
Scaling本身概念簡單,也是雲端能帶來的其中一項價值所需,當回應需求服務數量或
連線流量過大時,能透過自動擴展機制一次啟動多個相應的服務同時處理需求回應與因應流量,直到流量或需求恢復正常,就可以透過縮容來減少服務數量,以節省主機成本。

Load Balacning負載平衡
當流量進到Docker Swarm的服務中,會透過像輪詢(Round Robin)的機制去把進來的流量做分流,也就是輪流把流量送到各服務去,舉例第一個進來給A容器,第二個進來給B容器,第三個進來再給A,以此類推...

Service Discovery服務探索
在Docker swarm中每個服務都可以定義自己服務獨有的DNS,而接下來就可以讓其他容器透過自訂的DNS來使用服務。

啟動Docker Swarm前需要了解的兩個重要角色

Manager管理叢集
目的就是負責來管理叢集的宿主機,並調用安排每個需要的服務容器應該要被放在哪一台來做啟動,當服務停止時也要負責啟動服務容器使之正常來做服務的提供。

Worker Nodes工作節點
Node翻譯成節點,簡單說就是代表一台台的宿主機,而執行Service的地方就是在任意的Node節點上。

示範Docker Swarm部署

示範主機是在Google Cloud上的兩台Ubuntu

  • docker1 version 19.03.6 IP:10.100.1.2
  • docker2 version 19.03.6 IP:10.100.1.3
    https://ithelp.ithome.com.tw/upload/images/20200929/20025481mnUxKZ6NF3.png

前置作業

測試雙方的標的主機網路要能互通

Google Cloud防火牆設置
Google Cloud預設自訂的網路對於防火牆是相對嚴謹反觀,Azure預設NSG還真是貼心,AWS / GCP真是"資安好管家"預設就是Deny,連隔壁鄰居都不放過。
https://ithelp.ithome.com.tw/upload/images/20200929/20025481oCRdhPVJvK.png

連線條件設置完成規則,原先就只有前兩個對外指定連接埠。
https://ithelp.ithome.com.tw/upload/images/20200929/20025481Ae3MRrhTB7.png

GCE套用防火牆規則
請給予剛剛您設置的標籤做套用,要打完整名稱並無下拉式防呆。
https://ithelp.ithome.com.tw/upload/images/20200929/20025481o1crfWKkSy.png

原來docker2是無法ping通docker1的,現在已經通訊無誤
https://ithelp.ithome.com.tw/upload/images/20200929/20025481lHsamZlI3Z.png

docker swarm init
docker swarm join --token SWMTKN-1-653ypvsqlm6ajsxd68r8aa3qm8sh9wmxy9kt8v79w2pilcprlm-b3btbgyverspxe99zrqbpxb0m 10.100.1.2:2377

補充:如之後忘記Token的話可在Leader Node輸入命令Token:docker swarm join-token -q worker

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
https://ithelp.ithome.com.tw/upload/images/20200929/20025481WZ8B3oqIUf.png

Docker2 透過上述的docker swarm join --token.....10.100.1.2:2377已經加入成功
https://ithelp.ithome.com.tw/upload/images/20200929/200254817vSFu95vI3.png

在docker1先做cluster初始化後就擁有管理服務角色,透過docker node ls指令已經可以看到有兩個Node並顯示狀況為Ready.https://ithelp.ithome.com.tw/upload/images/20200929/20025481pEtZ6BFpgH.png
https://ithelp.ithome.com.tw/upload/images/20200929/20025481eYFwatoeWL.png

而docker2除非被Promote成Master,故只能由docker1管理服務來做一系列的管理調用作業
https://ithelp.ithome.com.tw/upload/images/20200929/20025481L5mPN7bWp9.png

在Docker Swarm環境下,跑個Nginx容器吧!

docker service create --replicas 2 --name="gyhello" -p 8080:80 nginx
https://ithelp.ithome.com.tw/upload/images/20200929/20025481nZoj3NFJiC.png

docker service ps gyhello的確是兩組服務同時Ready。
https://ithelp.ithome.com.tw/upload/images/20200929/20025481VpV3mnRY5H.png

透過另一台docker2充當Client,嘗試訪問http://localhost:8080
https://ithelp.ithome.com.tw/upload/images/20200929/20025481Gp0iS10VJP.png

透過檢視服務紀錄包含服務本身的啟動狀態以及最後一行網站存取後回應200 OK

docker service logs gyhello -f

https://ithelp.ithome.com.tw/upload/images/20200929/20025481g2PGGj4wAA.png


上一篇
Day22. Docker 容器安全防堵對策
下一篇
Day24. Docker Swarm 透過 GCP Load Balancer實測
系列文
現代化小白也要嘗試的容器手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言