华为云CCE弹性伸缩HPA实战:从CPU指标到自动扩缩容

举报
yd_239575663 发表于 2026/11/05 11:37:30 2026/11/05
【摘要】 记录在华为云CCE上为业务配置HPA弹性伸缩的完整实战:从设置resources requests、创建HPA策略,到压测验证自动扩缩容,并分享控制台图形化配置、缩容冷却与CES告警联动等实战经验。

背景

线上业务的流量很少是一条直线:白天高峰、深夜低谷,促销活动一来瞬间翻几倍。如果靠人工盯着监控手动扩缩容,既不及时又容易出错。Kubernetes 原生的 HPA(Horizontal Pod Autoscaler,水平自动扩缩缩容)可以根据 CPU、内存等指标自动调整 Pod 副本数,在华为云 CCE(云容器引擎)上配置起来非常方便。本文记录一次完整的 HPA 实战过程。

前提准备

  • 已创建华为云 CCE 集群(Turbo 或标准集群均可),集群版本建议 1.23+;
  • 本地已安装 kubectl,并通过 CCE 控制台下载 kubeconfig 完成对接,执行 kubectl get nodes 能正常返回节点列表;
  • CCE 默认集成了 metrics-server,HPA 依赖它采集 Pod 资源指标,可通过 kubectl top pods 验证指标链路是否正常。

步骤一:部署一个示例应用

先部署一个简单的 Nginx 应用用于演示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hpa-demo
  template:
    metadata:
      labels:
        app: hpa-demo
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 200m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi

注意:resources.requests 必须填写,HPA 计算利用率的分母就是 request 值,不填会导致 HPA 无法工作。

kubectl apply -f hpa-demo.yaml

步骤二:创建 HPA 策略

可以直接用命令行创建:

kubectl autoscale deployment hpa-demo --cpu-percent=50 --min=2 --max=10

也可以用 YAML(autoscaling/v2 支持多指标,更推荐):

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-demo
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300

这里把 CPU 平均利用率目标定为 50%,副本数在 2~10 之间浮动,缩容冷却窗口 300 秒,避免指标抖动导致反复缩容。

步骤三:查看 HPA 状态

kubectl get hpa hpa-demo -w

正常时输出类似:

NAME       REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS
HPA-demo   Deployment/hpa-demo   3%/50%    2         10        2

TARGETS 显示当前利用率/目标利用率。

步骤四:压测验证扩缩容

启动一个压测 Pod 持续请求示例应用:

kubectl run -i --tty load-test --rm --image=busybox --restart=Never -- \
  /bin/sh -c "while true; do wget -q -O- http://hpa-demo; done"

等待一两分钟后,再次查看 HPA:

kubectl get hpa hpa-demo
kubectl get pods -l app=hpa-demo

可以看到 CPU 利用率上升超过 50%,副本数自动从 2 扩到 4、6 甚至更多。停止压测(Ctrl+C 退出,Pod 自动删除)约 5 分钟后,副本数会逐步缩回 2。

控制台方式

不想写 YAML,也可以在 CCE 控制台完成:进入集群 → 工作负载 → 找到 Deployment → 「弹性伸缩」→ 开启 HPA,图形化填写目标 CPU 利用率、最小/最大副本数即可,效果与 kubectl 完全一致。

几个实战经验

  1. request 设置要合理:request 定得太低,轻微流量就会触发扩容;定得太高,扩容阈值难达到。建议先用 kubectl top pods 观察一周的实际用量再定。
  2. 配合云监控 CES 告警:HPA 只管 Pod 数量,节点资源不足时 Pod 会 Pending。建议在 CES 上对集群节点 CPU/内存设置告警,必要时叠加节点池自动扩缩容。
  3. 缩容要保守:stabilizationWindowSeconds 给足,避免业务毛刺导致副本数来回跳动,影响长连接业务。
  4. 内存指标慎用:内存不像 CPU 那样可压缩,基于内存的 HPA 容易误判,优先用 CPU 或自定义业务指标(如 QPS)。

总结

在华为云 CCE 上落地 HPA 只需要三步:给工作负载设置合理的 resources requests、创建 HPA 策略、压测验证。配置一次之后,流量高峰自动扩容、低谷自动缩容,既保障了业务稳定性,又避免了为峰值预留大量闲置资源,降本效果明显。建议每个在线业务都评估接入。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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