Kubernetes的Horizontal Pod Autoscaler(HPA)通过动态调整Pod副本数以适应工作负载需求。其核心机制如下:
-
指标采集:HPA依赖Metrics Server或自定义指标API(如Prometheus Adapter)实时获取资源指标(CPU、内存)或应用自定义指标(如QPS)。
-
控制循环:HPA控制器每15秒(默认)检查指标:
- 计算当前指标与目标值的偏差(例如CPU使用率超过设定的阈值)
- 根据公式
期望副本数 = ceil(当前副本数 × (当前指标值 / 目标值))
动态调整 - 若多指标存在,取计算结果的最大值
-
扩缩容策略:
- 支持扩缩容冷却时间(
--horizontal-pod-autoscaler-downscale-stabilization
)防止抖动 - 受限于用户定义的
minReplicas
和maxReplicas
范围
- 支持扩缩容冷却时间(
-
资源伸缩触发:
- 当指标持续超出阈值时触发扩容(默认延迟3分钟)
- 缩容需更保守的判断以避免服务中断
-
依赖组件:
- Metrics Server:核心指标采集
- Cluster Autoscaler:配合实现节点级自动扩容
- Custom Metrics Adapter:支持应用级指标
最佳实践包括:合理设置初始请求/限制、启用PodDisruptionBudget保障可用性、结合Vertical Pod Autoscaler(VPA)进行资源规格优化。HPA特别适用于无状态服务,对状态服务需谨慎评估存储状态的影响。