Swarm 模式關鍵概念

本主題介紹 Docker Engine 1.12 版本中叢集管理與編排功能特有的一些概念。

什麼是 Swarm?

嵌入在 Docker Engine 中的叢集管理與編排功能是使用 SwarmKit 所構建的。SwarmKit 是一個獨立的專案,它實作了 Docker 的編排層,並直接在 Docker 內部使用。

一個 Swarm 由多個執行於 Swarm 模式下的 Docker 主機組成。這些主機扮演「管理節點 (Managers)」來負責成員資格管理與委派,以及「工作節點 (Workers)」來執行 Swarm 服務。一台 Docker 主機可以同時擔任管理節點、工作節點,或同時兼任兩種角色。當您建立服務時,您可以定義其最佳狀態——例如副本數量、可用的網路與儲存資源、服務向外部公開的連接埠等。Docker 會致力於維護此目標狀態。例如,如果某個工作節點變得不可用,Docker 會將該節點的任務排程至其他節點上。「任務 (Task)」是一個正在執行的容器,它是 Swarm 服務的一部分,並由 Swarm 管理節點負責管理,這與獨立容器 (Standalone container) 不同。

Swarm 服務相較於獨立容器的一個關鍵優勢是,您可以修改服務的配置(包括它所連接的網路與儲存卷),而無需手動重新啟動服務。Docker 會更新配置,停止使用過時配置的服務任務,並建立符合所需配置的新任務。

當 Docker 執行於 Swarm 模式時,您仍然可以在參與 Swarm 的任何 Docker 主機上執行獨立容器以及 Swarm 服務。獨立容器與 Swarm 服務之間的一個關鍵差異在於,只有 Swarm 管理節點可以管理 Swarm,而獨立容器可以在任何 Docker 常駐程式 (Daemon) 上啟動。Docker 常駐程式可以作為管理節點、工作節點或兩者兼具的方式參與 Swarm。

就像您可以使用 Docker Compose 來定義並執行容器一樣,您也可以定義並執行 Swarm 服務堆疊 (Stacks)。

請繼續閱讀以了解有關 Docker Swarm 服務相關概念的詳細資訊,包括節點、服務、任務與負載平衡。

節點 (Nodes)

節點 (Node) 是參與 Swarm 的 Docker Engine 執行個體。您也可以將其視為 Docker 節點。您可以在單台實體電腦或雲端伺服器上執行一個或多個節點,但生產環境的 Swarm 部署通常包含分佈在多台實體與雲端機器上的 Docker 節點。

若要將應用程式部署到 Swarm,請向管理節點提交服務定義。管理節點會將稱為任務 (Tasks) 的工作單元分派給工作節點。

管理節點還會執行維護 Swarm 目標狀態所需的編排與叢集管理功能。管理節點會選出單一領導者來執行編排任務。

工作節點會接收並執行來自管理節點分派的任務。預設情況下,管理節點也會作為工作節點執行服務,但您可以將其設定為僅執行管理任務,成為「僅管理」節點。每個工作節點上都會執行一個代理程式,回報指派給它的任務。工作節點會將指派任務的目前狀態通知管理節點,以便管理節點能夠維護每個工作節點的目標狀態。

服務與任務 (Services and tasks)

服務 (Service) 是要在管理節點或工作節點上執行的任務定義。它是 Swarm 系統的核心結構,也是使用者與 Swarm 互動的主要根源。

當您建立服務時,您需要指定要使用的容器映像檔以及要在執行中容器內執行的命令。

在複製服務 (Replicated services) 模型中,Swarm 管理節點會根據您在目標狀態中設定的規模,將特定數量的副本任務分佈到各個節點。

對於全域服務 (Global services),Swarm 會在叢集中每個可用的節點上為該服務執行一個任務。

任務 (Task) 包含一個 Docker 容器以及要在該容器內執行的命令。它是 Swarm 的原子排程單位。管理節點會根據服務規模中設定的副本數量,將任務指派給工作節點。一旦任務被指派給某個節點,它就無法移動到另一個節點。它只能在被指派的節點上執行,否則將會失敗。

負載平衡 (Load balancing)

Swarm 管理節點使用入口負載平衡 (Ingress load balancing) 來公開您希望從外部存取 Swarm 的服務。Swarm 管理節點可以自動為服務指派一個公開連接埠,或者您可以為服務設定公開連接埠。您可以指定任何未使用的連接埠。如果您未指定連接埠,Swarm 管理節點會為該服務指派一個 30000-32767 範圍內的連接埠。

外部元件(例如雲端負載平衡器)可以在叢集中任何節點的公開連接埠上存取該服務,無論該節點當前是否正在執行該服務的任務。Swarm 中的所有節點都會將入口連接路由至執行中的任務執行個體。

Swarm 模式具有內部的 DNS 元件,會自動為 Swarm 中的每個服務指派一個 DNS 條目。Swarm 管理節點使用內部負載平衡,根據服務的 DNS 名稱在叢集內的服務之間分配請求。

下一步是什麼?

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.