Field selectors let you select Kubernetes resources based on the value of one or more resource fields. Here are some example field selector queries:
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
This kubectl
command selects all Pods for which the value of the status.phase
field is Running
:
$ kubectl get pods --field-selector status.phase=Running
Note:Field selectors are essentially resource filters. By default, no selectors/filters are applied, meaning that all resources of the specified type are selected. This makes the following
kubectl
queries equivalent:$ kubectl get pods $ kubectl get pods --field-selector ""
Supported field selectors vary by Kubernetes resource type. All resource types support the metadata.name
and metadata.namespace
fields. Using unsupported field selectors produces an error. For example:
$ kubectl get ingress --field-selector foo.bar=baz
Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"
You can use the =
, ==
, and !=
operators with field selectors (=
and ==
mean the same thing). This kubectl
command, for example, selects all Kubernetes Services that aren’t in the default
namespace:
$ kubectl get services --field-selector metadata.namespace!=default
As with label and other selectors, field selectors can be chained together as a comma-separated list. This kubectl
command selects all Pods for which the status.phase
does not equal Running
and the spec.restartPolicy
field equals Always
:
$ kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
You use field selectors across multiple resource types. This kubectl
command selects all Statefulsets and Services that are not in the default
namespace:
$ kubectl get statefulsets,services --field-selector metadata.namespace!=default
Was this page helpful?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.