如何使用 Kubernetes fieldSelector 查询 ownerReferences
How to use Kubernetes fieldSelector to query ownerReferences
Kubernetes GET API真的支持fieldSelector
parameter查询数组字段的值吗?
例如,我有一个像这样的 Pod:
apiGroup: v1
kind: Pod
metadata:
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: grpc-ping-r7f8r-deployment-54d688d777
uid: 262bab1a-1c79-11ea-8e23-42010a800016
我可以做类似的事情吗:
kubectl get pods --field-selector 'metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016'
此命令失败 (field label not supported: metadata.ownerReferences.uid
)。我怀疑原因是 ownerReferences
本身就是一个数组字段。我也试过,但没用:
metadata.ownerReferences[*].uid=
metadata.ownerReferences[].uid=
我可能会尝试 Kubernetes 的 client-go SDK API,但我怀疑出于同样的原因它不会工作。
有服务器端的查询方式吗?非常感谢。
--field-selector
仅适用于某些有限的字段。
其中包含:
"metadata.name",
"metadata.namespace",
"spec.nodeName",
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"status.phase",
"status.podIP",
"status.podIPs",
"status.nominatedNodeName"
但您可以使用 jq
执行任务。这是我用来列出所有就绪节点的命令。它演示了您正在查找的数组字段的用法。
$ kubectl get nodes -o json | jq -r '.items[] | select(.status.conditions[] | select(.type=="Ready" and .status=="True")) | .metadata.name '
master-0
node-1
node-3
我认为您真正想要做的是筛选器而不是查询。通过使用 JSONPath,您可以使用 ?()
.
过滤掉内容
例如,以下将起作用:
kubectl get pods -o jsonpath='{range .items[?(.metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016)]}{.metadata.name}{end}'
Kubernetes GET API真的支持fieldSelector
parameter查询数组字段的值吗?
例如,我有一个像这样的 Pod:
apiGroup: v1
kind: Pod
metadata:
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: grpc-ping-r7f8r-deployment-54d688d777
uid: 262bab1a-1c79-11ea-8e23-42010a800016
我可以做类似的事情吗:
kubectl get pods --field-selector 'metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016'
此命令失败 (field label not supported: metadata.ownerReferences.uid
)。我怀疑原因是 ownerReferences
本身就是一个数组字段。我也试过,但没用:
metadata.ownerReferences[*].uid=
metadata.ownerReferences[].uid=
我可能会尝试 Kubernetes 的 client-go SDK API,但我怀疑出于同样的原因它不会工作。
有服务器端的查询方式吗?非常感谢。
--field-selector
仅适用于某些有限的字段。
其中包含:
"metadata.name",
"metadata.namespace",
"spec.nodeName",
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"status.phase",
"status.podIP",
"status.podIPs",
"status.nominatedNodeName"
但您可以使用 jq
执行任务。这是我用来列出所有就绪节点的命令。它演示了您正在查找的数组字段的用法。
$ kubectl get nodes -o json | jq -r '.items[] | select(.status.conditions[] | select(.type=="Ready" and .status=="True")) | .metadata.name '
master-0
node-1
node-3
我认为您真正想要做的是筛选器而不是查询。通过使用 JSONPath,您可以使用 ?()
.
例如,以下将起作用:
kubectl get pods -o jsonpath='{range .items[?(.metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016)]}{.metadata.name}{end}'