iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
DevOps

現代化小白也要嘗試的容器手札系列 第 24

Day24. Docker Swarm 透過 GCP Load Balancer實測

鬆獅容器小白24連拍

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

透過 GCP Load Balancer

Docker Swarm上篇已把服務搭建起來並透過指令快速指定Nginx來執行多容,這次在針對簡單實用功能進行示範:

  1. 擴展縮容
  2. 負載平衡實踐

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

replicas 代表目前要啟動2個Container來運行我的Nginx服務。
擴增透過docker service scale hello-a=5就可以把容器數量從2新增成5來應付更多的流量。
縮容只需要透過docker service scale gyhello=2來降低數量即可。
name 用來定義此服務的名稱,也可在之後當成DNS給其他服務做使用。
-p 8080:80則是把容器裡的80連接埠映射到宿主機上的8080連接埠。

docker service ps gyhello
docker service scale gyhello=5
docker service ps gyhello

https://ithelp.ithome.com.tw/upload/images/20201001/20025481hzzENGrlWI.png

docker service scale gyhello=2
docker service ps gyhello

https://ithelp.ithome.com.tw/upload/images/20201001/20025481IcB9pKa993.png

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

iptables -L -t nat

補充一下鳥哥教學

  • filter是流量進到宿主機本身來決定是否Accept or Drop or Forward的方式。
  • NAT流量本身跟此台宿主機並無直接關係,主要作為來源與目的IP & Port間轉至後端容器主機。
  • Mangle屬特殊表格,會去標記某些規格並改寫封包。

下面那條規則可以發現流量被導入到172.18.0.2:8080這邊
https://ithelp.ithome.com.tw/upload/images/20201001/20025481WU2UJYhhSk.png

ifconfig查看目前網路介面可以發現172.18.0.2與docker_gwbridge網路介面相關聯,透過Node建立Container後在與容器建立連線,故節點中涵蓋一組容器IP:172.18.0.2
https://ithelp.ithome.com.tw/upload/images/20201001/20025481zLBiGI0hyD.png

docker network inspect docker_gwbridge

這裡有一個被隱藏的Container叫ingress-sbox,看起來流量是先進入此Container後再把流量分配到真正的Service
https://ithelp.ithome.com.tw/upload/images/20201001/20025481ckNoadfDfc.png

自測一下Nginx服務是否正常
https://ithelp.ithome.com.tw/upload/images/20201001/20025481VZtU9jb6Lm.png

因為我的Docker是在GCE上建立,負載平衡服務就地取材Google Load Balancer做示範
選擇TCP類型負載平衡,因為我等等示範的Nginx網站是8080自訂連接埠
https://ithelp.ithome.com.tw/upload/images/20201001/20025481m0wV0J70Z6.png
測試無須高可用,選擇單一區域即可
https://ithelp.ithome.com.tw/upload/images/20201001/20025481cGmBViIwkG.png
後端集區我把本次的兩台Docker宿主機器拉進來關連到此負載平衡服務上
https://ithelp.ithome.com.tw/upload/images/20201001/20025481AWaKF8zeMi.png
因為是8080非原來綁定的防火牆開通規則中,都是網站服務所以我把8080綁定到原來80的網站進入規則中,最後只要回頭檢視GCE上的防火牆是否有更新即可
https://ithelp.ithome.com.tw/upload/images/20201001/20025481AzcOSRTBGW.png
測試後端的健康狀態,暫時初先偵錯後台有錯誤警示在本次測試先行忽略,並記錄此連線URL IP即可
https://ithelp.ithome.com.tw/upload/images/20201001/200254817iPCM2W7O2.png
透過外部 http://34.96.140.94:8080 並透過無痕瀏覽模擬不同的Session
https://ithelp.ithome.com.tw/upload/images/20201001/20025481rvdEr2lEYH.png
檢視docker Service Log的確就有看到分別不同的宿主機內的Docker來做回應以達到簡單的負載平衡的功能驗證作用
https://ithelp.ithome.com.tw/upload/images/20201001/20025481EM8NJoeq6m.png

最後補充一下Docker Swarm故障排除時能夠幫助到的Log紀錄檢視,可以參考Docker Swarm 進階實戰 (2)

  • docker service logs
  • Docker Events
  • Swarm Configs

上一篇
Day23. Docker Swarm 新手上路
下一篇
Day 25. Container Orchestration 編程了解K8s與架構初探
系列文
現代化小白也要嘗試的容器手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言