华为云 CCE 弹性伸缩实战:HPA 和节点池为什么必须一起配?

举报
yd_291746328 发表于 2026/11/04 08:21:05 2026/11/04
【摘要】 上个月接手了一个运行在华为云 CCE 上的在线服务,业务有明显的峰谷特征:白天 QPS 是夜间的 5 倍,大促期间还会瞬间翻 10 倍。原来只配了 HPA(Pod 层自动扩缩容),结果流量高峰时 Pod 确实从 2 个扩到了 10 个,但一半的 Pod 一直 Pending,服务实际可用容量并没有增加。排查后发现,问题出在只做了 Pod 层弹性、没做节点层弹性。把节点池自动伸缩补齐之后,不仅...

上个月接手了一个运行在华为云 CCE 上的在线服务,业务有明显的峰谷特征:白天 QPS 是夜间的 5 倍,大促期间还会瞬间翻 10 倍。原来只配了 HPA(Pod 层自动扩缩容),结果流量高峰时 Pod 确实从 2 个扩到了 10 个,但一半的 Pod 一直 Pending,服务实际可用容量并没有增加。排查后发现,问题出在只做了 Pod 层弹性、没做节点层弹性。把节点池自动伸缩补齐之后,不仅扛住了大促,日常资源成本还降了约 25%。

一、 CCE 弹性的两个层次,缺一不可

CCE 的弹性分为** Pod 层和节点层**。Pod 层由 HorizontalPodAutoscaler 负责,根据 CPU、内存或自定义指标调整副本数;节点层由节点池的弹性伸缩策略负责,在 Pod 因资源不足进入 Pending 时增加节点,在节点长期空闲时缩容。两层必须同时配置,否则就会出现“Pod 扩了但没地方调度”或者“节点扩了但长期空跑”的局面。

我当时的配置就是一个典型反例:HPA 的 maxReplicas 设到了 20,但节点池没有开启弹性伸缩,集群固定只有 3 个 8C16G 的节点。Pod 扩容到第 6 个就开始 Pending,HPA 的指标继续上涨,副本数继续加,但新增的 Pod 全部卡在调度阶段。

二、 HPA 的关键参数:别贴着峰值设

HPA 配得好不好,直接决定弹性的“跟手程度”。几个踩坑后的取值经验:

CPU 目标利用率不要设 80% 以上。看起来“榨得更狠”,实际上一旦流量爬升速度快于扩容速度,CPU 会瞬间打满,用户请求直接超时。设 60%~70% 比较稳妥。

必须设置 stabilizationWindowSeconds。扩容窗口可以短(0~30 秒),但缩容窗口建议 300 秒以上,否则流量稍微抖一下副本数就反复增减,既浪费又影响稳定性。

minReplicas 和 maxReplicas 必须有硬边界,防止异常指标把副本数推到集群承载能力之外。

Pod 的 resources.requests 必须设置。HPA 计算 CPU 利用率是相对于 request 的,没设 request 时 HPA 会显示 unknown,根本不会工作。

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 2
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 65
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 0
    scaleDown:
      stabilizationWindowSeconds: 300
三、 节点池弹性伸缩的坑:不是开了就万事大吉

节点池开启弹性伸缩后,扩容时优先选择与现有节点同规格、同可用区的节点,减少调度碎片。缩容时集群会检查节点上的 Pod 能否被驱逐,带有本地存储、HostNetwork 或未被控制器管理的 Pod 会阻止缩容。我们有一批跑 DaemonSet 的日志采集 Pod 没有打容忍配置,导致节点池该缩的时候缩不下去,白白多付了半个月的节点费用。给这类工作负载打上固定标签、配置节点亲和,把它们集中在固定的“常驻节点池”里,弹性节点池只跑无状态业务,问题才解决。

四、 成本上的意外收获

把 HPA 和节点池伸缩都调好之后,除了稳定性提升,成本也降了不少。我们配合 CCE 的成本洞察,把无状态服务的 request 从“拍脑袋写的 2C4G”修正到了实际用量约 1.2 倍的水平,日常节点数从固定的 3 台降到了弹性区间 1~3 台,夜间低峰自动缩到 1 台。整体资源成本下降了约 25%。另外,离线批处理任务切换到竞价实例节点池后,那部分成本又降了超过 50%。

五、 总结

CCE 弹性伸缩的核心不是“把参数调大”,而是让 HPA 的指标、节点池的容量和业务的真实负载形成闭环。先确保 Pod 层 HPA 的 request 和阈值合理,再让节点池跟着 Pod 的 Pending 信号扩缩,最后用成本洞察持续修正 request/limit。两层都配齐,弹性才真正可用。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。