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

如何基于NAME列合并两个kubectl命令的输出列数据

Kubernetes按Pod名称合并实时资源与资源限制输出方案

实现思路

两份输出的公共关联键为NAME列,通过Linux原生命令即可完成字段关联,无需安装额外工具:

  • 先分别过滤两份kubectl命令的输出,去掉冗余表头,提取需要的字段
  • 以NAME列为键做内连接,匹配两份数据的对应行
  • 格式化对齐输出最终结果

操作方法

单条命令直接输出(推荐)

直接通过进程传递两份命令的输出,不生成临时文件,执行后直接得到对齐的合并结果:

# 输出表头
echo -e "NAME\tCPU(cores)\tMEMORY(bytes)\tCPULIM\tMEMLIM"
# 关联两份数据并自动对齐列
join \
  <(kubectl top pods | tail -n +3 | awk '{print $1, $2, $3}' | sort) \
  <(kubectl get pods -o=custom-columns='NAME:metadata.name,CPULIM:spec.containers[*].resources.limits.cpu,MEMLIM:spec.containers[*].resources.limits.memory' | tail -n +3 | awk '{print $1, $2, $3}' | sort) \
  | column -t

执行后的输出格式和预期完全一致:

NAME                                                              CPU(cores)   MEMORY(bytes)   CPULIM   MEMLIM
am-cbkc-plugin-55b9df956f-sh82g                                   3m           923Mi           1        2Gi
amd-apigw-stack-6df456664f-sbdvc                                  3m           491Mi           550m     4Gi

临时文件分步实现(便于调试)

如果需要中途校验数据准确性,可以先把两份输出存为临时文件再做合并:

# 提取实时资源数据,跳过表头行
kubectl top pods | tail -n +3 | awk '{print $1, $2, $3}' | sort > top_res.tmp
# 提取资源限制数据,跳过表头行
kubectl get pods -o=custom-columns='NAME:metadata.name,CPULIM:spec.containers[*].resources.limits.cpu,MEMLIM:spec.containers[*].resources.limits.memory' | tail -n +3 | awk '{print $1, $2, $3}' | sort > limit_res.tmp

# 打印表头+合并输出
echo -e "NAME\tCPU(cores)\tMEMORY(bytes)\tCPULIM\tMEMLIM"
join top_res.tmp limit_res.tmp | column -t

# 清理临时文件
rm *.tmp

注意事项:

  • 命令中tail -n +3是跳过kubectl命令输出的前置空行和表头行,如果你的kubectl版本输出格式有差异,可以先单独执行kubectl命令数清楚表头占几行,调整tail的参数即可
  • 多容器Pod的CPULIM、MEMLIM字段会按容器顺序用逗号分隔多个值,属于正常输出
  • 如果Pod名称包含特殊空白字符,需要调整awk的字段截取规则,适配实际场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:48:18