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
taints
ettolerations
(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-1
Sortie possible :
node/node-1 cordoned
- Vérifier l’état d’un nœud :
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
kubectl uncordon <nom-du-nœud>
Exemples
- Réactiver la planification sur un nœud :
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
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-data
Sortie 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-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
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 latoleration
adéquate.
Exemples
- Ajouter un
taint
à un nœud :
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.
- Supprimer un
taint
:
kubectl taint nodes node-1 key-
Cela supprime le taint
portant la clé key
.
- Vérifier les
taints
d’un nœud :
kubectl describe node node-1 | grep Taints
Bonnes pratiques
- Toujours utiliser
kubectl cordon
avant undrain
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.
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 |