叢集模式主要概念
本主題介紹 Docker Engine 1.12 叢集管理和協調功能的一些獨特概念。
什麼是 Swarm?
Docker Engine 中內建的叢集管理和協調功能是使用 swarmkit 建置而成。Swarmkit 是一個獨立的專案,它實作了 Docker 的協調層,並直接在 Docker 內使用。
Swarm 由多個以 Swarm 模式執行的 Docker 主機組成,這些主機充當管理節點,用於管理成員資格和委派,以及執行 Swarm 服務 的工作節點。指定的 Docker 主機可以是管理節點、工作節點,或同時執行這兩個角色。建立服務時,您需要定義其最佳狀態 - 副本數量、可用的網路和儲存資源、服務向外界公開的埠等等。Docker 會努力維持該期望狀態。例如,如果工作節點變得不可用,Docker 會將該節點的任務排程到其他節點上。任務是一個正在執行的容器,它是 Swarm 服務的一部分,由 Swarm 管理節點管理,而不是獨立的容器。
Swarm 服務相較於獨立容器的一個主要優點是您可以修改服務的設定,包括其連線到的網路和磁碟區,而無需手動重新啟動服務。Docker 將更新設定,停止具有過時設定的服務任務,並建立與所需設定相符的新任務。
當 Docker 以 Swarm 模式執行時,您仍然可以在參與 Swarm 的任何 Docker 主機上執行獨立容器,以及 Swarm 服務。獨立容器和 Swarm 服務之間的一個主要區別是只有 Swarm 管理節點可以管理 Swarm,而獨立容器可以在任何守護行程式上啟動。Docker 守護行程式可以作為管理節點、工作節點或兩者同時參與 Swarm。
如同您可以使用 Docker Compose 來定義和執行容器一樣,您也可以定義和執行 Swarm 服務 堆疊。
繼續閱讀以了解與 Docker Swarm 服務相關的概念的詳細資訊,包括節點、服務、任務和負載平衡。
節點
節點是參與 Swarm 的 Docker 引擎執行個體。您也可以將其視為 Docker 節點。您可以在單一實體電腦或雲端伺服器上執行一個或多個節點,但生產環境 Swarm 部署通常包含分佈在多個實體和雲端機器上的 Docker 節點。
要將您的應用程式部署到 Swarm,您需要將服務定義提交到管理節點。管理節點會將稱為 任務 的工作單元分派給工作節點。
管理節點也執行維持 Swarm 期望狀態所需的協調和叢集管理功能。管理節點會選取單一領導者來執行協調任務。
工作節點接收並執行從管理節點分派的任務。預設情況下,管理節點也會以工作節點的身分執行服務,但您可以將它們設定為僅執行管理任務,並成為僅限管理節點。每個工作節點上都執行一個代理程式,並報告指派給它的任務。工作節點會將其指派任務的目前狀態通知管理節點,以便管理節點可以維持每個工作節點的期望狀態。
服務和任務
服務是在管理節點或工作節點上執行的任務的定義。它是 Swarm 系統的核心結構,也是使用者與 Swarm 互動的主要根源。
建立服務時,您需要指定要使用的容器映像檔以及在執行的容器內執行的命令。
在複本服務模型中,Swarm 管理節點會根據您在期望狀態中設定的規模,在節點之間分佈特定數量的複本任務。
對於全域服務,Swarm 會在叢集中每個可用的節點上為服務執行一個任務。
任務攜帶 Docker 容器和在容器內執行的命令。它是 Swarm 的原子排程單元。管理節點會根據服務規模中設定的複本數量將任務指派給工作節點。任務一旦指派給節點,就無法移動到另一個節點。它只能在指派的節點上執行或失敗。
負載平衡
叢集管理員使用入口負載平衡來公開您想要讓叢集外部可用的服務。叢集管理員可以自動分配服務的發佈埠,或者您可以為服務配置發佈埠。您可以指定任何未使用的埠。如果您沒有指定埠,叢集管理員會在 30000-32767 範圍內分配服務一個埠。
外部組件(例如雲端負載平衡器)可以在叢集中任何節點的發佈埠上存取服務,無論該節點目前是否正在執行服務的任務。叢集中所有節點都會將入口連線路由到正在執行的任務執行個體。
Swarm 模式具有一個內部 DNS 組件,可自動為叢集中每個服務分配一個 DNS 項目。叢集管理員使用內部負載平衡,根據服務的 DNS 名稱在叢集內的服務之間分配請求。
後續步驟
- 閱讀 Swarm 模式概觀。
- 從 Swarm 模式教學 開始。