You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes HPA CPU/内存扩缩容异常:阈值90%却在50%触发扩容求助

Kubernetes HPA 基于CPU/内存的默认扩缩容逻辑

核心计算逻辑

  • 指标采集与平均计算:HPA默认每15秒从Metrics Server拉取所有Ready状态Pod的CPU/内存使用率,计算目标Pod的平均使用率。
  • 副本数计算公式:
    期望副本数 = ceil(当前副本数 × (当前平均使用率 / 目标使用率))
    
    例:当前3个Pod,平均CPU使用率180%,目标阈值90%,则期望副本数为ceil(3 × (180/90))=6。
  • 多指标规则:同时配置CPU和内存指标时,HPA会分别计算每个指标对应的期望副本数,最终取最大值作为扩缩容目标。
  • 约束规则:
    • 副本数被限制在minReplicas和maxReplicas区间内;
    • 默认扩容冷却5分钟(扩容后5分钟内不再触发扩容),缩容冷却3分钟(缩容后3分钟内不再触发缩容);
    • 内置±10%容忍区间,当实际使用率与目标值的差距在该区间内,不会触发扩缩容。

问题排查方向

从你的配置和现象来看,Pod内存使用率50%就触发扩容、手动设副本1仍自动到4,大概率是以下原因:

  1. 资源请求配置不合理:
    HPA计算的“使用率”是Pod实际使用量 ÷ Pod的资源请求(request),而非资源限制(limit)。如果你的Pod内存request设置过低,比如实际用500Mi但request仅100Mi,那使用率就是500%,远超90%阈值,直接触发扩容。
    可通过以下命令查看Pod的request配置:
    kubectl get deployment my-app -n myservices -o yaml | grep -A 6 resources
    
  2. 多指标取最大值触发扩容:
    即使内存使用率只有50%,如果CPU的平均使用率已经远超90%,HPA会按照CPU计算的期望副本数执行扩容。
  3. Metrics Server数据异常:
    检查Metrics Server返回的指标是否准确,对比实际Pod使用量:
    kubectl top pods -n myservices
    kubectl describe hpa my-app -n myservices
    
    重点看HPA状态里的Metrics字段,确认当前采集到的CPU/内存使用率与实际是否一致。
  4. 其他控制器干扰:
    确认是否有其他控制器(比如自定义Operator、另一个HPA实例)在修改Deployment的副本数。

内容的提问来源于stack exchange,提问作者Vegada Nitun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:02:43