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-servicemetadata.namespace!=defaultstatus.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.nodeNamespec.restartPolicyspec.schedulerNamespec.serviceAccountNamespec.hostNetworkstatus.phasestatus.podIPstatus.nominatedNodeName |
| Event | involvedObject.kindinvolvedObject.namespaceinvolvedObject.nameinvolvedObject.uidinvolvedObject.apiVersioninvolvedObject.resourceVersioninvolvedObject.fieldPathreasonreportingComponentsourcetype |
| 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