如何不使用--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:
- 先列出所有状态为
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}'
- 编写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
相关产品推荐
相关产品推荐

