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

在CoreOS Prometheus Operator集群中获取HPA的currentCPUUtilizationPercentage指标

对应的Prometheus指标怎么找?

嘿,这个问题我碰到过,给你详细拆解一下!

首先得明确:kubectl里显示的currentCPUUtilizationPercentage并不是Prometheus里直接存在的单个指标——它是Kubernetes的HPA控制器基于Pod的CPU使用和请求指标计算出来的结果。在你的K8s 1.17.x集群+CoreOS Prometheus Operator环境下,需要通过两个核心指标组合计算得到这个值。

1. HPA CPU使用率的计算逻辑

HPA的CPU使用率公式是:

(所有就绪Pod的当前CPU使用率总和) / (所有就绪Pod的CPU请求总和) × 100

这个逻辑和kubectl展示的currentCPUUtilizationPercentage完全一致,只是kubectl直接展示了控制器计算好的结果,而Prometheus需要你用原始指标手动计算。

2. 对应的Prometheus指标及查询语句

你需要用到kube-state-metrics暴露的两个指标:

  • kube_pod_container_resource_usage_cpu_cores:容器的实时CPU使用量(单位:核)
  • kube_pod_container_resource_requests_cpu_cores:容器的CPU请求值(部署Pod时定义的资源请求)

针对你的php-apache HPA,对应的PromQL查询语句如下:

# 计算php-apache Deployment下所有就绪Pod的CPU使用率百分比
sum(rate(kube_pod_container_resource_usage_cpu_cores{label_app="php-apache", container="php-apache"}[1m]))
/
sum(kube_pod_container_resource_requests_cpu_cores{label_app="php-apache", container="php-apache"})
* 100

对查询语句的说明:

  • label_app="php-apache":匹配你的Deployment对应的Pod标签(如果你的标签不是app=php-apache,换成实际的标签键值对,比如label_name="php-apache")
  • container="php-apache":指定目标容器,避免sidecar容器(如日志、监控代理)的CPU数据干扰结果
  • rate(...[1m]):取1分钟内的CPU使用率速率,和HPA默认的指标计算窗口(1分钟)保持一致,确保结果和kubectl展示的数值对齐
  • sum():聚合所有符合条件的Pod的CPU数据,模拟HPA控制器的计算逻辑

3. 为什么找不到直接对应的指标?

在较新版本的kube-state-metrics(v1.8+)中,会直接暴露kube_hpa_status_current_cpu_utilization指标,这个指标就是HPA控制器计算好的CPU使用率百分比。但你的K8s 1.17.x集群搭配的CoreOS Prometheus Operator可能附带的kube-state-metrics版本较低,没有这个指标,所以只能通过原始指标组合计算。

验证小技巧

你可以把PromQL的计算结果和kubectl的输出对比,正常情况下两者的偏差会非常小(因为都是基于相同的数据源计算)。如果偏差较大,检查一下:

  • PromQL里的标签是否匹配正确(比如容器名、Pod标签)
  • 是否包含了未就绪的Pod(HPA只会计算就绪Pod,你可以在PromQL里加上kube_pod_status_ready="true"的条件过滤)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:07:45