前面說了一堆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來使用服務。
Manager管理叢集
目的就是負責來管理叢集的宿主機,並調用安排每個需要的服務容器應該要被放在哪一台來做啟動,當服務停止時也要負責啟動服務容器使之正常來做服務的提供。
Worker Nodes工作節點
Node翻譯成節點,簡單說就是代表一台台的宿主機,而執行Service的地方就是在任意的Node節點上。
測試雙方的標的主機網路要能互通
Google Cloud防火牆設置
Google Cloud預設自訂的網路對於防火牆是相對嚴謹反觀,Azure預設NSG還真是貼心,AWS / GCP真是"資安好管家"預設就是Deny
,連隔壁鄰居都不放過。
連線條件設置完成規則,原先就只有前兩個對外指定連接埠。
GCE套用防火牆規則
請給予剛剛您設置的標籤做套用,要打完整名稱並無下拉式防呆。
原來docker2是無法ping通docker1的,現在已經通訊無誤
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.
Docker2 透過上述的docker swarm join --token.....10.100.1.2:2377
已經加入成功
在docker1先做cluster
初始化後就擁有管理服務角色,透過docker node ls指令已經可以看到有兩個Node並顯示狀況為Ready.
而docker2除非被Promote成Master
,故只能由docker1管理服務來做一系列的管理調用作業
docker service create --replicas 2 --name="gyhello" -p 8080:80 nginx
docker service ps gyhello
的確是兩組服務同時Ready。
透過另一台docker2充當Client,嘗試訪問http://localhost:8080
透過檢視服務紀錄包含服務本身的啟動狀態以及最後一行網站存取後回應200 OK
docker service logs gyhello -f