如何使用 Kubernetes fieldSelector 查询 ownerReferences

Ahm*_*gle 4 kubernetes kubernetes-apiserver client-go

Kubernetes GET API 是否真的支持fieldSelector参数来查询数组字段的值?

例如,我有一个像这样的 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
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情:

kubectl get pods --field-selector 'metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016'
Run Code Online (Sandbox Code Playgroud)

此命令失败 ( field label not supported: metadata.ownerReferences.uid)。我怀疑原因是它ownerReferences本身是一个数组字段。我也试过,但没有奏效:

  • metadata.ownerReferences[*].uid=
  • metadata.ownerReferences[].uid=

我可能会尝试使用 client-go SDK for Kubernetes API,但我怀疑它不会出于同样的原因工作。

有没有服务器端的方式来查询?非常感谢。

Kam*_*san 18

--field-selector只适用于一些有限的领域。

其中包含:

"metadata.name",
"metadata.namespace",
"spec.nodeName",
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"status.phase",
"status.podIP",
"status.podIPs",
"status.nominatedNodeName"
Run Code Online (Sandbox Code Playgroud)

但是您可以使用jq. 这是我用来列出所有就绪节点的命令。它演示了您正在寻找的数组字段的使用。

"metadata.name",
"metadata.namespace",
"spec.nodeName",
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"status.phase",
"status.podIP",
"status.podIPs",
"status.nominatedNodeName"
Run Code Online (Sandbox Code Playgroud)