Appliquer taint, cordon et drain sur des nœuds et des pools de nœuds
Découvrez comment effectuer des opérations sur des nœuds et des pools de nœuds spécifiques, comme taint, drain et cordon, sur OVHcloud Managed Kubernetes
Objectif
Un précédent guide vous a montré comment déployer vos applications sur des Nodes et des Nodes Pools spécifiques, à l'aide des concepts Kubernetes labels et NodeAffinity. Ce nouveau tutoriel vous montre comment effectuer des opérations courantes sur les Nodes et les Nodes Pools, telles que taint, cordon et drain, sur votre service OVHcloud Managed Kubernetes.
Grâce à la propagation des labels du pool de nœuds vers les nœuds, vous allez :
- créer un cluster Managed Kubernetes
- créer un pool de nœuds
- créer un second pool de nœuds, avec une configuration différente et l'autoscaling activé
- appliquer un taint à un nœud
- appliquer un cordon à un nœud
- appliquer un drain à un nœud
Pourquoi ?
Un nœud est une machine virtuelle (VM) ou physique.
Vos applications et vos workloads s'exécutent dans des Pods, et les Pods s'exécutent sur des nœuds.
Mais dans certains cas, l'ordonnanceur Kubernetes ne peut pas déployer un Pod sur un nœud, pour plusieurs raisons :
- le nœud n'est pas prêt
- le nœud est injoignable
- l'espace disque est insuffisant
- le réseau n'est pas disponible
- …
Pour ces cas d'usage, ainsi que pour d'autres, vous pouvez effectuer des opérations sur les nœuds. Et grâce à la propagation des labels du pool de nœuds vers les nœuds, vous pouvez cibler uniquement les nœuds appartenant à un pool de nœuds donné.
Prérequis
- un projet Public Cloud dans votre compte OVHcloud
Accès à l'espace client OVHcloud
- Lien direct :
- Pour accéder à vos services :
Public Cloud> Sélectionnez votre projet
En pratique
Création du cluster
Suivez le guide pas à pas « Création d'un cluster ».
Création du second pool de nœuds
Votre cluster Kubernetes est maintenant opérationnel. Vous pouvez le consulter dans votre espace client OVHcloud.
Cliquez sur votre cluster, puis sur l'onglet Pools de nœuds.
Vous allez créer votre second pool de nœuds.
Cliquez sur le bouton Ajouter un pool de nœuds.
Saisissez ensuite un nom pour votre second pool de nœuds, par exemple second-node-pool.
Sélectionnez une flavor pour votre nouveau pool de nœuds : choisissez par exemple « D2-8 », une flavor différente de celle de votre autre pool de nœuds.
À l'étape suivante, définissez la taille de votre second pool de nœuds.
Vous pouvez cette fois activer la fonctionnalité Autoscaling.
Définissez alors la taille minimale et maximale du pool, par exemple 3 au minimum et 10 au maximum.
En activant l'anti-affinité, les nœuds actuels et futurs seront lancés sur des hyperviseurs (serveurs physiques) différents, ce qui garantit une meilleure tolérance aux pannes.
Choisissez le mode de facturation Hourly pour ce second pool de nœuds.
La création du pool de nœuds est maintenant en cours. Il devrait être disponible dans votre espace client OVHcloud d'ici quelques minutes.
Le second pool de nœuds sera d'abord au statut Installing.
Attendez que son statut passe à OK.
Vérifier que tout est correctement configuré
Pour effectuer des opérations sur vos nœuds via la CLI kubectl, nous vous invitons à suivre notre guide « Configuration des paramètres par défaut ».
Une fois que vous pouvez accéder au cluster via la commande kubectl, affichez vos pools de nœuds :
Nos deux pools de nœuds existent et nous pouvons constater la différence de configuration et de mode d'autoscaling.
Affichez maintenant vos nœuds. Vous devriez avoir 3 nœuds en cours d'exécution dans votre premier pool de nœuds et 3 nœuds dans le pool de nœuds « second-node-pool » :
Appliquer un cordon à un nœud
Appliquer un cordon à un nœud consiste à le rendre non ordonnançable. Ce nœud ne peut donc plus accueillir de pods tant qu'il est marqué comme Unschedulable.

Plutôt que d'appliquer un cordon à chaque nœud manuellement :
vous pouvez appliquer un cordon à tous les nœuds d'un pool de nœuds. Voici comment appliquer un cordon à tous les nœuds de second-node-pool, par exemple, grâce au label.
Dans notre exemple, voici le résultat obtenu :
Tous les nœuds de second-node-pool sont désormais marqués comme Unschedulable.
Vous ne pouvez donc plus déployer de Pods sur ces nœuds, ni sur ce pool de nœuds.
Retirer le cordon d'un nœud
Vous pouvez également annuler votre action avec la commande uncordon.
Dans notre exemple :
Les nœuds sont de nouveau à l'état Ready.
Appliquer un drain à un nœud
Vous pouvez utiliser la commande kubectl drain pour évincer en toute sécurité tous vos pods d'un nœud avant d'effectuer une opération de maintenance sur celui-ci ou de réduire le nombre de nœuds, par exemple. Les évictions sécurisées permettent aux conteneurs du pod de s'arrêter proprement et respectent les PodDisruptionBudgets que vous avez définis (le cas échéant).
Un PDB limite le nombre de pods d'une application répliquée qui sont arrêtés simultanément suite à des perturbations volontaires, ce qui permet une meilleure disponibilité tout en laissant l'administrateur du cluster gérer les nœuds de ses clusters. Si ce sujet vous intéresse, nous vous recommandons la lecture de la documentation officielle Kubernetes : Specifying a Disruption Budget for your Application.

Vous pouvez appliquer un drain à tous les nœuds de second-node-pool grâce au label.
Dans notre exemple :
Comme vous pouvez le constater, Kubernetes ne peut pas supprimer les objets DaemonSet. Pour éviter ce message d'erreur, vous pouvez ajouter l'option --ignore-daemonsets :
Comme le montre la sortie console, appliquer un drain à un nœud lui applique également un cordon. Vous pouvez alors effectuer toutes les opérations souhaitées sur les nœuds, en étant certain qu'ils n'exécutent aucun workload. N'oubliez pas de retirer le cordon des nœuds du pool de nœuds, afin de permettre à nouveau l'exécution des workloads :
Les nœuds sont de nouveau à l'état Ready.
Appliquer un taint à un nœud
Les taints de nœud sont des paires key:value associées à un effet.
Plusieurs taints peuvent être définis sur un même nœud.

- Avec le taint
NoSchedule, les pods qui ne tolèrent pas le taint ne peuvent pas être ordonnancés sur le nœud. - Avec le taint
PreferNoSchedule, Kubernetes évite d'ordonnancer sur le nœud les Pods qui ne tolèrent pas le taint. - Avec le taint
NoExecute, les Pods sont évincés du nœud s'ils y sont déjà en cours d'exécution, en plus de ne pas pouvoir y être ordonnancés.
Vous pouvez ajouter un taint sur tous les nœuds de second-node-pool grâce au label.
Pour mettre un nœud en pause et ne plus y accepter de nouveaux workloads :
Vous pouvez afficher les taints de tous les nœuds :
Dans notre exemple :
Vous pouvez ensuite réactiver un nœud :
Dans notre exemple :
Appliquer un taint à un nœud et créer un pod uniquement sur ces nœuds
Une autre fonctionnalité utile consiste à appliquer un taint à un nœud et à déployer une application uniquement sur certains nœuds. Vous pouvez par exemple réserver un ensemble de nœuds à l'usage exclusif d'un groupe d'utilisateurs donné, ou définir un sous-ensemble de nœuds dotés de matériel spécialisé.
Pour cela, vous pouvez appliquer aux nœuds de second-node-pool un taint avec une clé et une valeur particulières, par exemple flavor=d2-8 :
Dans notre exemple :
Vous pouvez ensuite créer un Pod qui ne pourra être ordonnancé que sur les nœuds portant le taint flavor=d2-8:NoSchedule.
Créez un fichier manifeste YAML my-pod.yaml avec le contenu suivant :
Déployez-le ensuite :
Puis vérifiez que votre nouveau Pod s'exécute bien sur un nœud de second-node-pool :
Dans notre exemple :
Grâce à l'option -o wide, vous pouvez vérifier que votre Pod s'exécute sur le nœud second-node-pool-node-519613.
Aller plus loin
Ce tutoriel vous a montré comment effectuer des opérations sur les nœuds — taint, drain, cordon, uncordon — et comment déployer des Pods sur des nœuds spécifiques de votre cluster OVHcloud Managed Kubernetes.
Pour en savoir plus sur l'utilisation pratique de votre cluster Kubernetes, nous vous invitons à consulter notre documentation OVHcloud Managed Kubernetes.
-
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
-
Échangez avec notre communauté d'utilisateurs.