目前主要的容器管理技術是以Docker為主流,其中Google Kubernetes雖是最盛行的容器調度平台,但另一方面,Docker Swarm卻占有Docker原生與組態設定較為簡單的優勢,所以也受到不少使用者的支持。本文將介紹Docker Swarm容器調度管理平台的特色,並實際示範如何部署及設定。
在本文實作環境中,整個Docker Swarm叢集只有3台Docker Swarm節點主機,為了確保Docker Swarm叢集運作的穩定性,所以另外2台加入叢集的Docker Swarm節點主機也會擔任Manager的角色。
登入另外2台Docker Swarm節點主機(本文實作環境為SwarmHost02、SwarmHost03),執行加入Docker Swarm叢集且擔任Manager角色的指令,當Docker Swarm節點主機順利加入Docker Swarm叢集時,系統將顯示「This node joined a swarm as a manager」資訊。
此時可再次執行「docker node ls」指令,查看目前Docker Swarm叢集的節點主機資訊,將看到目前的Docker Swarm叢集中共有3台主機,至於HOSTNAME欄位前會顯示「*」,表示目前執行Docker指令的所在主機,如圖11所示。
|
▲圖11 將另外2台Docker Swarm節點主機加入Docker Swarm叢集中。 |
轉換Docker Swarm節點主機角色
在前述說明Docker Swarm容器叢集運作架構時,已經說明叢集中有2種角色,分別是「Manager」和「Worker」。當Docker Swarm節點主機加入Docker Swarm叢集後,倘若管理人員需要調整Docker Swarm節點主機角色,可以在擔任「Manager」角色的Docker Swarm節點主機上執行Docker指令「docker node promote/demote」,即可轉換Docker Swarm節點主機的角色。
如圖12所示,登入SwarmHost03主機執行「docker node ls」指令,將顯示目前3台Docker Swarm節點主機皆為Manager角色。接著執行「docker node demote SwarmHost02」指令,將SwarmHost02主機角色降級為Worker角色,然後執行「docker node promote SwarmHost02」指令,把SwarmHost02主機角色再次升級為Manager角色。
|
▲圖12 轉換Docker Swarm節點主機的叢集角色。 |
部署Docker Swarm叢集服務
至此,已經順利建置好Docker Swarm叢集運作環境,接下來便可以進行部署「服務」(Services)的動作。值得注意的是,在「單機」的Docker容器運作環境中,管理人員可以透過「docker run」指令來建立容器,然而在Docker Swarm叢集環境中則必須執行「docker service create」指令,建立的容器才會順利部署至Docker Swarm叢集高可用性環境中,如圖13所示。
|
▲圖13 Docker Swarm叢集部署容器服務運作流程示意圖。(圖片來源:Docker Documentation - How services work)
|
了解Docker Swarm叢集部署容器服務運作流程後,管理人員也必須了解Docker Swarm叢集運作的幾個技術名詞,包括「服務」(Services)、「任務」(Tasks)、「容器」(Containers)代表的意義為何。
當管理人員執行「docker service create」指令後,會在Docker Swarm叢集中建立「容器服務」,接著依據Docker指令所設定的「複本」(Replica)數量,決定要在Docker Swarm叢集中建立多少的「任務及容器」,如圖14所示。
|
▲圖14 Docker Swarm叢集服務、任務、容器運作示意圖。 |
在Docker Swarm叢集中任意一台Manager角色主機上,執行「docker service create --name=iis --replicas 3 --publish mode=host,published=80,target=80 --endpoint-mode dnsrr -d microsoft/iis」指令部署IIS容器服務,如圖15所示,此行Docker指令相關參數意義如下:
--name=iis:指定此Docker Swarm叢集服務名稱為iis。
--replicas 3:指定此Docker Swarm叢集服務任務數量為3,因此將會建立總數為3個的IIS容器,本文實作環境中共3台Docker Swarm節點主機,所以屆時每台主機上將會運作1個IIS容器。
--publish mode=host,published=80,target=80:指定運作後的IIS容器及Docker Swarm節點主機,互相對應的連接埠關係,本次實作採用主機的Port 80對應到IIS容器的Port 80。
--endpoint-mode dnsrr:採用DNS Round Robin負載平衡機制,處理IIS容器的網路流量。
-d microsoft/iis:下載microsoft/iis容器映像檔後,採用背景執行的方式運作IIS容器。
此時,在使用者端開啟瀏覽器後,不管是連接到哪一台SwarmHost主機的IP位址,都會重新導向至內部運作的IIS容器網頁服務當中。同時,由於IIS容器服務是部署至高可用性的Docker Swarm叢集中,因此當IIS容器因為任何因素而停止運作時(本次實作由管理人員手動執行指令直接停止其中一個IIS容器),那麼Docker Swarm叢集也會「自動」再次產生新的IIS容器,如圖16所示。
|
▲圖15 在Docker Swarm叢集中部署IIS容器服務。 |
|
▲圖16 Docker Swarm叢集高可用性機制,偵測到有IIS容器停止運作後自動產生新的IIS容器。 |