Селектори полів
Селектори полів дозволяють вам вибирати обʼєкти Kubernetes на основі значень одного або кількох полів ресурсу. Ось кілька прикладів запитань для селекторів полів:
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
Ця команда kubectl
вибирає всі Podʼи, для яких значення поля status.phase
дорівнює Running
:
kubectl get pods --field-selector status.phase=Running
Примітка:
Селектори полів, по суті, є фільтрами ресурсів. Типово селектори/фільтри не застосовуються, а це означає, що вибрані всі ресурси вказаного типу. Це робить запити kubectlkubectl 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"
Список підтримуваних полів
Вид | Поля |
---|---|
Pod | spec.nodeName spec.restartPolicy spec.schedulerName spec.serviceAccountName spec.hostNetwork status.phase status.podIP status.nominatedNodeName |
Event | involvedObject.kind involvedObject.namespace involvedObject.name involvedObject.uid involvedObject.apiVersion involvedObject.resourceVersion involvedObject.fieldPath reason reportingComponent source type |
Secret | type |
Namespace | status.phase |
ReplicaSet | status.replicas |
ReplicationController | status.replicas |
Job | status.successful |
Node | spec.unschedulable |
CertificateSigningRequest | spec.signerName |
Поля власних ресурсів
Усі власні типи ресурсів підтримують поля metadata.name
та metadata.namespace
.
Крім того, поле spec.versions[*].selectableFields
у CustomResourceDefinition оголошує, які інші поля власного ресурсу можна використовувати у селекторах полів. Дивіться статтю поля, які можна вибрати для власних ресурсів або додаткові відомості про те, як використовувати селектори полів з CustomResourceDefinitions.
Підтримувані оператори
Ви можете використовувати оператори =
, ==
та !=
з селекторами полів (=
та ==
означають те саме). Наприклад, ця команда 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
вибирає всі Statefulsets та Services, які не знаходяться в просторі імен default
:
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default