NodeSelectors
Kubernetes propose plusieurs mécanismes pour contrôler le placement des Pods sur les nœuds du cluster.
Par défaut, si aucune contrainte n’est définie, le scheduler sélectionne un nœud disposant des ressources suffisantes (CPU, mémoire, etc.) et y planifie le Pod de manière automatique.
Cependant, certains nœuds peuvent disposer de caractéristiques particulières : disques SSD haute performance, GPU, matériel spécialisé, ou configuration spécifique. Dans ce type de scénario, il peut être nécessaire de contraindre explicitement le placement d’un Pod sur ces nœuds spécifiques.
Les taints et tolerations permettent de restreindre l’accès à certains nœuds, mais elles ne garantissent pas qu’un Pod sera planifié uniquement sur les nœuds souhaités. Pour cibler précisément des nœuds possédant des propriétés particulières, Kubernetes propose un mécanisme simple : le nodeSelector.
Le nodeSelector permet d’indiquer au scheduler que le Pod doit être planifié uniquement sur les nœuds possédant un ou plusieurs labels spécifiques.
Le nodeSelector fonctionne uniquement avec des correspondances exactes clé=valeur. Il ne permet pas d’exprimer des conditions plus complexes (par exemple “différent de” ou “dans une liste”).
Exemple Dans notre cluster, mettons un label kind=special sur le noeud numéro 1:
kubectl label nodes k8s-node-1 kind=specialMaintenant, déployons un pod avec un nodeSelector qui correspond au label de ce noeud:
pod-selector.yaml:
apiVersion: v1
kind: Pod
metadata:
labels:
run: podsel
name: podsel
spec:
containers:
- image: busybox:latest
name: podsel
args:
- sleep
- "3600"
nodeSelector:
kind: specialNous avons ainsi dit au scheduler que ce pod devrait être schedulé sur un node qui a le label kind=special.
Si aucun nœud ne correspond au nodeSelector, le Pod restera en état Pending.
Déployons ce pod, et nous pourrons voir que le scheduler a bien sélectionné le node numéro 1 pour ce pod:
kubectl apply -f pod-selector.yaml
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
podsel 1/1 Running 0 4s 10.244.1.24 k8s-node-1 Conclusion
Les nodeSelectors permettent de contraindre explicitement le scheduler à placer un Pod sur des nœuds possédant des labels spécifiques.
Ils constituent un mécanisme simple et direct de contrôle du placement des workloads.
Pour des règles de placement plus avancées et plus flexibles, Kubernetes propose également des mécanismes d’affinité, qui permettent d’exprimer des contraintes plus complexes.


