kuberneteskubernetes-apiserverclient-go

How to use Kubernetes fieldSelector to query ownerReferences


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:

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.


Solution

  • 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