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

如何在Pod内部获取CPU核心数及CPU请求/限制(无需kubectl)

问题1:如何在Pod内部获取CPU核心数?

你可以通过两种方式获取Pod内的CPU核心相关信息:

  • 获取容器可见的CPU核心数量:
    直接读取/proc/cpuinfo文件统计核心数,执行以下命令:

    grep -c processor /proc/cpuinfo
    

    这个结果对应Pod能访问的CPU核心数——如果Kubernetes为Pod配置了CPU绑定(cpuset),返回的就是分配给Pod的核心数;未绑定的话,返回的是节点的总CPU核心数。

  • 获取Kubernetes分配的CPU配额(核心数形式):
    这部分属于CPU请求/限制的范畴,具体方法参考问题2的解答。

问题2:无需使用kubectl,在Pod内部获取CPU请求与限制的方法?

有两种可靠的方法可以在Pod内部直接获取CPU请求和限制,无需依赖kubectl:

方法1:使用Kubernetes Downward API注入信息

Downward API可以将Pod的资源请求/限制注入到容器的环境变量或文件中,这是官方推荐的方式。

方式A:注入为环境变量

在Pod的YAML定义中添加环境变量配置,将CPU请求和限制注入:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: test-container
    image: nginx
    resources:
      requests:
        cpu: "0.5"
      limits:
        cpu: "1"
    env:
    - name: CPU_REQUEST
      valueFrom:
        resourceFieldRef:
          containerName: test-container
          resource: requests.cpu
    - name: CPU_LIMIT
      valueFrom:
        resourceFieldRef:
          containerName: test-container
          resource: limits.cpu

部署Pod后,在容器内直接读取环境变量即可:

echo $CPU_REQUEST  # 输出 0.5
echo $CPU_LIMIT    # 输出 1

方式B:挂载为文件

将资源信息挂载到容器内的文件中,适合需要以文件形式读取的场景:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  volumes:
  - name: resource-info
    downwardAPI:
      items:
      - path: cpu_request
        resourceFieldRef:
          containerName: test-container
          resource: requests.cpu
      - path: cpu_limit
        resourceFieldRef:
          containerName: test-container
          resource: limits.cpu
  containers:
  - name: test-container
    image: nginx
    resources:
      requests:
        cpu: "0.5"
      limits:
        cpu: "1"
    volumeMounts:
    - name: resource-info
      mountPath: /etc/resource-info

在容器内读取文件内容:

cat /etc/resource-info/cpu_request  # 输出 0.5
cat /etc/resource-info/cpu_limit    # 输出 1

方法2:读取Cgroup文件

如果无法修改Pod定义,可以通过读取Cgroup文件来计算CPU限制(注意Cgroup版本会影响文件路径):

Cgroup v1

CPU限制可以通过cpu.cfs_quota_us和cpu.cfs_period_us计算:

# 获取配额和周期值
QUOTA=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us)
PERIOD=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us)

# 计算CPU限制(核心数)
echo "scale=2; $QUOTA / $PERIOD" | bc

如果QUOTA值为-1,表示没有设置CPU限制。

CPU请求对应cpu.shares,但该值是相对权重(默认1024),需要结合节点上其他Pod的shares总和才能计算实际请求,因此准确性较差,不推荐单独使用。

Cgroup v2

路径有所不同,CPU限制的计算方式类似:

QUOTA=$(cat /sys/fs/cgroup/cpu.max | awk '{print $1}')
PERIOD=$(cat /sys/fs/cgroup/cpu.max | awk '{print $2}')

echo "scale=2; $QUOTA / $PERIOD" | bc

若QUOTA为max,表示无CPU限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:51