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

如何通过脚本为Kubernetes集群中的有状态应用增加负载以触发HPA扩缩容

实现步骤与脚本示例

前置检查

先确认基础配置正常,避免负载注入后HPA不触发:

  • 执行kubectl get hpa <你的HPA名称> -n <命名空间>,确认TARGET列的阈值配置符合预期
  • 执行kubectl top pod -n <你的应用命名空间>,确认metrics-server可以正常返回Pod的CPU/内存指标

方案1:通用CPU负载注入脚本(无需暴露应用端口)

该方案不依赖应用类型,直接在Pod内部执行CPU密集型进程拉高利用率,适配所有有状态应用:

#!/bin/bash
# 替换为你的应用实际配置
STATEFULSET_NAME="your-statefulset-name"
NAMESPACE="your-namespace"

# 获取有状态集下所有Pod列表
POD_LIST=$(kubectl get pods -n $NAMESPACE -l app=$STATEFULSET_NAME -o jsonpath='{.items[*].metadata.name}')

for POD in $POD_LIST; do
  echo "正在为Pod $POD 注入CPU负载..."
  # 后台执行低优先级CPU密集任务,避免直接夯死业务进程
  kubectl exec -n $NAMESPACE $POD -- sh -c "nice -n 19 sha1sum /dev/zero &" > /dev/null 2>&1
done

echo "负载注入完成,1-2分钟后可查看HPA状态:kubectl get hpa -n $NAMESPACE"
echo "停止负载命令:kubectl exec -n $NAMESPACE -l app=$STATEFULSET_NAME -- pkill sha1sum"

注意:如果你的有状态集Pod的标签不是app: <statefulset名称>,请自行替换脚本中kubectl get pods的标签选择器参数;如果镜像内无sha1sum工具,可替换为md5sum /dev/zero或dd if=/dev/zero of=/dev/null,效果一致。

方案2:HTTP服务业务压测脚本(贴合真实场景)

如果你的有状态应用是HTTP/HTTPS服务,推荐用业务流量压测的方式触发扩容,更符合生产实际逻辑:

#!/bin/bash
# 替换为你的服务实际配置
SVC_URL="http://<服务ClusterIP/域名>/<压测接口路径>"
NAMESPACE="your-namespace"
# 压测配置:并发数、压测时长(秒)
CONCURRENCY="200"
DURATION="300"

# 集群内启动wrk压测Pod,无需本地安装压测工具
kubectl run -n $NAMESPACE wrk-press --image=williamyeh/wrk --restart=Never -- -t4 -c$CONCURRENCY -d${DURATION}s $SVC_URL

echo "压测已启动,查看实时压测日志:kubectl logs -n $NAMESPACE wrk-press -f"
echo "压测完成后清理压测Pod:kubectl delete pod -n $NAMESPACE wrk-press"

可根据HPA的当前CPU利用率调整并发数,直到利用率超过你设置的扩容阈值,正常1-3分钟即可触发扩容动作

扩缩容验证

执行kubectl get hpa -n <你的命名空间> -w可以实时监控HPA的指标变化、扩容/缩容事件,停止负载后等待HPA默认的5分钟冷却时间,即可观察到自动缩容动作。


内容的提问来源于stack exchange,提问作者divya krishana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:02