Selektory pól
Selektory pól (Field selectors) pozwalają na wybór obiektów Kubernetesa na podstawie wartości jednego lub kilku pól zasobów. Oto kilka przykładów zapytań z użyciem selektora pól:
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
Polecenie kubectl
wybiera wszystkie Pody, dla których wartość pola status.phase
to Running
:
kubectl get pods --field-selector status.phase=Running
Informacja:
Selektory pól to zasadniczo filtry zasobów. Domyślnie nie stosuje się żadnych selektorów/filtrów, co oznacza, że wszystkie zasoby określonego typu są wybierane. Dzięki temu zapytaniakubectl
kubectl get pods
i kubectl get pods --field-selector ""
są równoważne.Obsługiwane pola
Obsługiwane selektory pól różnią się w zależności od typu zasobu Kubernetesa. Wszystkie typy zasobów obsługują pola metadata.name
oraz metadata.namespace
. Użycie nieobsługiwanych selektorów pól skutkuje błędem. Na przykład:
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"
Lista obsługiwanych pól
Rodzaj | Pola |
---|---|
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 |
Pola zasobów niestandardowych
Wszystkie niestandardowe typy zasobów obsługują pola metadata.name
oraz metadata.namespace
.
Dodatkowo, pole spec.versions[*].selectableFields
w CustomResourceDefinition określa,
które inne pola w zasobie niestandardowym mogą być używane w selektorach pól. Zobacz
selectable fields for custom resources aby uzyskać więcej informacji o tym, jak używać selektorów pól z CustomResourceDefinitions.
Obsługiwane operatory
Możesz używać operatorów =
, ==
i !=
z selektorami pól (=
and ==
oznaczają to samo). Na przykład ta komenda kubectl
wybiera wszystkie usługi Kubernetesa, które nie znajdują się w przestrzeni nazw default
:
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
Informacja:
Operatory dla zbiorów (Set-based operators ) (in
, notin
, exists
) nie są obsługiwane dla selektorów pól.Złożone selektory
Podobnie jak etykieta i inne selektory, selektory pól mogą być łączone w postaci listy rozdzielanej przecinkami. To polecenie kubectl
wybiera wszystkie Pody, dla których status.phase
nie jest równe Running
, a pole spec.restartPolicy
jest równe Always
:
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
Wiele typów zasobów
Możesz używać selektorów pól w różnych typach zasobów. To polecenie kubectl
wybiera wszystkie obiekty typu Statefulset i Service, które nie znajdują się w przestrzeni nazw default
:
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default