3. 容量规划核心概念:垂直扩缩容、水平扩缩容、集群自动伸缩
在云原生环境中,容量规划的核心目标是在成本与性能之间找到动态平衡点。Kubernetes 提供了三种基础扩缩容手段:垂直扩缩容(VPA)、水平扩缩容(HPA)和集群自动伸缩(CA)。理解这三者的原理、适用场景及局限性,是制定联合治理策略的前提。
3.1 垂直扩缩容(Vertical Pod Autoscaler, VPA)
垂直扩缩容通过调整 Pod 的 Request 和 Limit(CPU / 内存)来匹配实际负载。VPA 会重启 Pod 以应用新的资源规格,因此对无状态或可优雅重启的工作负载更友好。
| 特性 | 说明 |
|---|---|
| 调整对象 | Pod 的 CPU / 内存 Request 和 Limit |
| 触发方式 | 基于历史指标或实时指标(推荐使用 Histogram 聚合) |
| Pod 行为 | 需要重建 Pod 才能生效(UpdateMode: Auto) |
| 典型场景 | 单体应用、有状态组件、无法水平扩展的中间件 |
| 风险 | 频繁重启导致抖动;与 HPA 共用 CPU 指标时可能冲突 |
最佳实践:VPA 推荐与 HPA 配合使用时,将 VPA 的
updateMode 设置为 Initial,仅在 Pod 创建时设置一次资源规格,避免运行时冲突。
3.2 水平扩缩容(Horizontal Pod Autoscaler, HPA)
水平扩缩容通过增加或减少 Pod 副本数来应对负载变化。HPA 基于 CPU 利用率、内存利用率或自定义指标(如 QPS、队列深度)驱动,是 Kubernetes 中最常用的弹性策略。
- 指标来源:Metrics Server(CPU/内存)、Prometheus Adapter(自定义指标)、External Metrics(外部系统指标)。
- 算法:期望副本数 = 当前副本数 × (当前指标值 / 目标指标值)。
- 冷却机制:
--horizontal-pod-autoscaler-downscale-stabilization防止频繁抖动。
关键参数:
targetAverageUtilization 通常设置为 50%–80%,避免过载同时保留突发缓冲。对于延迟敏感型服务,建议使用自定义指标(如 P99 延迟)替代 CPU 利用率。
3.3 集群自动伸缩(Cluster Autoscaler, CA)
集群自动伸缩在节点层面工作。当 Pod 因资源不足而处于 Pending 状态时,CA 会向云提供商 API 请求增加节点;当节点利用率持续低于阈值时,CA 会缩容空闲节点。
| 维度 | VPA | HPA | CA |
|---|---|---|---|
| 作用范围 | Pod 级别 | Pod 级别 | 节点级别 |
| 调整对象 | 资源规格(Request/Limit) | 副本数 | 节点数 |
| 生效速度 | 慢(需重建 Pod) | 快(秒级) | 慢(分钟级,依赖云 API) |
| 成本影响 | 间接(提高节点利用率) | 直接(Pod 数增加) | 直接(节点数增加) |
| 典型依赖 | VPA Recommender | Metrics Server / Prometheus | 云提供商(AWS/GCP/Azure) |
3.4 联合治理中的版本漂移风险
当 VPA、HPA 和 CA 同时运行时,版本漂移风险显著增加:
- VPA 与 HPA 冲突:VPA 调整 CPU Request 后,HPA 基于 CPU 利用率计算的副本数可能突变,导致过度扩缩或缩容。
- CA 与 HPA 时序错位:CA 启动新节点需要 2–5 分钟,期间 HPA 可能因资源不足而持续创建 Pod,造成副本数膨胀。
- 配置版本不一致:不同命名空间或集群的 VPA/HPA/CA 配置参数(如目标利用率、冷却时间)可能因手动修改而偏离基线。
治理要点:必须通过策略引擎(如 Kyverno)对 VPA/HPA/CA 的配置进行版本锁定和合规校验。例如:强制 HPA 的
targetCPUUtilizationPercentage 必须在 50–80 之间,禁止 VPA 的 updateMode: Auto 与 HPA 共用同一指标。
3.5 实践建议:三层弹性策略
- 第一层(秒级):HPA 基于自定义指标(如 QPS、延迟)快速调整副本数。
- 第二层(分钟级):VPA 在非高峰时段(如凌晨)调整 Pod 资源规格,避免影响在线业务。
- 第三层(分钟级):CA 作为兜底,仅在节点资源不足时扩容,并设置最大节点数上限控制成本。