How to use Kubernetes fieldSelector to query ownerReferences

12/22/2019

Does Kubernetes GET API actually support fieldSelector parameter to query values of array fields?

For example, I have a Pod like:

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

Can I do something like:

kubectl get pods --field-selector 'metadata.ownerReferences.uid=262bab1a-1c79-11ea-8e23-42010a800016'

This command fails (field label not supported: metadata.ownerReferences.uid). I suspect the reason is that ownerReferences is an array field itself. I've also tried, but didn't work:

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

I might try client-go SDK for Kubernetes API, but I suspect it won't work for the same reason.

Is there a server-side way to query by this? Thanks much.

-- AhmetB - Google
client-go
kubernetes
kubernetes-apiserver

1 Answer

12/22/2019

The --field-selector only works with some limited fields.

Which contains:

"metadata.name",
"metadata.namespace",
"spec.nodeName",
"spec.restartPolicy",
"spec.schedulerName",
"spec.serviceAccountName",
"status.phase",
"status.podIP",
"status.podIPs",
"status.nominatedNodeName"

But you can perform the task by using jq. Here is a command that I used for listing all ready nodes. It demonstrates the use of array fields that you're looking for.

$ 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
-- Kamol Hasan
Source: StackOverflow