Селекторы полей
Селекторы полей позволяют выбирать ресурсы Kubernetes, исходя из значения одного или нескольких полей ресурсов. Ниже приведены несколько примеров запросов селекторов полей:
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
Следующая команда kubectl
выбирает все Pod-объекты, в которых значение поля status.phase
равно Running
:
kubectl get pods --field-selector status.phase=Running
По сути, селекторы полей являются фильтрами ресурсов. По умолчанию нет установленных селекторов/фильтров, поэтому выбираются ресурсы всех типов. Это означает, что два запроса kubectl
ниже одинаковы:
kubectl get pods
kubectl get pods --field-selector ""
Поддерживаемые поля
Доступные селекторы полей зависят от типа ресурса Kubernetes. У всех типов ресурсов есть поля metadata.name
и metadata.namespace
. При использовании несуществующего селекторов полей приведёт к возникновению ошибки. Например:
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"
Поддерживаемые операторы
Можно использовать операторы =
, ==
и !=
в селекторах полей (=
и ==
— синонимы). Например, следующая команда kubectl
выбирает все сервисы Kubernetes, не принадлежавшие пространству имен default
:
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
Составные селекторы
Аналогично метки и другим селекторам, несколько селекторы полей могут быть объединены через запятую. Приведенная ниже команда kubectl
выбирает все Pod-объекты, у которых значение поле status.phase
, отличное от Running
, а поле spec.restartPolicy
имеет значение Always
:
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
Множественные типы ресурсов
Можно использовать селекторы полей с несколькими типами ресурсов одновременно. Команда kubectl
выбирает все объекты StatefulSet и Services, не включенные в пространство имен default
:
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default