4. 集群核心组件资源配置:kube-apiserver 资源需求分析、etcd 性能与资源调优、kube-scheduler 与 kube-controller-manager 资源配置

Kubernetes 控制平面的四个核心组件——kube-apiserver、etcd、kube-scheduler 与 kube-controller-manager——构成了集群的“大脑”与“中枢神经”。它们的资源配置直接决定了集群的吞吐上限、故障恢复速度以及误差预算的消耗速率。本章将逐一分析每个组件的资源需求特征,并给出基于误差预算台账的调优策略。

4.1 kube-apiserver:集群的流量网关与状态存储前端

kube-apiserver 是所有控制平面操作的唯一入口。它的资源消耗主要由并发请求数、请求复杂度(List vs Watch vs Create)以及 etcd 的响应延迟决定。

4.1.1 资源需求分析

资源维度 关键影响因素 典型基线(500节点集群) 调优方向
CPU 请求认证、鉴权、准入控制链、请求序列化/反序列化 4-8 核(2-4 副本) 增加副本数分散读请求;启用 APF(API 优先级与公平性)
内存 Watch 缓存、对象反序列化后的内存占用、etcd 响应缓存 8-16 GiB 调整 --watch-cache-size;监控 etcd_request_duration_seconds
网络 客户端连接数、List/Watch 流量、Webhook 回调 1-2 Gbps 入口带宽 启用 TLS 会话复用;使用 HTTP/2 连接池
误差预算关联: kube-apiserver 的请求延迟直接计入控制平面 SLO。当 P99 请求延迟超过 1s 时,误差预算消耗速率将急剧上升。建议将 --max-requests-inflight 与 --max-mutating-requests-inflight 设置为集群节点数的 3-5 倍,并配合 APF 配置保障高优先级请求(如 kubelet 心跳、Pod 状态更新)不被低优先级 List 请求饿死。

4.1.2 关键配置参数

# kube-apiserver 核心资源配置示例(kube-apiserver.yaml)
spec:
  containers:
  - name: kube-apiserver
    resources:
      requests:
        cpu: "4"
        memory: "8Gi"
      limits:
        cpu: "8"
        memory: "16Gi"
    command:
    - kube-apiserver
    - --advertise-address=10.0.0.1
    - --allow-privileged=true
    - --max-requests-inflight=1500
    - --max-mutating-requests-inflight=750
    - --watch-cache-size=200
    - --enable-admission-plugins=NodeRestriction,PodNodeSelector
    - --request-timeout=60s
    - --v=2
调优建议: 在误差预算台账中记录 apiserver_request_duration_seconds_bucket 的 P99 与 P50 分位数。当 P99 持续超过 500ms 时,优先增加 kube-apiserver 副本数(水平扩展),而非盲目增加单副本的 CPU 限制。

4.2 etcd:集群状态的持久化基石

etcd 是 Kubernetes 的“单点真理源”。它的性能瓶颈通常出现在磁盘 I/O、网络延迟和内存使用上。etcd 的延迟直接决定了 kube-apiserver 的响应速度,进而影响整个控制平面的误差预算。

4.2.1 性能瓶颈与资源调优

资源维度 瓶颈特征 推荐配置 监控指标
磁盘 I/O WAL 写入延迟高、fsync 耗时 NVMe SSD,独立数据盘与 WAL 盘 etcd_disk_wal_fsync_duration_seconds
内存 缓存命中率低、DB 大小超过内存 8-16 GiB(DB 大小建议 < 2 GiB) etcd_mvcc_db_total_size_in_bytes
网络 Raft 心跳延迟、Leader 选举抖动 1-10 Gbps 低延迟网络 etcd_network_peer_round_trip_time_seconds
CPU Raft 协议处理、TLS 加密 4-8 核 etcd_server_leader_changes_seen_total

4.2.2 关键调优参数

# etcd 资源配置示例(etcd.yaml)
spec:
  containers:
  - name: etcd
    resources:
      requests:
        cpu: "4"
        memory: "8Gi"
      limits:
        cpu: "8"
        memory: "16Gi"
    command:
    - etcd
    - --data-dir=/var/lib/etcd
    - --wal-dir=/var/lib/etcd/wal
    - --quota-backend-bytes=8589934592  # 8 GiB
    - --auto-compaction-mode=revision
    - --auto-compaction-retention=1000
    - --max-request-bytes=1572864       # 1.5 MiB
    - --snapshot-count=100000
    - --heartbeat-interval=100
    - --election-timeout=1000
避坑指南: 不要将 etcd 数据盘与系统盘共用。etcd 对磁盘延迟极其敏感,即使 10ms 的 fsync 延迟也会导致 Leader 选举频繁触发,直接消耗集群误差预算。建议使用独立 NVMe 盘,并监控 etcd_disk_wal_fsync_duration_seconds 的 P99 是否超过 10ms。

4.2.3 etcd 性能与误差预算的关联

etcd 的延迟直接映射到 kube-apiserver 的请求延迟。以下 SVG 展示了 etcd 性能下降如何逐级放大误差预算消耗:

etcd 性能下降对误差预算的影响链路 etcd 性能下降 → 误差预算消耗链路 etcd 磁盘延迟升高 fsync > 20ms Raft 心跳超时 Leader 选举触发 API Server 请求超时 P99 > 5s 控制平面 SLO 违约 误差预算快速消耗 误差预算影响 一次 Leader 选举导致 5-10 秒的写入不可用

4.3 kube-scheduler:调度决策的实时性保障

kube-scheduler 负责将新创建的 Pod 分配到合适的节点。它的资源消耗主要来自调度队列管理、节点预选/优选算法以及抢占逻辑。

4.3.1 资源需求与调优

资源维度 消耗特征 推荐配置(500节点) 调优手段
CPU 调度算法计算(节点过滤、打分) 2-4 核 启用 PercentageOfNodesToScore 减少计算量
内存 调度队列、Pod 缓存、节点缓存 2-4 GiB 调整 --permit-wait-timeout 减少队列积压
调度延迟 从 Pod 创建到调度成功的时间 P99 < 1s 监控 scheduler_scheduling_algorithm_duration_seconds

4.3.2 关键配置参数

# kube-scheduler 资源配置示例(kube-scheduler.yaml)
spec:
  containers:
  - name: kube-scheduler
    resources:
      requests:
        cpu: "2"
        memory: "2Gi"
      limits:
        cpu: "4"
        memory: "4Gi"
    command:
    - kube-scheduler
    - --config=/etc/kubernetes/scheduler-config.yaml
    - --v=2
---
# scheduler-config.yaml 关键配置
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: default-scheduler
  percentageOfNodesToScore: 50
  podMaxBackoffSeconds: 10
  podInitialBackoffSeconds: 1
误差预算关联: 调度延迟直接影响 Pod 启动时间,进而影响应用部署的误差预算。当集群规模超过 1000 节点时,建议将 percentageOfNodesToScore 从默认的 50% 降低到 30%,以平衡调度精度与延迟。

4.4 kube-controller-manager:状态收敛的节拍器

kube-controller-manager 包含数十个控制器(Deployment、ReplicaSet、Node、Endpoint 等),它们通过 Informer 监听资源变化并执行调和循环。

4.4.1 资源需求与调优

资源维度 消耗特征 推荐配置(500节点) 调优手段
CPU 调和循环并发、List/Watch 处理 2-4 核 调整 --concurrent-deployment-syncs 等并发参数
内存 Informer 缓存、对象队列 4-8 GiB 监控 workqueue_depth 避免队列积压
调和延迟 从资源变更到控制器响应的时间 P99 < 5s 启用 --enable-taint-manager 优化节点状态处理

4.4.2 关键配置参数

# kube-controller-manager 资源配置示例(kube-controller-manager.yaml)
spec:
  containers:
  - name: kube-controller-manager
    resources:
      requests:
        cpu: "2"
        memory: "4Gi"
      limits:
        cpu: "4"
        memory: "8Gi"
    command:
    - kube-controller-manager
    - --concurrent-deployment-syncs=10
    - --concurrent-replicaset-syncs=10
    - --concurrent-service-syncs=5
    - --concurrent-endpoint-syncs=10
    - --node-monitor-period=5s
    - --node-monitor-grace-period=40s
    - --pod-eviction-timeout=5m
    - --v=2
避坑指南: 不要将所有控制器并发数设置得过高。例如 --concurrent-deployment-syncs 超过 20 时,可能导致 kube-apiserver 的 List 请求激增,反而增加控制平面延迟。建议从默认值开始,逐步调高并监控 workqueue_depth 与 apiserver_request_duration_seconds。

4.5 核心组件资源配置总结

以下 SVG 展示了四个核心组件的资源需求与误差预算的关联关系:

核心组件资源配置与误差预算关联图 核心组件资源配置与误差预算关联 kube-apiserver CPU: 4-8 核 内存: 8-16 GiB etcd CPU: 4-8 核 内存: 8-16 GiB kube-scheduler CPU: 2-4 核 内存: 2-4 GiB kube-controller-manager CPU: 2-4 核 内存: 4-8 GiB 控制平面误差预算 P99 延迟 < 1s | 可用性 99.95% 调优原则 每个组件的资源瓶颈都会直接或间接影响误差预算消耗速率。优先解决 etcd 磁盘 I/O 和 kube-apiserver 并发瓶颈。

4.6 基于误差预算的调优决策矩阵

当误差预算消耗异常时,可以通过以下矩阵快速定位核心组件的资源瓶颈:

误差预算消耗特征 可能瓶颈组件 优先检查指标 推荐操作
Pod 创建延迟高 kube-apiserver / kube-scheduler apiserver_request_duration_seconds / scheduler_scheduling_algorithm_duration_seconds 增加 apiserver 副本;降低 percentageOfNodesToScore
节点状态更新延迟 etcd / kube-controller-manager etcd_disk_wal_fsync_duration_seconds / workqueue_depth 优化 etcd 磁盘;增加 controller-manager 并发数
控制平面间歇性不可用 etcd(Leader 选举) etcd_server_leader_changes_seen_total 检查磁盘延迟;增加 election-timeout
API 响应超时 kube-apiserver(过载) apiserver_current_inflight_requests 启用 APF;增加 max-requests-inflight
核心结论: 在误差预算台账体系中,etcd 的磁盘延迟是“第一性原理”级别的指标。只要 etcd_disk_wal_fsync_duration_seconds 的 P99 超过 10ms,无论其他组件如何调优,控制平面的 SLO 都无法保障。建议将 etcd 磁盘延迟作为集群健康度的“红线指标”,纳入误差预算台账的自动告警规则。