2. Kubernetes 控制平面基础:API Server、etcd、Scheduler、Controller Manager 的核心职责与资源消耗模型
Kubernetes 控制平面是集群的“大脑”,负责全局决策与状态管理。在生产环境中,控制平面组件的资源配额直接决定了集群的稳定性与性能上限。本章深入剖析四大核心组件的职责与资源消耗模型,为后续 Ingress 网关的性能调优奠定基础。
2.1 控制平面组件全景
控制平面由四个核心组件构成,它们协同工作,将用户声明式配置转化为实际运行的容器化应用。下图展示了组件间的交互关系与数据流向。
2.2 核心组件职责详解
2.2.1 kube-apiserver:控制平面的统一入口
API Server 是 Kubernetes 控制平面的前端,所有对集群状态的查询与变更都必须经过它。它负责认证、授权、准入控制、请求验证以及 REST API 的暴露。
- 认证与授权:支持 TLS 客户端证书、Bearer 、OpenID Connect 等多种认证方式,结合 RBAC 进行细粒度授权。
- 准入控制:通过 Admission Webhook 和内置准入插件(如 NamespaceLifecycle、ResourceQuota)在持久化前对请求进行修改或校验。
- 请求处理流程:认证 → 授权 → 准入控制 → 验证 → 持久化到 etcd → 返回响应。
2.2.2 etcd:集群状态的持久化存储
etcd 是一个强一致性的分布式键值存储,保存了集群的所有配置数据、状态信息以及资源对象。它是控制平面的“单点真相源”。
- 数据模型:以 key-value 形式存储,key 按资源类型和命名空间组织,value 为序列化的 JSON 或 Protobuf 对象。
- 一致性保证:基于 Raft 共识算法,确保所有节点数据一致,支持 Watch 机制实时推送变更。
- 性能瓶颈:磁盘 I/O 和网络延迟直接影响 API Server 的响应速度,频繁的 List-Watch 操作会放大 etcd 负载。
2.2.3 kube-scheduler:Pod 调度决策引擎
Scheduler 负责为新创建的 Pod 选择最合适的 Node。它通过过滤(Predicates)和打分(Priorities)两阶段算法完成调度决策。
- 过滤阶段:排除不满足 Pod 资源请求、节点亲和性、污点容忍等约束的节点。
- 打分阶段:对剩余节点按资源利用率、Pod 分布均衡性等策略进行评分,选择最优节点。
- 调度周期:每个 Pod 的调度过程独立,调度队列中的 Pod 按优先级顺序处理。
2.2.4 kube-controller-manager:状态调节器
Controller Manager 运行多个独立的控制器循环,每个控制器负责将当前状态调节至期望状态。常见的控制器包括 Deployment Controller、ReplicaSet Controller、Node Controller、Endpoint Controller 等。
- 控制循环模式:通过 Informer 监听 API Server 的资源变更事件,触发对应的调和逻辑。
- 并发模型:每个控制器使用独立的工作队列和 worker 池,默认并发数为 5~10,可根据负载调整。
- 典型控制器:Deployment Controller 管理副本数滚动更新,Node Controller 监控节点心跳并驱逐异常节点。
2.3 资源消耗模型与关键指标
控制平面组件的资源消耗并非线性,而是与集群规模、API 请求频率、资源对象数量强相关。下表总结了各组件的主要资源消耗特征。
| 组件 | CPU 消耗特征 | 内存消耗特征 | 关键瓶颈指标 |
|---|---|---|---|
| kube-apiserver | 请求处理、TLS 加解密、JSON 序列化/反序列化 | 缓存所有资源对象的 Watch 连接状态 | QPS、请求延迟 P99、etcd 响应时间 |
| etcd | Raft 日志复制、MVCC 事务处理 | 存储所有资源对象数据(含历史版本) | 磁盘 fsync 延迟、DB 大小、Watch 连接数 |
| kube-scheduler | 调度算法计算(过滤+打分) | 缓存集群节点信息和 Pod 调度队列 | 调度吞吐量(Pod/sec)、调度延迟 |
| kube-controller-manager | 控制器调和循环、Informer 事件处理 | 缓存资源对象的 Informer 本地存储 | 工作队列深度、调和循环执行时间 |
2.4 资源配额模型与调优方向
在生产环境中,控制平面组件通常以静态 Pod 或 DaemonSet 形式运行在 Master 节点上。资源配额设置不当会导致集群响应变慢、调度延迟增加甚至控制平面不可用。
推荐资源配额基线(中等规模集群,100~500 Node):
- kube-apiserver:CPU 4~8 核,内存 8~16 GB
- etcd:CPU 2~4 核,内存 8~16 GB(建议使用本地 SSD)
- kube-scheduler:CPU 1~2 核,内存 2~4 GB
- kube-controller-manager:CPU 1~2 核,内存 2~4 GB
调优方向应聚焦于以下三点:
- API Server 缓存优化:增大
--cache-size参数,减少对 etcd 的重复查询。 - etcd 性能调优:使用高性能 SSD、调整
--snapshot-count和--heartbeat-interval参数。 - Scheduler 并发提升:增加
--kube-api-qps和--kube-api-burst参数,提高调度吞吐量。
2.5 组件间依赖与故障隔离
控制平面组件之间存在明确的依赖关系,理解这些依赖有助于设计高可用架构和故障隔离策略。
最佳实践:在生产环境中,建议将 etcd 部署在独立的专用节点上,避免与其他控制平面组件争抢磁盘 I/O 和网络带宽。API Server 应至少部署 2 个实例,通过负载均衡器分发请求,实现高可用。
2.6 性能监控关键指标
实时监控控制平面组件的性能指标是调优的基础。以下指标应纳入监控系统,并设置告警阈值。
| 组件 | 关键指标 | 告警阈值建议 | 说明 |
|---|---|---|---|
| kube-apiserver | apiserver_request_duration_seconds{quantile="0.99"} | > 1s | P99 请求延迟超过 1 秒表示性能瓶颈 |
| etcd | etcd_disk_wal_fsync_duration_seconds{quantile="0.99"} | > 10ms | 磁盘 fsync 延迟过高影响写入性能 |
| kube-scheduler | scheduler_e2e_scheduling_duration_seconds{quantile="0.99"} | > 5s | 端到端调度延迟超过 5 秒需排查 |
| kube-controller-manager | workqueue_depth{name="*"} | > 100 | 工作队列深度持续增长表明控制器处理能力不足 |
注意:控制平面组件的资源消耗与集群规模呈非线性关系。当集群节点数超过 500 时,建议对 API Server 和 etcd 进行专项性能压测,并考虑启用 API 优先级和公平性(APF)特性来保障关键请求的响应质量。