Kubernetes HPA内存使用率超阈值却不扩容问题咨询
Kubernetes HPA未触发扩容的原因解析
问题场景
你的HPA配置如下:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec: behavior: scaleUp: policies: - periodSeconds: 15 type: Pods value: 4 - periodSeconds: 15 type: Percent value: 100 selectPolicy: Max stabilizationWindowSeconds: 0 metrics: - resource: name: memory target: averageUtilization: 70 type: Utilization type: Resource minReplicas: 1 maxReplicas: 10
当单Pod内存使用率升至71%时,HPA未执行扩容,kubectl describe hpa输出the desired count is within the acceptable range;直到将averageUtilization下调至64%,HPA才触发扩容。
核心原因:HPA的容忍度机制
Kubernetes HPA默认内置容忍度(由horizontal-pod-autoscaler-tolerance参数控制,默认值为0.1,即10%),用于避免指标小幅波动引发的频繁扩缩容。
该容忍度会划定一个指标可接受范围:
- 上限:
目标指标值 × (1 + 容忍度) - 下限:
目标指标值 × (1 - 容忍度)
只要当前指标落在这个区间内,HPA就会判定当前副本数处于合理范围,不会触发扩缩容操作。
对应你的场景计算
目标内存使用率为70%,默认10%容忍度:
- 可接受上限:
70% × 1.1 = 77% - 可接受下限:
70% × 0.9 = 63%
当Pod内存使用率为71%时,处于70%~77%的可接受区间,因此HPA不会触发扩容。
当你将averageUtilization调整为64%时,可接受上限变为64% × 1.1 = 70.4%,此时71%的使用率超出了该上限,HPA才会计算出需要扩容至2个Pod并执行操作。
验证与调整方案
- 查看集群容忍度配置:检查kube-controller-manager的启动参数,确认
--horizontal-pod-autoscaler-tolerance的当前值。 - 调整容忍度:若需要更敏感的扩缩容,可以修改kube-controller-manager的该参数(例如设为0.05即5%),但需注意过小将导致Pod数量频繁波动。
内容的提问来源于stack exchange,提问作者Lahiru Chandima
相关产品推荐
相关产品推荐

