3. 弹性伸缩原理:HPA、VPA、CA 核心机制
在 Kubernetes 多集群与混合云场景下,弹性伸缩是保障业务稳定性与资源利用率的核心手段。本章深入剖析三种主流伸缩机制:水平 Pod 自动伸缩(HPA)、垂直 Pod 自动伸缩(VPA) 与 集群自动伸缩(CA)。理解三者的原理、适用边界与协作方式,是构建大规模弹性架构的基础。
3.1 水平 Pod 自动伸缩(HPA)
HPA 通过动态调整工作负载的副本数(Replicas)来响应负载变化。其核心是 控制循环:Metrics Server 采集 Pod 资源指标,HPA Controller 计算期望副本数,再通过 Scale 子资源更新 Deployment/StatefulSet 的副本数。
核心公式:
desiredReplicas = ceil[currentReplicas × (currentMetricValue / desiredMetricValue)]
desiredReplicas = ceil[currentReplicas × (currentMetricValue / desiredMetricValue)]
| 维度 | 说明 |
|---|---|
| 指标来源 | CPU / 内存利用率(ResourceMetric)、自定义指标(Custom Metrics)、外部指标(External Metrics) |
| 采集周期 | 默认 15s,可通过 --horizontal-pod-autoscaler-sync-period 调整 |
| 冷却窗口 | 扩容默认 3min,缩容默认 5min,防止抖动 |
| 行为策略 | 支持 behavior 字段自定义扩容/缩容速率、稳定窗口、优先级 |
生产建议: 避免仅依赖 CPU 做 HPA 决策。建议结合业务自定义指标(如 QPS、请求延迟)或外部指标(如消息队列积压数),使伸缩更贴近真实负载。
3.2 垂直 Pod 自动伸缩(VPA)
VPA 自动调整 Pod 的 CPU 与内存 Request/Limit,解决资源静态配置导致的浪费或不足。VPA 不直接修改运行中 Pod,而是通过 Recommender 给出建议,再由 Updater 驱逐 Pod 触发重建,或由 Admission Controller 在新 Pod 创建时注入推荐值。
| 组件 | 职责 |
|---|---|
| Recommender | 基于历史指标与 OOM 事件,计算资源推荐值(下限、目标、上限) |
| Updater | 当推荐值与当前值偏差超过阈值时,驱逐 Pod 触发重建 |
| Admission Controller | 在 Pod 创建时自动注入推荐资源值 |
注意: VPA 与 HPA 在 CPU/内存维度上存在冲突。若同时使用,建议 HPA 基于自定义指标,VPA 仅管理 CPU/内存;或使用 VPA 的
mode: "Initial" 仅在 Pod 启动时设置一次。
3.3 集群自动伸缩(CA)
CA 负责在集群节点资源不足或过剩时,自动增减节点。它通过检查 Pending Pod(因资源不足无法调度)和 节点利用率 来触发伸缩。CA 通常对接云厂商 API(如 AWS Auto Scaling Group、GCP MIG、Azure VMSS)或自建裸金属节点池。
| 触发条件 | 动作 |
|---|---|
| 存在 Pending Pod(资源不足) | 扩容:创建新节点并加入集群 |
| 节点利用率持续低于阈值(如 50%) | 缩容:驱逐 Pod 后删除节点 |
| 节点不可用 / 被标记为不可调度 | 替换:删除异常节点并创建新节点 |
多集群 CA 关键考量:
- 节点组(Node Group):每个节点组需配置最小/最大节点数、实例类型、可用区。
- 扩缩容速率:避免同时创建过多节点导致 API 限流;缩容时需考虑 PodDisruptionBudget。
- 跨集群 CA:在联邦或 Global 控制面中,CA 需感知多个集群的节点池状态,实现全局调度。
3.4 三种伸缩机制对比与协作
| 维度 | HPA | VPA | CA |
|---|---|---|---|
| 伸缩对象 | Pod 副本数 | Pod 资源 Request/Limit | 集群节点数 |
| 响应速度 | 秒级~分钟级 | 分钟级(需重建 Pod) | 分钟级~十分钟级(节点创建) |
| 适用场景 | 无状态服务、突发流量 | 资源规格不合理、有状态服务 | 集群容量规划、节点池管理 |
| 依赖组件 | Metrics Server / 自定义指标 | VPA Recommender + Updater | 云厂商 API / 节点控制器 |
| 冲突风险 | 与 VPA 在 CPU/内存维度冲突 | 与 HPA 在 CPU/内存维度冲突 | 与 HPA/VPA 无直接冲突 |
最佳实践: 推荐采用 HPA + CA 组合作为默认弹性方案:HPA 快速调整 Pod 副本,CA 在节点资源不足时补充节点。VPA 建议用于有状态服务或资源规格不明确的 workload,并配合 HPA 使用自定义指标避免冲突。
3.5 多集群场景下的伸缩编排
在跨集群架构中,单一集群的 HPA/VPA/CA 无法感知全局负载。需要引入 全局弹性编排层,实现以下能力:
- 全局指标聚合:从多个集群的 Metrics Server 采集统一指标,判断整体负载水位。
- 跨集群副本调度:当某集群 HPA 达到上限时,将多余副本调度至其他集群。
- 节点池联动:CA 在多个集群间共享节点池,避免资源碎片。
- 策略化伸缩:支持基于成本、延迟、可用区优先级的伸缩决策。