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

如何用kubectl jsonpath按容器拆分Pod资源请求/限制输出?

解决Kubectl输出Pod容器资源请求/限制时每行对应单个容器的问题

你需要调整kubectl jsonpath的循环嵌套逻辑,把Pod的命名空间和名称放到容器的循环体内,这样每个容器都会单独生成一行包含所属Pod信息的记录。

修正后的命令

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{range .spec.containers[*]}{@.metadata.namespace}{","}{@.metadata.name}{","}{.name}{","}{@.resources.requests.cpu}{","}{@.resources.requests.memory}{","}{@.resources.limits.cpu}{","}{@.resources.limits.memory}{"\n"}{end}{end}'

命令说明

  • 外层{range .items[*]}遍历集群内所有Pod
  • 内层{range .spec.containers[*]}遍历当前Pod下的每个容器
  • 每次遍历容器时,先输出Pod的命名空间、Pod名称,再输出当前容器的名称和资源请求/限制参数,最后换行
  • 移除了原命令中多余的转义引号,直接用英文逗号分隔字段更简洁

示例输出

kube-system,metrics-server-5f8d84558d-g926z,metrics-server-vpa,5m,30Mi,100m,300Mi
kube-system,metrics-server-5f8d84558d-g926z,metrics-server,46m,63Mi,46m,63Mi

可选优化:处理空资源配置

如果存在容器未设置requests或limits的情况,可以用jsonpath默认值语法避免输出空值,比如:

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{range .spec.containers[*]}{@.metadata.namespace}{","}{@.metadata.name}{","}{.name}{","}{@.resources.requests.cpu:''}{","}{@.resources.requests.memory:''}{","}{@.resources.limits.cpu:''}{","}{@.resources.limits.memory:''}{"\n"}{end}{end}'

这里{@.resources.requests.cpu:''}表示如果该字段不存在,就输出空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:35:40