1. Kubernetes 控制面概述:组件总览与高可用设计原则

Kubernetes 控制面(Control Plane)是集群的“大脑”,负责全局决策、状态管理、调度与响应集群事件。控制面组件的稳定性与性能直接决定集群的可用上限。本章从组件职责、交互关系和高可用设计三个维度展开,为后续选型与压测建立知识基础。

1.1 控制面组件总览

控制面由五个核心组件构成,它们各自独立运行,通过 API 进行松耦合通信。下表列出各组件的核心职责、运行方式与关键端口:

组件 核心职责 运行方式 默认端口
kube-apiserver 提供 RESTful API,是集群所有操作的入口;认证、授权、准入控制、数据持久化代理 无状态,水平扩展 6443 (HTTPS)
etcd 分布式键值存储,保存集群全部状态数据(配置、元数据、实际状态) 有状态,Raft 共识 2379 (客户端), 2380 (peer)
kube-scheduler 为新创建的 Pod 选择最合适的 Node;基于资源需求、约束、亲和性等策略 无状态,可多实例 10259
kube-controller-manager 运行各类控制器(Node、Replication、Endpoint、ServiceAccount 等),确保实际状态趋近期望状态 无状态,多实例需选主 10257
cloud-controller-manager 对接云厂商 API,管理负载均衡、存储卷、节点路由等云资源 无状态,多实例需选主 10258
关键认知: kube-apiserver 是唯一与 etcd 直接交互的组件。所有其他组件(scheduler、controller-manager、kubelet、kube-proxy)都通过 apiserver 读写集群状态,绝不直接访问 etcd。这一设计保证了数据访问的一致性与安全审计的集中性。

1.2 控制面组件交互关系

下图展示了控制面内部组件之间的通信路径与数据流向。箭头方向表示请求发起方向,实线为同步调用,虚线为异步 watch 机制。

Kubernetes 控制面组件交互关系图 控制面组件交互关系 etcd Raft 共识 · 有状态 kube-apiserver 认证 · 授权 · 准入 · 数据代理 读写请求 kube-scheduler Pod 调度决策 kube-controller-manager 控制器循环 · 选主 cloud-controller-manager 云资源管理 · 选主 Watch Pod / Node Watch 各类资源 Watch Node / Service 说明: 1. 所有组件仅与 kube-apiserver 通信,不直接访问 etcd。 2. scheduler 和 controller-manager 通过 Watch 机制监听资源变化,无需轮询。
交互要点:
  • kube-apiserver 是唯一与 etcd 交互的组件,所有状态读写必须经过 apiserver 的认证、授权与准入控制链。
  • kube-scheduler 通过 Watch 机制监听未调度的 Pod,结合调度算法选出最优 Node,然后将绑定结果写回 apiserver。
  • kube-controller-manager 内部包含 30+ 控制器,每个控制器独立 Watch 特定资源,通过调谐循环(Reconcile Loop)驱动实际状态向期望状态收敛。
  • cloud-controller-manager 仅在公有云或混合云场景部署,负责将集群资源与云厂商 API 同步。

1.3 控制面高可用设计原则

生产级集群必须消除控制面的单点故障。高可用设计遵循以下五项核心原则:

  1. 组件多副本部署:kube-apiserver 为无状态,可部署 2~3 个实例,前端通过负载均衡器分发请求。kube-scheduler 和 kube-controller-manager 虽为无状态,但同一时刻只有一个实例执行(通过选主机制),其余实例处于热备状态。
  2. etcd 集群化:etcd 使用 Raft 共识算法,推荐 3 或 5 节点奇数成员。集群容忍 (N-1)/2 个节点故障。etcd 节点应跨可用区部署,避免单机房故障导致集群不可用。
  3. 选主(Leader Election)机制:scheduler 和 controller-manager 通过创建 kube-system 命名空间下的 Endpoint 或 Lease 对象实现选主。持有锁的实例为 Leader,负责实际工作;其他实例监听锁变更,在 Leader 失联时快速接管。
  4. API 流量隔离与限流:kube-apiserver 应配置 --max-requests-inflight 和 --max-mutating-requests-inflight 限制并发请求量。关键场景下可将控制面组件与业务组件部署在独立节点池,通过 nodeSelector 或 taint/toleration 隔离资源争抢。
  5. 健康探测与自动恢复:每个控制面组件应配置 --healthz 和 --readyz 端口,由外部监控系统(如 Prometheus + Alertmanager)或容器编排平台(如 systemd、Kubernetes 自身)定期探测,异常时自动重启或替换。
常见误区: 仅部署多个 apiserver 实例但前端未配置负载均衡器(如 HAProxy、Nginx、云 LB),或 etcd 使用 2 节点(无法形成多数派),均无法实现真正的高可用。etcd 2 节点集群在任意单节点故障时即失去写入能力。

1.4 高可用架构参考

下图展示一个标准的三节点控制面高可用部署方案,包含负载均衡层、无状态组件层和有状态存储层:

三节点控制面高可用架构 三节点控制面高可用架构 负载均衡器 (HAProxy / 云 LB) kube-apiserver 节点 1 kube-apiserver 节点 2 kube-apiserver 节点 3 etcd 成员 1 etcd 成员 2 etcd 成员 3 高可用要点: • 每个控制面节点独立部署 apiserver + scheduler + controller-manager,etcd 跨节点部署。 • 任意单节点故障不影响集群读写;etcd 3 节点容忍 1 节点故障。

1.5 选型与性能验证前置思考

在进入后续章节的组件选型与压测之前,需要明确以下三个前提:

维度 关键问题 对性能的影响
etcd 存储 使用 SSD 还是 HDD?是否启用数据压缩?后端存储配额是否充足? 磁盘 IOPS 和延迟直接影响 apiserver 响应时间;etcd 写入延迟是集群性能的主要瓶颈之一。
apiserver 缓存 是否启用 --watch-cache?缓存大小如何设置? 缓存命中率决定读请求的 etcd 负载;缓存过小导致频繁回源,增大 etcd 压力。
调度吞吐 集群规模(Node/Pod 数量)?是否启用调度框架扩展点? 调度器每秒处理的 Pod 数量(Pods/sec)是衡量控制面性能的核心指标之一。
课程路线提示: 本章建立了控制面的整体认知。第 2~5 章将逐一深入每个组件的选型参数与性能基准测试方法,第 6 章开始进行全链路压测与瓶颈分析。