2. 集群容量评估基础

2.1 容量评估的核心目标

集群容量评估不是简单的“够不够用”判断,而是一个系统化的工程决策过程。其核心目标可以归纳为以下四个层次:

目标层次 核心问题 评估产出
可观测性 集群当前处于什么状态? 实时资源水位、利用率热力图
可预测性 未来 X 个月资源会耗尽吗? 趋势曲线、耗尽时间点预测
可规划性 需要扩容多少?何时扩? 扩容方案、预算估算、采购周期
可优化性 现有资源能否更高效利用? 碎片整理建议、调度策略调整
实践要点:容量评估的最终目标不是“精确预测”,而是“降低决策风险”。评估结果应直接指导扩容、缩容或调度策略调整,避免成为一份无人阅读的报表。

2.2 关键性能指标(KPI)体系

在基于 CAPI(Cluster API)的集群中,容量评估需要覆盖控制面、工作节点和集群整体三个维度。以下是指标体系的核心构成:

2.2.1 资源利用率指标

指标类别 具体指标 健康阈值参考 说明
CPU 集群 CPU 总利用率 < 70% 长期超过 70% 需关注
节点 CPU 利用率 P99 < 85% 热点节点识别
CPU 请求/限制比 1:1 ~ 1:5 超卖程度控制
内存 集群内存总利用率 < 75% 内存不足影响稳定性
节点内存利用率 P99 < 85% OOM 风险预警
内存页交换率 接近 0 交换过高说明内存不足
存储 节点本地磁盘利用率 < 80% 预留系统日志空间
PV 使用率 < 85% 有状态服务关键指标
网络 节点网络带宽利用率 < 60% 突发流量预留
Pod 间网络延迟 P99 < 5ms 跨节点通信质量

2.2.2 容量饱和度指标

  • 可调度 Pod 数量占比:当前已调度 Pod 数 / 集群最大 Pod 数(受节点 IP 和 CNI 限制)
  • 节点资源碎片率:无法被任何待调度 Pod 使用的剩余资源比例
  • 控制面 etcd 存储使用率:超过 8GB 需关注,超过 10GB 告警
  • API Server 请求 QPS 与延迟:P99 延迟超过 1s 表示控制面过载
常见陷阱:只关注 CPU 和内存利用率,忽略 etcd 存储和 API Server QPS。控制面容量不足会导致整个集群不可用,即使工作节点资源充裕。

2.3 容量评估的常见误区

以下是在实际容量评估工作中反复出现的典型错误,需要特别警惕:

误区编号 误区描述 正确做法
误区 1 只看平均值,忽略 P99/P95 峰值 同时监控平均值、P95、P99 和最大值,峰值才是扩容的触发条件
误区 2 用 request 值代替实际使用量 区分 request(调度保证)和 actual usage(实际消耗),两者差距可能很大
误区 3 只评估工作节点,忽略控制面 控制面(etcd、API Server、scheduler)是集群的瓶颈高发区
误区 4 一次性评估,不做持续跟踪 容量评估应形成周期性机制(如每周自动报告 + 每月人工评审)
误区 5 忽略资源碎片化 即使集群整体利用率低,碎片化也可能导致无法调度新 Pod
误区 6 扩容时只加节点,不优化调度 先优化调度策略和资源分配,再考虑扩容,避免资源浪费
案例警示:某团队监控显示集群 CPU 平均利用率仅 45%,但频繁出现 Pod 调度失败。排查发现:由于 Pod 资源请求设置过大,且节点间资源分布极不均匀,导致实际可调度容量远低于理论值。这就是“平均值陷阱”与“碎片化”叠加的典型后果。

2.4 容量评估流程框架

下图展示了从数据采集到决策输出的完整容量评估流程:

集群容量评估流程框架 1. 数据采集 Prometheus / Metrics API 2. 指标计算 利用率 / 饱和度 / 趋势 3. 阈值判定 健康 / 预警 / 告警 4. 分析诊断 瓶颈定位 / 碎片分析 5. 方案制定 扩容 / 缩容 / 调度优化 6. 执行与验证 CAPI 滚动更新 / 验证 持续反馈闭环 说明: 该流程强调“数据驱动 + 闭环验证”。阶段 3 的阈值判定结果直接影响阶段 4 的分析深度,阶段 6 的执行效果反馈回阶段 1,形成持续优化循环。

2.5 容量评估的量化模型

在实际工程中,我们使用以下量化模型来评估集群容量健康度:

# 集群容量健康度评分模型(简化版)
# 评分范围:0(危险)~ 100(健康)

def cluster_capacity_health_score(metrics):
    score = 100
    
    # 1. CPU 利用率扣分(权重 30%)
    cpu_util = metrics['cpu_util_p99']
    if cpu_util > 85:
        score -= 30 * (cpu_util - 85) / 15  # 85%→100% 线性扣分
    
    # 2. 内存利用率扣分(权重 25%)
    mem_util = metrics['mem_util_p99']
    if mem_util > 85:
        score -= 25 * (mem_util - 85) / 15
    
    # 3. 控制面 etcd 存储扣分(权重 20%)
    etcd_size = metrics['etcd_db_size_gb']
    if etcd_size > 8:
        score -= 20 * (etcd_size - 8) / 2  # 8GB→10GB 线性扣分
    
    # 4. 资源碎片率扣分(权重 15%)
    fragmentation = metrics['resource_fragmentation_rate']
    if fragmentation > 0.3:
        score -= 15 * (fragmentation - 0.3) / 0.4
    
    # 5. 网络延迟扣分(权重 10%)
    latency = metrics['network_latency_p99_ms']
    if latency > 5:
        score -= 10 * (latency - 5) / 10
    
    return max(0, min(100, score))
使用建议:该模型可作为自动化容量评估的起点。实际使用时,权重和阈值需要根据业务场景调整。例如,延迟敏感型业务应提高网络延迟的权重,批处理业务则可适当降低。

2.6 容量评估的持续化机制

容量评估不是一次性活动,需要建立持续化机制:

  • 实时监控层:Grafana 仪表盘展示核心 KPI,设置 P1/P2/P3 告警规则
  • 日评估层:自动生成容量日报,关注变化趋势和异常节点
  • 周评估层:人工评审容量报告,调整扩容计划和调度策略
  • 月评估层:全面容量复盘,优化评估模型和阈值

通过建立分层评估机制,既能快速响应突发容量事件,又能从长期趋势中识别系统性风险,真正实现基于 CAPI 的集群容量精细化管理。