3. 控制面蓝图架构:控制面组件与 Cluster API 的交互关系

Kubernetes 控制面由 etcd、kube-apiserver、kube-controller-manager 和 kube-scheduler 四个核心组件构成。在 Cluster API 的蓝图下,这些组件不仅管理集群内的工作负载,还通过声明式 API 驱动集群自身的生命周期。理解它们之间的交互关系,是优化查询性能与设计样本留存策略的前提。

3.1 控制面组件核心职责

下表总结了每个组件在标准 Kubernetes 控制面中的角色,以及它们在 Cluster API 场景下的扩展职责:

组件 标准职责 Cluster API 扩展职责
etcd 集群状态持久化存储,键值数据库 存储 Cluster、Machine、MachineSet 等 CRD 对象;承载集群拓扑快照
kube-apiserver REST API 入口,认证/授权/准入控制 暴露 Cluster API CRD 端点;处理集群创建/更新/删除请求;聚合指标端点
kube-controller-manager 运行内置控制器(Deployment、Node 等) 运行 Cluster API 控制器(ClusterController、MachineController、MachineSetController)
kube-scheduler 将 Pod 调度到合适的 Node 不直接参与集群生命周期管理;但影响工作负载集群内 Pod 的分布

3.2 交互关系总览

下图展示了控制面组件与 Cluster API 之间的核心交互流程。箭头方向代表数据流或控制流的方向:

控制面组件与 Cluster API 交互关系图 控制面组件与 Cluster API 交互关系 Kubernetes 控制面 etcd 状态持久化存储 kube-apiserver API 入口 / 准入控制 kube-controller-manager 内置控制器 + Cluster API 控制器 读写状态 Watch / Informer Cluster API 扩展层 Cluster API CRDs Cluster / Machine / MachineSet Cluster API 控制器 集群生命周期管理 基础设施 Provider AWS / Azure / vSphere 触发 reconcile 调用 Provider API CRD 注册与查询 控制器注入与运行 说明:实线箭头表示组件间直接通信;虚线箭头表示跨层扩展关系。Cluster API 控制器运行在 kube-controller-manager 进程中,通过 Informer 监听 CRD 变化。

3.3 核心交互流程详解

3.3.1 kube-apiserver 与 etcd:查询路径的起点与终点

所有 Cluster API 对象的读写请求都经过 kube-apiserver,它负责将数据持久化到 etcd。在查询优化场景中,以下环节直接影响延迟:

  • API 聚合层:Cluster API 的 CRD 通过 API 聚合注册到 apiserver,请求路由到扩展 API Server 或直接由 apiserver 处理。
  • Watch 机制:控制器通过 apiserver 的 Watch 接口监听资源变化,减少对 etcd 的轮询压力。
  • 缓存与索引:apiserver 内置的缓存(etcd 索引 + 内存缓存)决定了 List 操作的响应速度。

优化要点:在管理大规模集群(>1000 个 Machine 对象)时,apiserver 的 --max-requests-inflight 和 --max-mutating-requests-inflight 参数需要根据 Cluster API 的并发请求量进行调整。etcd 的 --quota-backend-bytes 应设置为足够容纳所有集群对象的快照数据。

3.3.2 kube-controller-manager 与 Cluster API 控制器:声明式循环

Cluster API 的核心逻辑运行在 kube-controller-manager 进程中,通过以下步骤实现集群生命周期管理:

  1. Informer 监听:Cluster API 控制器通过 apiserver 的 Watch 接口监听 Cluster、Machine、MachineSet 等 CRD 对象的变化。
  2. Reconcile 循环:当检测到对象变化(创建/更新/删除),控制器将对象放入工作队列,触发 reconcile 逻辑。
  3. 状态回写:控制器将操作结果(如 Machine 的 Phase、ProviderID)通过 apiserver 写回 etcd。
  4. 基础设施调用:控制器调用基础设施 Provider(如 AWS EC2 API)创建或删除虚拟机,并将结果同步到 CRD 状态字段。

样本留存关联:在 reconcile 过程中,控制器会频繁读取和写入 CRD 对象的状态字段。如果样本留存策略不合理(例如保留所有历史状态),会导致 etcd 存储膨胀,进而拖慢 List 和 Watch 操作的性能。

3.3.3 kube-scheduler 的间接影响

kube-scheduler 不直接参与 Cluster API 的集群管理,但它影响工作负载集群内的 Pod 调度。在控制面蓝图设计中,需要注意:

  • 当 Cluster API 创建的工作负载集群运行大量 Pod 时,scheduler 的调度决策会影响集群资源的利用率。
  • 如果控制面集群本身运行在受限资源环境中,scheduler 的调度延迟可能间接影响 Cluster API 控制器的响应速度(例如控制器 Pod 被调度到负载过高的节点)。

3.4 交互关系中的性能瓶颈矩阵

下表列出了各组件交互中常见的性能瓶颈及其对 Cluster API 查询优化的影响:

交互路径 瓶颈类型 对查询优化的影响 推荐优化策略
apiserver → etcd I/O 延迟 List 操作响应时间增加 启用 etcd 压缩、调整 --auto-compaction-retention
控制器 → apiserver API 限流 Reconcile 循环阻塞 调整 --kube-api-qps 和 --kube-api-burst
控制器 → Provider 网络延迟 集群创建/删除时间延长 使用异步 reconcile + 状态缓存
etcd 存储 空间膨胀 Watch 事件积压、查询超时 实施样本留存策略、定期清理历史状态

3.5 交互关系中的样本留存切入点

基于上述交互关系,样本留存策略应聚焦以下三个关键点:

  • etcd 层面的快照管理:定期对 etcd 进行快照,并设置合理的保留窗口(例如保留最近 7 天的快照),用于集群恢复和审计。
  • CRD 状态字段的裁剪:在 Cluster API 控制器中,避免在 CRD 状态字段中存储冗余的历史信息。例如,Machine 对象的 status.conditions 只保留最近 N 条记录。
  • Watch 事件的样本采集:在 apiserver 层面,通过审计日志或事件记录器采集关键操作样本(如 Cluster 创建、Machine 删除),用于后续的查询性能分析和故障排查。

注意:不要在控制面组件中直接修改 etcd 数据来实施样本留存。所有数据操作都应通过 apiserver 的 API 进行,以保持一致性并避免触发控制器的不期望 reconcile。