Aller au contenu

Gérer les nœuds Kubernetes

Mise à jour :

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.

Pourquoi gérer l’accessibilité des nœuds ?

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).

kubectl cordon : Mettre un nœud en maintenance

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

Syntaxe de base

Terminal window
kubectl cordon <nom-du-nœud>

Exemples

  1. Mettre un nœud en maintenance :
Terminal window
kubectl cordon node-1

Sortie possible :

Terminal window
node/node-1 cordoned
  1. Vérifier l’état d’un nœud :
Terminal window
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

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

Syntaxe de base

Terminal window
kubectl uncordon <nom-du-nœud>

Exemples

  1. Réactiver la planification sur un nœud :
Terminal window
kubectl uncordon node-1

Sortie possible :

node/node-1 uncordoned

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

kubectl drain : Évacuer un nœud

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

Syntaxe de base

Terminal window
kubectl drain <nom-du-nœud> [options]

Options utiles

  • --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).

Exemples

  1. Drainer un nœud pour la maintenance :
Terminal window
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 :
Terminal window
kubectl drain node-1 --force --ignore-daemonsets --delete-emptydir-data

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.

Syntaxe de base

Terminal window
kubectl taint nodes <nom-du-nœud> <clé>=<valeur>:<effet>

Types d’effets

  • 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.

Exemples

  1. Ajouter un taint à un nœud :
Terminal window
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 :
Terminal window
kubectl taint nodes node-1 key-

Cela supprime le taint portant la clé key.

  1. Vérifier les taints d’un nœud :
Terminal window
kubectl describe node node-1 | grep Taints

Bonnes pratiques

  • 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.

Conclusion

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.

Notes importantes

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