HPA(水平自动伸缩)
凌晨 2 点,你的电商网站突然遭遇流量高峰。手忙脚乱地登录服务器,扩容、再扩容...如果这一切能自动完成就好了。
HorizontalPodAutoscaler(HPA)就是来解决这个问题的。
HPA 是什么?
HPA 是 Kubernetes 的水平 Pod 自动伸缩控制器。它根据指定的指标(如 CPU 使用率、内存使用率)自动调整 Deployment 或 StatefulSet 的副本数。
创建 HPA
基本配置
hpa-basic.yaml
基于自定义指标
hpa-custom-metrics.yaml
基于外部指标
HPA 工作原理
指标收集
扩缩容算法
指标类型
Resource 指标
Pods 指标
Object 指标
External 指标
扩缩容策略
冷却时间
hpa-with-behavior.yaml
百分比 vs Pods
垂直伸缩 (VPA)
HPA 是水平伸缩(增加副本数),VPA 是垂直伸缩(增加单个 Pod 的资源):
详细内容请参考 VPA(垂直自动伸缩)。
常见问题
HPA 不生效
常见原因
- Metrics Server 未安装
- Deployment 没有设置 resource requests
- 副本数已达 maxReplicas
- 指标收集延迟
扩缩容震荡
如果系统频繁扩缩容:
- 增加
stabilizationWindowSeconds - 调整目标利用率
- 使用渐进式策略
最佳实践
1. 设置合理的资源请求
2. 设置合理的副本范围
3. 配置冷却时间
4. 使用自定义指标
延伸思考
HPA 让 Kubernetes 实现了真正的弹性伸缩:
- 响应式:根据实时负载自动调整
- 预测性:可以结合外部系统做预扩容
- 成本优化:高峰期自动扩容,低谷期自动缩容
但 HPA 也有局限:
- 指标单一:默认只支持 CPU/内存
- 冷启动延迟:新 Pod 启动需要时间
- 不感知业务:不理解请求类型的差异
对于更复杂的弹性伸缩场景,可以考虑 KEDA(基于事件驱动的自动伸缩)。
延伸阅读
- VPA(垂直自动伸缩):Pod 资源的垂直调整
- Metrics Server:指标收集组件
- Prometheus:自定义指标监控