如何使用 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 本身就是一个数组字段。我也试过,但没用:

我可能会尝试 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}'