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

如何不使用--field-selector获取指定字段值的K8s自定义资源完整JSON对象

不使用--field-selector筛选自定义资源的方法

由于你的自定义资源未支持status.state作为字段选择器,可通过以下两种方式获取状态为failed的资源完整JSON:

方法一:结合jq工具过滤(推荐)

jq是专门处理JSON的工具,能直接在kubectl输出中筛选匹配条件的对象,同时保留完整JSON结构:

保留原输出的外层结构(包含apiVersion、kind、items数组)

kubectl get mycustomresource -A -o json | jq '{apiVersion: .apiVersion, kind: .kind, items: [.items[] | select(.status.state == "failed")]}'

仅输出匹配的资源对象列表(无外层结构)

如果只需要每个匹配资源的JSON内容,可简化命令:

kubectl get mycustomresource -A -o json | jq '.items[] | select(.status.state == "failed")'

方法二:无jq环境下的脚本筛选

如果系统未安装jq,可以先筛选出符合条件的资源名称和命名空间,再批量获取完整JSON:

  1. 先列出所有状态为failed的资源标识:
kubectl get mycustomresource -A -o custom-columns='NAME:.metadata.name,NAMESPACE:.metadata.namespace,STATE:.status.state' --no-headers | awk '$3 == "failed" {print $1, $2}'
  1. 编写bash脚本批量获取并合并为JSON数组:
#!/bin/bash
echo "["
kubectl get mycustomresource -A -o custom-columns='NAME:.metadata.name,NAMESPACE:.metadata.namespace,STATE:.status.state' --no-headers | while read name ns state; do
  if [ "$state" == "failed" ]; then
    kubectl get mycustomresource "$name" -n "$ns" -o json
    echo ","
  fi
done | sed '$ s/,$//'
echo "]"

将上述内容保存为get-failed-resources.sh,赋予执行权限后运行,即可得到包含所有匹配资源的JSON数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:05:03