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

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

RodzajPola
Podspec.nodeName
spec.restartPolicy
spec.schedulerName
spec.serviceAccountName
spec.hostNetwork
status.phase
status.podIP
status.nominatedNodeName
EventinvolvedObject.kind
involvedObject.namespace
involvedObject.name
involvedObject.uid
involvedObject.apiVersion
involvedObject.resourceVersion
involvedObject.fieldPath
reason
reportingComponent
source
type
Secrettype
Namespacestatus.phase
ReplicaSetstatus.replicas
ReplicationControllerstatus.replicas
Jobstatus.successful
Nodespec.unschedulable
CertificateSigningRequestspec.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

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