在 K8s 的世界中,所有元件都會活在 Cluster 這個單位裡。一個 Cluster 可以被分為 Control Plane 和 Data Plane 兩個部分,其中 Data Plane 包含多個 worker nodes,而所有服務和伺服器都以 pod 為單位在 node 內執行。K8s 作為一個容器編排工具,Cluster 中負責管理調度容器的角色是 Control Plane。為了保持高可用性,在正式環境中的 Control Plane 通常也會像 data plane 一樣,需要分散在多台電腦上執行,以確保高容錯和高可用性。
Control plane 通常會跑在指定機器上,不會讓其他容器使用該機器的資源。為實現高可用性(HA)以避免單點故障,可部署多個 control plane 實例。詳細的高可用性配置可參考 kubeadm 官方文件。以下是在 Control Plane 裡面運作的各種元件,以及他們的職責:
Helm chart 中的 CRD controller 不會由 Controller Manager 管理。Controller Manager 僅負責 K8s 原生的 controllerHelm chart 中的 CRD controller 不會由 Controller Manager 管理。Controller Manager 僅負責 K8s 原生的 controller
Controller 類型 | 運行位置 | 管理範圍 |
---|---|---|
Kubernetes 原生 controller | Control plane 裡的 kube-controller-manager |
管理原生 Kubernetes 資源 |
CRD controller | 工作負載中的 Pod (通常由 Helm 或 Operator 安裝) | 管理自定義資源(CR) 不受kube-controller-manager 直接管理 |
介紹完 control plane 之後,我們也會需要知道 data plane 的各個元件是如何與 control plane 這個「大腦」進行溝通,來達到實際的運作。因此我們會在每個 Node 身上使用到以下三種 component,來執行 control plane 這個大腦所發出的指令:
在自建 K8s 環境時,Control Plane 的高可用性與維運作業(如 etcd 備份、API Server 負載均衡、憑證更新、版本升級)都是極為複雜且高風險的工作。但在 EKS 上,這些 Control Plane 元件(API Server、etcd、Controller Manager、Scheduler)都由 AWS 全託管,並自動維護高可用性的設置,代表我們可以省去繁瑣的運維成本,專注於 Data Plane 與應用層(Pod、Service、Deployment 等)的設計與優化。這也是多數團隊選擇 EKS 的核心原因之一。為降低管理成本,專案採用 EKS 的託管 Control Plane(畢竟誰想自己管理這麼複雜的東西呢)。如需自行建立 Control Plane,可參考以下文章:
明天的文章,我們會繼續接著介紹 K8s 應用層的各種元件,像是 pod / deployment / service 等等。介紹完這些基本元件後,會再來介紹 K8s cluster 內的網路架構基礎。