Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Field Selectors
Селекторы полей
Селекторы полей позволяют выбирать ресурсы 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