Skip to content

Cluster API — 系統架構

整體架構概覽

Cluster API 採用雙叢集架構:Management Cluster(管理叢集)負責運行 CAPI 控制器與 CRD,Workload Cluster(工作負載叢集)是被管理的目標叢集。

Management Cluster
┌─────────────────────────────────────────────┐
│  CAPI Core Controller Manager               │
│  ┌──────────────┐  ┌──────────────────────┐ │
│  │  Cluster     │  │  Machine             │ │
│  │  Controller  │  │  Controller          │ │
│  └──────────────┘  └──────────────────────┘ │
│  ┌──────────────┐  ┌──────────────────────┐ │
│  │  MachineSet  │  │  MachineDeployment   │ │
│  │  Controller  │  │  Controller          │ │
│  └──────────────┘  └──────────────────────┘ │
│                                             │
│  Infrastructure Provider (e.g. CAPV)        │
│  Bootstrap Provider (kubeadm)               │
│  ControlPlane Provider (KCP)                │
└─────────────────────────────────────────────┘
         │ reconcile → creates/manages

Workload Cluster (target Kubernetes cluster)

Management Cluster

Management Cluster 是 CAPI 的核心,本身是一個普通的 Kubernetes 叢集,其上安裝了:

  • CAPI Core CRDClusterMachineMachineSetMachineDeploymentClusterClass
  • CAPI Controller Manager:監聽並 reconcile 上述 CRD
  • Provider Controllers:各 Provider 自行部署的控制器

注意

Management Cluster 本身不是 Workload Cluster 的一部分。生產環境中應確保 Management Cluster 的高可用性。

Workload Cluster

Workload Cluster 是實際運行應用程式的 Kubernetes 叢集,其建立、升級、刪除均由 Management Cluster 上的控制器負責:

階段動作
建立CAPI 呼叫 Infrastructure Provider 佈建 VM;Bootstrap Provider 提供 cloud-init;ControlPlane Provider 初始化控制平面
運行Machine Controller 監控節點健康;MachineHealthCheck 觸發自動修復
升級MachineDeployment 滾動更新策略,依序替換節點
刪除先排空節點(drain),再呼叫 Infrastructure Provider 刪除資源

Provider 架構

CAPI 的擴展性透過 Provider 實現,每種 Provider 實作特定的合約介面(Contract)。

三大 Provider 類型

┌─────────────────────────────────────────────────────────┐
│                    CAPI Core                            │
│  Cluster CRD  →  spec.infrastructureRef                 │
│              →  spec.controlPlaneRef                    │
│  Machine CRD  →  spec.infrastructureRef                 │
│              →  spec.bootstrap.configRef                │
└──────────────────┬──────────────────────────────────────┘
                   │ references (cross-GVK)
    ┌──────────────┼──────────────────┐
    ▼              ▼                  ▼
InfraProvider  BootstrapProvider  ControlPlaneProvider
(e.g. AWSCluster) (KubeadmConfig) (KubeadmControlPlane)
Provider 類型負責範疇代表資源
InfrastructureVM/實體機佈建、網路、磁碟AWSCluster, VSphereCluster, Metal3Cluster
Bootstrap節點初始化腳本(cloud-init/ignition)KubeadmConfig, TalosConfig
ControlPlane控制平面節點生命週期、etcd 管理KubeadmControlPlane

控制器架構

CAPI Core Controller Manager 在啟動時會設定所有核心控制器:

go
// 檔案: main.go
controllerName = "cluster-api-controller-manager"

// 主要 Controller 清單(透過 setup 套件初始化)
// - Cluster Controller
// - Machine Controller
// - MachineSet Controller
// - MachineDeployment Controller
// - MachineHealthCheck Controller
// - ClusterClass Controller (需要 ClusterTopology feature gate)
// - ExtensionConfig Controller

控制器間的關係

控制器Watch 對象主要動作
ClusterReconcilerCluster協調 Infrastructure + ControlPlane
MachineReconcilerMachine協調 Bootstrap + Infrastructure
MachineSetReconcilerMachineSet管理 Machine 副本數
MachineDeploymentReconcilerMachineDeployment管理 MachineSet 滾動升級
MachineHealthCheckReconcilerMachineHealthCheck偵測並修復不健康節點
TopologyReconcilerCluster (with topology)根據 ClusterClass 協調整個拓撲

ClusterCache — 遠端連線管理

CAPI 需要對 Workload Cluster 進行操作(如 Node 管理),透過 ClusterCache 維護 Management Cluster 到各 Workload Cluster 的連線:

go
// 檔案: controllers/clustercache/clustercache.go
// ClusterCache 管理對 Workload Cluster 的 client 連線
// 使用 kubeconfig(存於 Management Cluster 的 Secret)建立連線
type ClusterCache interface {
    // GetClient 取得指定 Workload Cluster 的 client
    GetClient(ctx context.Context, cluster client.ObjectKey) (client.Client, error)
}

設計原則

CAPI 的每個 Provider 都遵循「合約(Contract)」設計,Core 控制器僅依賴合約中定義的欄位,而非 Provider 的具體實作,達到真正的解耦。

基於 Apache 2.0 授權