如何在K8s集群中筛选请求GPU等特殊资源的Pod
定位K8s集群中请求
nvidia.com/gpu=1的Pod 需求
需要快速筛选出集群中请求nvidia.com/gpu=1的Pod,并输出如下格式的结果:
POD NAMESPACE GPU RESOURCE aab abc 1 aab abb 2
解决方案
方法:kubectl + jsonpath + awk组合命令
由于--field-selector仅支持筛选Pod元数据类字段(如命名空间、状态阶段),无法直接匹配容器资源请求中的自定义GPU资源,因此采用jsonpath导出目标字段 + awk过滤格式化的方式实现:
单容器Pod场景(或汇总Pod内所有容器GPU请求)
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.namespace}{"\t"}{.spec.containers[*].resources.requests.nvidia\.com/gpu}{"\n"}{end}' | awk 'BEGIN{print "POD\tNAMESPACE\tGPU RESOURCE"} $3 == 1 {print $1"\t"$2"\t"$3}'
多容器Pod场景(逐个容器输出)
如果需要单独展示Pod内每个容器的GPU请求(一个Pod多容器时会生成多行),使用以下命令:
kubectl get pods -A -o jsonpath='{range .items[*]}{range .spec.containers[*]}{.metadata.name}{"\t"}{.metadata.namespace}{"\t"}{.resources.requests.nvidia\.com/gpu}{"\n"}{end}{end}' | awk 'BEGIN{print "POD\tNAMESPACE\tGPU RESOURCE"} $3 == 1 {print $1"\t"$2"\t"$3}'
命令说明
- kubectl jsonpath部分:遍历所有Pod,提取Pod名称、所属命名空间、容器请求的GPU数量,用制表符分隔
- awk部分:先打印指定表头,再筛选第三列(GPU数量)等于1的行,按要求格式输出
内容的提问来源于stack exchange,提问作者Larry Cai
相关产品推荐
相关产品推荐

