Gérer les nœuds Kubernetes
Mise à jour :
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
taintsettolerations(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
kubectl cordon <nom-du-nœud>Exemples
- Mettre un nœud en maintenance :
kubectl cordon node-1Sortie possible :
node/node-1 cordoned- Vérifier l’état d’un nœud :
kubectl get nodesLe 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
kubectl uncordon <nom-du-nœud>Exemples
- Réactiver la planification sur un nœud :
kubectl uncordon node-1Sortie possible :
node/node-1 uncordonedLe 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
kubectl drain <nom-du-nœud> [options]Options utiles
--ignore-daemonsets: Ignore lesDaemonSets, qui ne peuvent pas être supprimés.--delete-emptydir-data: Supprime les pods ayant des volumesemptyDir.--force: Force la suppression des pods non gérés par un contrôleur (ex: pods statiques).
Exemples
- Drainer un nœud pour la maintenance :
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-dataSortie possible :
node/node-1 already cordonedevicting pod "my-app-12345"successfully evicted pod "my-app-12345"- Forcer le drainage d’un nœud avec des pods non gérés :
kubectl drain node-1 --force --ignore-daemonsets --delete-emptydir-datakubectl 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
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 latolerationadéquate.
Exemples
- Ajouter un
taintà un nœud :
kubectl taint nodes node-1 key=value:NoScheduleLe nœud node-1 ne pourra plus héberger de nouveaux pods à moins qu’ils aient
une toleration appropriée.
- Supprimer un
taint:
kubectl taint nodes node-1 key-Cela supprime le taint portant la clé key.
- Vérifier les
taintsd’un nœud :
kubectl describe node node-1 | grep TaintsBonnes pratiques
- Toujours utiliser
kubectl cordonavant undrainpour éviter que de nouveaux pods ne soient placés sur le nœud. - Ne pas oublier
kubectl uncordonaprès la maintenance pour réactiver la planification des pods. - Utiliser
taintspour contrôler le placement des pods sensibles ou critiques. - Vérifier les
tolerationsdé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.
| Commandes | Documentation |
|---|---|
kubectl api-resources, kubectl explain | Exploration de l’API |
kubectl create, kubectl apply | Création et mise à jour des ressources |
kubectl edit, kubectl patch, kubectl replace | Modification des ressources |
kubectl get, kubectl describe, kubectl logs, kubectl top | Récupération d’informations sur les ressources |
kubectl exec, kubectl attach, kubectl debug, kubectl cp | Gestion et Debug des Pods |
kubectl delete, kubectl annotate, kubectl label | Suppression et annotation |
kubectl expose, kubectl port-forward, kubectl proxy | Exposition et accès aux applications |
kubectl scale, kubectl autoscale, kubectl rollout, kubectl set | Mise à l’échelle et gestion des déploiements |
kubectl wait, kubectl diff | Attente et validation des ressources |