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

如何通过命令或编程方式获取Kubernetes Pod的每核CPU使用率?

获取Kubernetes Pod每核CPU使用情况的方法

命令行方式

1. 直接从容器内读取cgroup统计

Kubernetes通过cgroup管理容器CPU资源,每个容器的CPU使用统计存放在cgroup文件系统中,无需额外工具即可获取每核数据:

  • 查看Pod中容器的每核累计CPU使用时间(纳秒):
kubectl exec <你的Pod名称> -- cat /sys/fs/cgroup/cpuacct/cpuacct.usage_percpu

输出示例:1234567890 9876543210 4567890123 ...,每个数字对应一个CPU核心的累计使用时长。

  • 计算每核使用率:

    1. 先记录当前的cpuacct.usage_percpu值,等待N秒(比如10秒)
    2. 再次读取该文件的值,计算每个核心的差值
    3. 差值除以N*1e9(因为1秒=1e9纳秒),得到该核心的使用率(0~1之间,乘以100%为百分比)
  • 获取空闲时间:
    容器内的/proc/stat包含宿主机每个CPU核心的总时间和空闲时间(容器内的/proc/stat是宿主机的视图),执行:

kubectl exec <你的Pod名称> -- cat /proc/stat | grep '^cpu[0-9]'

输出示例:cpu0 12345 678 9012 3456789 ...,其中第四个数字是该核心的空闲时间(jiffies单位,1jiffy通常为1/100秒)。结合之前的Pod每核使用时间,可计算出Pod在该核心上的空闲占比。

2. 借助宿主机cgroup路径

如果有权限访问宿主机,可直接定位到Pod容器的cgroup目录:

  1. 获取Pod的UID和容器ID:
# 获取Pod UID
kubectl get pod <你的Pod名称> -o jsonpath='{.metadata.uid}'
# 获取容器ID(去掉前缀,比如docker://后的部分)
kubectl get pod <你的Pod名称> -o jsonpath='{.status.containerStatuses[0].containerID}' | sed 's/.*://'
  1. 进入对应cgroup目录(路径根据QoS等级可能不同,burstable/guaranteed/besteffort):
cd /sys/fs/cgroup/cpu,cpuacct/kubepods/<QoS等级>/<Pod-UID>/<容器ID>
  1. 查看cpuacct.usage_percpu和cpu.stat等文件获取详细统计。

编程方式

1. 基于cgroup文件的脚本实现(Python示例)

通过调用kubectl命令读取cgroup数据,定时采样计算每核使用率:

import subprocess
import time

POD_NAME = "你的Pod名称"

def get_percpu_usage():
    result = subprocess.run(
        ["kubectl", "exec", POD_NAME, "--", "cat", "/sys/fs/cgroup/cpuacct/cpuacct.usage_percpu"],
        capture_output=True, text=True
    )
    return list(map(int, result.stdout.strip().split()))

# 第一次采样
prev_usage = get_percpu_usage()
time.sleep(10)
# 第二次采样
curr_usage = get_percpu_usage()

# 计算每核使用率
for i, (prev, curr) in enumerate(zip(prev_usage, curr_usage)):
    diff = curr - prev
    usage_pct = (diff / (10 * 1e9)) * 100
    print(f"CPU核心{i}使用率: {usage_pct:.2f}%")

2. 利用Prometheus指标(编程查询)

如果集群部署了Prometheus,可通过查询container_cpu_usage_seconds_total指标获取每核数据:

  • 指标标签包含pod="<你的Pod名称>"和cpu="<核心编号>",该指标是累计值
  • 通过计算两次查询的差值除以时间间隔,得到每核的使用率(速率)
  • 示例PromQL查询:
rate(container_cpu_usage_seconds_total{pod="你的Pod名称"}[1m])

编程时可通过Prometheus HTTP API调用该查询,解析返回的JSON结果得到每核使用率。

3. Kubernetes Go客户端扩展

如果用Go开发,可直接访问节点上的cgroup文件(需要节点权限),或通过Kubernetes API获取Pod的容器ID后,构造cgroup路径读取统计数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:55