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)]
维度 说明
指标来源 CPU / 内存利用率(ResourceMetric)、自定义指标(Custom Metrics)、外部指标(External Metrics)
采集周期 默认 15s,可通过 --horizontal-pod-autoscaler-sync-period 调整
冷却窗口 扩容默认 3min,缩容默认 5min,防止抖动
行为策略 支持 behavior 字段自定义扩容/缩容速率、稳定窗口、优先级
生产建议: 避免仅依赖 CPU 做 HPA 决策。建议结合业务自定义指标(如 QPS、请求延迟)或外部指标(如消息队列积压数),使伸缩更贴近真实负载。
HPA 控制循环流程 Metrics Server HPA Controller Scale 子资源 Deployment / RS Pod 副本集 指标采集循环

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 启动时设置一次。
VPA 组件协作架构 Recommender Updater Admission Controller Metrics / OOM 事件 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 在多个集群间共享节点池,避免资源碎片。
  • 策略化伸缩:支持基于成本、延迟、可用区优先级的伸缩决策。