Aller au contenu
Conteneurs & Orchestration medium

Gérer les nœuds Kubernetes

6 min de lecture

logo kubernetes

Ce guide fait partie d’une série dédiée à kubectl, l’outil en ligne de commande pour interagir avec Kubernetes. Dans ce guide, nous explorons plusieurs commandes essentielles pour gérer les nœuds d’un cluster : kubectl cordon, kubectl uncordon, kubectl drain et kubectl taint.

Dans Kubernetes, les nœuds peuvent être mis en maintenance, évités pour certaines charges de travail, ou préparés pour des mises à jour. Ces commandes permettent de :

  • Empêcher la planification de nouveaux pods sur un nœud (cordon).
  • Réautoriser la planification de pods (uncordon).
  • Drainer un nœud en évacuant ses pods (drain).
  • Restreindre la planification de pods avec des taints et tolerations (taint).

La commande kubectl cordon marque un nœud comme non éligible à la planification de nouveaux pods.

Fenêtre de terminal
kubectl cordon <nom-du-nœud>
  1. Mettre un nœud en maintenance :
Fenêtre de terminal
kubectl cordon node-1

Sortie possible :

Fenêtre de terminal
node/node-1 cordoned
  1. Vérifier l’état d’un nœud :
Fenêtre de terminal
kubectl get nodes

Le nœud node-1 apparaîtra avec SchedulingDisabled dans la colonne STATUS.

kubectl uncordon : Réautoriser la planification sur un nœud

Section intitulée « kubectl uncordon : Réautoriser la planification sur un nœud »

La commande kubectl uncordon réactive la planification de pods sur un nœud précédemment marqué avec cordon.

Fenêtre de terminal
kubectl uncordon <nom-du-nœud>
  1. Réactiver la planification sur un nœud :
Fenêtre de terminal
kubectl uncordon node-1

Sortie possible :

node/node-1 uncordoned

Le nœud node-1 est de nouveau disponible pour la planification des pods.

La commande kubectl drain vide un nœud de ses pods afin de le préparer pour la maintenance ou la suppression.

Fenêtre de terminal
kubectl drain <nom-du-nœud> [options]
  • --ignore-daemonsets : Ignore les DaemonSets, qui ne peuvent pas être supprimés.
  • --delete-emptydir-data : Supprime les pods ayant des volumes emptyDir.
  • --force : Force la suppression des pods non gérés par un contrôleur (ex: pods statiques).
  1. Drainer un nœud pour la maintenance :
Fenêtre de terminal
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data

Sortie possible :

node/node-1 already cordoned
evicting pod "my-app-12345"
successfully evicted pod "my-app-12345"
  1. Forcer le drainage d’un nœud avec des pods non gérés :
Fenêtre de terminal
kubectl drain node-1 --force --ignore-daemonsets --delete-emptydir-data

kubectl taint : Restreindre la planification de pods

Section intitulée « kubectl taint : Restreindre la planification de pods »

La commande kubectl taint ajoute une contrainte de planification à un nœud, empêchant certains pods d’y être programmés, sauf s’ils possèdent une toleration correspondante.

Fenêtre de terminal
kubectl taint nodes <nom-du-nœud> <clé>=<valeur>:<effet>
  • NoSchedule : Empêche la planification de nouveaux pods.
  • PreferNoSchedule : Évite la planification si possible.
  • NoExecute : Expulse les pods existants ne possédant pas la toleration adéquate.
  1. Ajouter un taint à un nœud :
Fenêtre de terminal
kubectl taint nodes node-1 key=value:NoSchedule

Le nœud node-1 ne pourra plus héberger de nouveaux pods à moins qu’ils aient une toleration appropriée.

  1. Supprimer un taint :
Fenêtre de terminal
kubectl taint nodes node-1 key-

Cela supprime le taint portant la clé key.

  1. Vérifier les taints d’un nœud :
Fenêtre de terminal
kubectl describe node node-1 | grep Taints
  • Toujours utiliser kubectl cordon avant un drain pour éviter que de nouveaux pods ne soient placés sur le nœud.
  • Ne pas oublier kubectl uncordon après la maintenance pour réactiver la planification des pods.
  • Utiliser taints pour contrôler le placement des pods sensibles ou critiques.
  • Vérifier les tolerations définies dans les manifestes de pods pour s’assurer qu’ils peuvent être programmés.

Les commandes kubectl cordon, kubectl uncordon, kubectl drain et kubectl taint sont essentielles pour gérer les nœuds d’un cluster Kubernetes.

En maîtrisant ces commandes, vous pourrez gérer efficacement la disponibilité et la maintenance de vos nœuds Kubernetes.

Ce guide fait partie d’une série complète dédiée à l’utilisation de kubectl, l’outil en ligne de commande incontournable pour administrer un cluster Kubernetes. Chaque commande de kubectl est abordée en détail dans des guides spécifiques, organisés par thématique pour faciliter l’apprentissage et la référence rapide.

Pour naviguer efficacement entre les différents chapitres, vous trouverez un tableau récapitulatif listant les commandes et leurs guides associés. N’hésitez pas à explorer ces ressources pour approfondir vos connaissances et optimiser votre gestion des clusters Kubernetes.

CommandesDocumentation
kubectl api-resources, kubectl explainExploration de l’API
kubectl create, kubectl applyCréation et mise à jour des ressources
kubectl edit, kubectl patch, kubectl replaceModification des ressources
kubectl get, kubectl describe, kubectl logs, kubectl topRécupération d’informations sur les ressources
kubectl exec, kubectl attach, kubectl debug, kubectl cpGestion et Debug des Pods
kubectl delete, kubectl annotate, kubectl labelSuppression et annotation
kubectl expose, kubectl port-forward, kubectl proxyExposition et accès aux applications
kubectl scale, kubectl autoscale, kubectl rollout, kubectl setMise à l’échelle et gestion des déploiements
kubectl wait, kubectl diffAttente et validation des ressources