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

为何Kubernetes HPA测试中Pod CPU利用率会超100%达305%?

问题描述

我创建了一个简单的php-apache应用以测试Horizontal Pod Autoscaler(HPA)的工作机制。部署HPA时设置目标CPU利用率为50%,最小Pod数1,最大Pod数10,执行以下命令生成负载:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

2分钟后,我观察到目标CPU利用率超过了100%,具体HPA状态如下:

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m

请问CPU利用率为何能够超过100%?

原因解析

CPU利用率超过100%主要来自以下几个关键因素:

  • HPA的响应延迟:HPA不是实时处理负载变化的,它默认每15秒采集一次CPU指标,接着计算扩容需求,再触发Deployment的扩容流程。从指标采集到新Pod完全就绪需要一段周期,这段时间里现有Pod的CPU会持续被高负载压榨,利用率自然突破阈值。
  • 基于CPU请求的计算逻辑:HPA显示的CPU利用率是相对于Pod的**CPU请求(request)**计算的。如果你的php-apache Pod设置的CPU request数值较小,当实际负载远超这个请求值时,利用率就会超过100%。比如Pod的CPU request是0.1核,实际占用0.3核,利用率就是300%。
  • 负载增长远快于扩容速度:你使用的负载生成命令是每隔0.01秒发起一次请求,这种高频请求会瞬间把单个Pod的CPU占满。而新Pod启动需要经历拉取镜像、初始化容器等步骤,在新Pod就绪前,所有负载都压在现有Pod上,导致利用率飙升。
  • 指标采样的时间差:HPA计算的是一段时间内的平均CPU利用率,但如果负载突然暴增,实时的利用率会远高于平均计算值,你看到的305%就是最新采样的实时利用率,此时HPA还没完成扩容动作。

内容的提问来源于stack exchange,提问作者Rajeev KR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:15:42