华为云CCE弹性伸缩HPA实战:从CPU指标到自动扩缩容
背景
线上业务的流量很少是一条直线:白天高峰、深夜低谷,促销活动一来瞬间翻几倍。如果靠人工盯着监控手动扩缩容,既不及时又容易出错。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 完全一致。
几个实战经验
- request 设置要合理:request 定得太低,轻微流量就会触发扩容;定得太高,扩容阈值难达到。建议先用
kubectl top pods观察一周的实际用量再定。 - 配合云监控 CES 告警:HPA 只管 Pod 数量,节点资源不足时 Pod 会 Pending。建议在 CES 上对集群节点 CPU/内存设置告警,必要时叠加节点池自动扩缩容。
- 缩容要保守:
stabilizationWindowSeconds给足,避免业务毛刺导致副本数来回跳动,影响长连接业务。 - 内存指标慎用:内存不像 CPU 那样可压缩,基于内存的 HPA 容易误判,优先用 CPU 或自定义业务指标(如 QPS)。
总结
在华为云 CCE 上落地 HPA 只需要三步:给工作负载设置合理的 resources requests、创建 HPA 策略、压测验证。配置一次之后,流量高峰自动扩容、低谷自动缩容,既保障了业务稳定性,又避免了为峰值预留大量闲置资源,降本效果明显。建议每个在线业务都评估接入。
- 点赞
- 收藏
- 关注作者
评论(0)