Sélecteurs de champs
Les sélecteurs de champs vous permettent de sélectionner des objets Kubernetes en fonction de la valeur d'un ou plusieurs champs de ressources. Voici quelques exemples de requêtes de sélecteurs de champs :
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
Cette commande kubectl
sélectionne tous les Pods pour lesquels la valeur du champ status.phase
est Running
:
kubectl get pods --field-selector status.phase=Running
Note:
Les sélecteurs de champs sont essentiellement des filtres de ressources. Par défaut, aucun sélecteur/filtre n'est appliqué, ce qui signifie que toutes les ressources du type spécifié sont sélectionnées. Cela rend les requêteskubectl get pods
et kubectl get pods --field-selector ""
équivalentes.Champs pris en charge
Les sélecteurs de champs pris en charge varient en fonction du type de ressource Kubernetes. Tous les types de ressources prennent en charge les champs metadata.name
et metadata.namespace
. L'utilisation de sélecteurs de champs non pris en charge génère une erreur. Par exemple :
kubectl get ingress --field-selector foo.bar=baz
Erreur du serveur (BadRequest) : Impossible de trouver des "ingresses" correspondant au sélecteur de labels "", au sélecteur de champs "foo.bar=baz" : "foo.bar" n'est pas un sélecteur de champ connu : seuls "metadata.name", "metadata.namespace"
Liste des champs pris en charge
Kind | Champs |
---|---|
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 |
Opérateurs pris en charge
Vous pouvez utiliser les opérateurs =
, ==
et !=
avec les sélecteurs de champs (=
et ==
signifient la même chose). Cette commande kubectl
, par exemple, sélectionne tous les services Kubernetes qui ne sont pas dans le namespace default
:
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
Note:
Les opérateurs basés sur les ensembles (in
, notin
, exists
) ne sont pas pris en charge pour les sélecteurs de champs.Sélecteurs enchaînés
Comme pour les labels et autres sélecteurs, les sélecteurs de champs peuvent être enchaînés ensemble sous forme d'une liste séparée par des virgules. Cette commande kubectl
sélectionne tous les Pods pour lesquels le champ status.phase
n'est pas égal à Running
et le champ spec.restartPolicy
est égal à Always
:
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
Types de ressources multiples
Vous pouvez utiliser des sélecteurs de champs sur plusieurs types de ressources. Cette commande kubectl
sélectionne tous les Statefulsets et Services qui ne sont pas dans le namespace default
:
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default