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 容量评估流程框架
下图展示了从数据采集到决策输出的完整容量评估流程:
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 的集群容量精细化管理。