Kubernetes HPA自动伸缩配置详解
在Kubernetes中,HPA(Horizontal Pod Autoscaler)是实现弹性伸缩的核心组件。它根据监控指标自动调整Pod副本数,在流量高峰时自动扩容,低谷时自动缩容,既保证服务质量又节省资源。本文详细介绍HPA的配置方法和最佳实践。
HPA基础配置
最简单的HPA配置:当CPU利用率超过50%时扩容,最低2个副本,最多10个副本。
通过kubectl命令创建:kubectl autoscale deployment myapp --cpu-percent=50 --min=2 --max=10
对应的YAML配置中,targetCPUUtilizationPercentage 是触发扩容的CPU利用率阈值。建议设置在50%-70%之间,太低会导致频繁伸缩(抖动),太高则响应不够及时。
自定义指标伸缩
仅靠CPU指标往往不够。比如一个消息消费服务,CPU利用率不高但队列积压严重。这时需要用自定义指标(Custom Metrics)驱动HPA。
在阿里云ACK中,可以结合ARMS Prometheus实现自定义指标HPA。比如根据RocketMQ的消费积压量来伸缩消费者Pod数量。配置PrometheusAdapter将自定义指标暴露给HPA。
伸缩行为配置
HPA的 behavior 字段可以精细控制伸缩行为:
- stabilizationWindowSeconds:缩容冷却窗口,默认300秒。防止指标短暂下降就立即缩容,建议设置为300-600秒。
- selectPolicy:多个指标时选择策略,Max(取最大值,最激进)或Min(取最小值,最保守)。
- scaleDown:缩容策略,可以限制每分钟最多缩容几个Pod,防止缩容过快导致服务不可用。
注意事项
HPA依赖Metrics Server,ACK默认已安装。确保Pod设置了resources.requests,否则HPA无法计算利用率。缩容时要配合PodDisruptionBudget(PDB),保证最少可用副本数。建议结合VPA(垂直自动伸缩)一起使用,同时优化副本数和单Pod资源。
