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

如何在kubectl resource-capacity输出中追加Namespace列

问题

我通过以下kubectl插件命令生成资源利用率输出:

./kubectl get namespaces | awk '{ print $1 }' | while read x; do ./kubectl resource-capacity --sort cpu.util --namespace $x --util --pod-count --pods; done

执行过程中出现权限错误:

Error getting Pod Metrics: pods.metrics.k8s.io is forbidden: User "u-567" cannot list resource "pods" in API group "metrics.k8s.io" in the namespace "NAME"
For this to work, metrics-server needs to be running in your cluster

同时得到了如下资源利用率输出:

NODE                                        POD                                                               CPU REQUESTS   CPU LIMITS      CPU UTIL    MEMORY REQUESTS   MEMORY LIMITS   MEMORY UTIL   POD COUNT
*                                           *                                                                 16550m (16%)   45060m (45%)    0Mi (0%)    38174Mi (9%)      33492Mi (8%)    0Mi (0%)      16/1540

ip-10-11-7-77.eu-west-1.compute.internal    *                                                                 6150m (76%)    14160m (177%)   139m (1%)   16784Mi (53%)     9632Mi (30%)    3126Mi (9%)   5/110
ip-10-11-7-77.eu-west-1.compute.internal    anomaly-detector-water-transformer-default-msxhv-deploymenrnv85   1035m (12%)    3040m (38%)     46m (0%)    2138Mi (6%)       2376Mi (7%)     300Mi (0%)
ip-10-11-7-77.eu-west-1.compute.internal    anomaly-detector-blades-transformer-default-gmvb2-deploymezzt5r   1035m (12%)    3040m (38%)     45m (0%)    2138Mi (6%)       2376Mi (7%)     292Mi (0%)
ip-10-11-7-77.eu-west-1.compute.internal    leadec-uk-inference-m1-predictor-default-zvxkb-deployment-8mscd   1035m (12%)    3040m (38%)     43m (0%)    2138Mi (6%)       2376Mi (7%)     277Mi (0%)
ip-10-11-7-77.eu-west-1.compute.internal    datascience-0                                                     2010m (25%)    2000m (25%)     8m (0%)     8232Mi (26%)      128Mi (0%)      2259Mi (7%)
ip-10-11-7-77.eu-west-1.compute.internal    anomaly-detector-leadec-predictor-default-tqjsg-deployment4bqdc   1035m (12%)    3040m (38%)     0Mi (0%)    2138Mi (6%)       2376Mi (7%)     0Mi (0%)

ip-10-11-7-134.eu-west-1.compute.internal   *                                                                 2070m (25%)    6080m (76%)     88m (1%)    4276Mi (13%)      4752Mi (15%)    597Mi (1%)    2/110
ip-10-11-7-134.eu-west-1.compute.internal   leadec-uk-inference-m1-transformer-default-84tk6-deploymeng4qjf   1035m (12%)    3040m (38%)     45m (0%)    2138Mi (6%)       2376Mi (7%)     298Mi (0%)
ip-10-11-7-134.eu-west-1.compute.internal   leadec-uk-synthetic-f65535db1d5e1078fca102b9506391d8-deplop74ww   1035m (12%)    3040m (38%)     44m (0%)    2138Mi (6%)       2376Mi (7%)     299Mi (0%)

ip-10-11-7-123.eu-west-1.compute.internal   *                                                                 1035m (12%)    3040m (38%)     55m (0%)    2138Mi (6%)       2376Mi (7%)     317Mi (1%)    1/110
ip-10-11-7-123.eu-west-1.compute.internal   leadec-uk-synthetic-58a5440150937e2198bfdd610a109b95-deplomfn97   1035m (12%)    3040m (38%)     55m (0%)    2138Mi (6%)       2376Mi (7%)     317Mi (1%)

ip-10-11-7-190.eu-west-1.compute.internal   *                                                                 1085m (13%)    3540m (44%)     50m (0%)    2148Mi (6%)       2476Mi (7%)     327Mi (1%)    2/110
ip-10-11-7-190.eu-west-1.compute.internal   leadec-uk-synthetic-year3-m4-predictor-default-ttdkp-deplovvtj6   1035m (12%)    3040m (38%)     47m (0%)    2138Mi (6%)       2376Mi (7%)     267Mi (0%)
ip-10-11-7-190.eu-west-1.compute.internal   random-experiment-random-568ff69c58-j7lx4                         50m (0%)       500m (6%)       3m (0%)     10Mi (0%)         100Mi (0%)      60Mi (0%)

ip-10-11-7-44.eu-west-1.compute.internal    *                                                                 1035m (12%)    3040m (38%)     46m (0%)    2138Mi (6%)       2376Mi (7%)     268Mi (0%)    1/110
ip-10-11-7-44.eu-west-1.compute.internal    leadec-uk-synthetic-year4-m4-predictor-default-7d9cb-deplofc5kf   1035m (12%)    3040m (38%)     46m (0%)    2138Mi (6%)       2376Mi (7%)     268Mi (0%)

ip-10-11-7-57.eu-west-1.compute.internal    *                                                                 1035m (12%)    3040m (38%)     46m (0%)    2138Mi (6%)       2376Mi (7%)     290Mi (0%)    1/110
ip-10-11-7-57.eu-west-1.compute.internal    anomaly-detector-leadec-transformer-default-7j42s-deploymeqhxtd   1035m (12%)    3040m (38%)     46m (0%)    2138Mi (6%)       2376Mi (7%)     290Mi (0%)

ip-10-11-7-113.eu-west-1.compute.internal   *                                                                 1035m (25%)    3040m (76%)     43m (1%)    2138Mi (13%)      2376Mi (15%)    298Mi (1%)    1/110
ip-10-11-7-113.eu-west-1.compute.internal   leadec-uk-synthetic-m4-transformer-default-9d4pz-deploymenhtfsv   1035m (25%)    3040m (76%)     43m (1%)    2138Mi (13%)      2376Mi (15%)    298Mi (1%)

ip-10-11-7-168.eu-west-1.compute.internal   *                                                                 0Mi (0%)       0Mi (0%)        0Mi (0%)    0Mi (0%)          0Mi (0%)        0Mi (0%)      0/110

我希望在上述输出的每一行中追加Namespace作为一列,请问该如何实现?

解决方案

修改原循环命令,在处理每个命名空间的输出时为每行添加当前命名空间列,同时确保表头只输出一次:

./kubectl get namespaces | awk '{ print $1 }' | while read x; do
  # 捕获命令输出,屏蔽权限错误
  output=$("./kubectl" resource-capacity --sort cpu.util --namespace "$x" --util --pod-count --pods 2>/dev/null)
  if [ -n "$output" ]; then
    # 首次输出时添加表头的NAMESPACE列
    if [ -z "$header_printed" ]; then
      echo "$output" | head -1 | awk '{print $0, "NAMESPACE"}'
      header_printed=1
      # 输出剩余行并追加命名空间
      echo "$output" | tail -n +2 | awk -v ns="$x" '{print $0, ns}'
    else
      # 非首次输出跳过表头,直接追加命名空间
      echo "$output" | tail -n +2 | awk -v ns="$x" '{print $0, ns}'
    fi
  fi
done

关键细节说明

  • 2>/dev/null:将权限错误信息重定向到空设备,避免干扰正常输出
  • header_printed变量:确保表头仅打印一次,不会重复出现
  • awk -v ns="$x":将当前循环的命名空间作为变量传递给awk,追加到每行末尾
  • 空输出判断:过滤没有权限或无资源的命名空间,避免产生无效内容

另外,针对权限错误,需要给用户u-567添加pods.metrics.k8s.io的list权限,可通过以下RBAC配置实现:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: metrics-reader
rules:
- apiGroups: ["metrics.k8s.io"]
  resources: ["pods"]
  verbs: ["list", "get", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: u-567-metrics-reader
subjects:
- kind: User
  name: u-567
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: metrics-reader
  apiGroup: rbac.authorization.k8s.io

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:35:22