5.2. Travailler avec des nœuds
En tant qu'administrateur, vous pouvez effectuer un certain nombre de tâches pour rendre vos grappes plus efficaces.
5.2.1. Comprendre comment évacuer les pods sur les nœuds
L'évacuation des pods permet de migrer tous les pods ou certains pods d'un ou de plusieurs nœuds donnés.
Vous ne pouvez évacuer que les modules soutenus par un contrôleur de réplication. Le contrôleur de réplication crée de nouveaux pods sur d'autres nœuds et supprime les pods existants sur le(s) nœud(s) spécifié(s).
Les pods nus, c'est-à-dire ceux qui ne sont pas soutenus par un contrôleur de réplication, ne sont pas affectés par défaut. Vous pouvez évacuer un sous-ensemble de modules en spécifiant un sélecteur de modules. Les sélecteurs de modules sont basés sur des étiquettes, de sorte que tous les modules portant l'étiquette spécifiée seront évacués.
Procédure
Marquer les nœuds inséparables avant d'effectuer l'évacuation des nacelles.
Marquer le nœud comme non ordonnançable :
oc adm cordon <node1> $ oc adm cordon <node1>
Exemple de sortie
node/<node1> cordonné
Vérifiez que l'état du nœud est bien
Ready,SchedulingDisabled:oc get node <node1> $ oc get node <node1>
Exemple de sortie
NAME STATUS ROLES AGE VERSION <node1> Ready,SchedulingDisabled worker 1d v1.25.0
Évacuez les nacelles en utilisant l'une des méthodes suivantes :
Évacuer tous les pods ou certains pods sur un ou plusieurs nœuds :
$ oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
Forcez la suppression des pods nus à l'aide de l'option
--force. Lorsque l'option est définie surtrue, la suppression se poursuit même si des pods ne sont pas gérés par un contrôleur de réplication, un ensemble de réplicas, un job, un ensemble de démons ou un ensemble avec état :$ oc adm drain <node1> <node2> --force=true
Définir une période de temps en secondes pour que chaque pod se termine gracieusement, utiliser
--grace-period. Si elle est négative, la valeur par défaut spécifiée dans le pod sera utilisée :$ oc adm drain <node1> <node2> --grace-period=-1
Ignorer les pods gérés par des ensembles de démons utilisant l'indicateur
--ignore-daemonsetsavec la valeurtrue:$ oc adm drain <node1> <node2> --ignore-daemonsets=true
Fixe le temps d'attente avant d'abandonner en utilisant le drapeau
--timeout. Une valeur de0définit une durée infinie :$ oc adm drain <node1> <node2> --timeout=5s
Supprimez les pods même s'il existe des pods utilisant des volumes
emptyDiren définissant l'indicateur--delete-emptydir-datasurtrue. Les données locales sont supprimées lorsque le nœud est vidé :$ oc adm drain <node1> <node2> --delete-emptydir-data=true
Lister les objets qui seront migrés sans effectuer l'évacuation, en utilisant l'option
--dry-runréglée surtrue:$ oc adm drain <node1> <node2> --dry-run=true
Au lieu de spécifier des noms de nœuds spécifiques (par exemple,
<node1> <node2>), vous pouvez utiliser l'option--selector=<node_selector>pour évacuer les pods sur des nœuds sélectionnés.
Marquer le nœud comme planifiable lorsqu'il est terminé.
oc adm uncordon <node1> $ oc adm uncordon <node1>
5.2.2. Comprendre comment mettre à jour les étiquettes sur les nœuds
Vous pouvez mettre à jour n'importe quelle étiquette d'un nœud.
Les étiquettes de nœuds ne sont pas conservées après la suppression d'un nœud, même si le nœud est sauvegardé par une machine.
Toute modification apportée à un objet MachineSet n'est pas appliquée aux machines existantes appartenant à l'ensemble de machines de calcul. Par exemple, les étiquettes modifiées ou ajoutées à un objet MachineSet existant ne sont pas propagées aux machines et nœuds existants associés à l'ensemble de machines de calcul.
La commande suivante permet d'ajouter ou de mettre à jour des étiquettes sur un nœud :
$ oc label node <node> <key_1>=<value_1> ... <clé_n>=<valeur_n>
Par exemple :
$ oc label nodes webconsole-7f7f6 unhealthy=true
AstuceVous pouvez également appliquer le YAML suivant pour appliquer l'étiquette :
kind: Node apiVersion: v1 metadata: name: webconsole-7f7f6 labels: unhealthy: 'true'La commande suivante met à jour tous les pods de l'espace de noms :
$ oc label pods --all <key_1>=<value_1>
Par exemple :
$ oc label pods --all status=unhealthy
5.2.3. Comprendre comment marquer les nœuds comme non planifiables ou planifiables
Par défaut, les nœuds sains avec un statut Ready sont marqués comme planifiables, ce qui signifie que vous pouvez placer de nouveaux pods sur le nœud. Le fait de marquer manuellement un nœud comme non planifiable empêche la planification de nouveaux modules sur ce nœud. Les pods existants sur le nœud ne sont pas affectés.
La commande suivante marque un ou plusieurs nœuds comme non ordonnançables :
Exemple de sortie
$ oc adm cordon <node>
Par exemple :
$ oc adm cordon node1.example.com
Exemple de sortie
node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
La commande suivante marque un ou plusieurs nœuds non ordonnançables comme ordonnançables :
oc adm uncordon <node1> $ oc adm uncordon <node1>
Au lieu de spécifier des noms de nœuds spécifiques (par exemple,
<node>), vous pouvez utiliser l'option--selector=<node_selector>pour marquer les nœuds sélectionnés comme ordonnançables ou non ordonnançables.
5.2.4. Suppression de nœuds
5.2.4.1. Suppression de nœuds d'une grappe
Lorsque vous supprimez un nœud à l'aide de la CLI, l'objet nœud est supprimé dans Kubernetes, mais les pods qui existent sur le nœud ne sont pas supprimés. Tous les pods nus qui ne sont pas soutenus par un contrôleur de réplication deviennent inaccessibles à OpenShift Container Platform. Les pods soutenus par des contrôleurs de réplication sont replanifiés sur d'autres nœuds disponibles. Vous devez supprimer les pods de manifeste locaux.
Procédure
Pour supprimer un nœud du cluster OpenShift Container Platform, modifiez l'objet MachineSet approprié :
Si vous exécutez un cluster sur du métal nu, vous ne pouvez pas supprimer un nœud en modifiant les objets MachineSet. Les ensembles de machines de calcul ne sont disponibles que lorsqu'un cluster est intégré à un fournisseur de cloud. Au lieu de cela, vous devez déprogrammer et vidanger le nœud avant de le supprimer manuellement.
Affichez les ensembles de machines de calcul qui se trouvent dans la grappe :
$ oc get machinesets -n openshift-machine-api
Les ensembles de machines de calcul sont répertoriés sous la forme <clusterid>-worker-<aws-region-az>.
Mettre à l'échelle l'ensemble des machines de calcul :
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
Ou bien :
$ oc edit machineset <machineset> -n openshift-machine-api
AstuceVous pouvez également appliquer le YAML suivant pour mettre à l'échelle l'ensemble des machines de calcul :
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: replicas: 2
Ressources supplémentaires
- Pour plus d'informations sur la mise à l'échelle de votre cluster à l'aide d'un MachineSet, voir Mise à l'échelle manuelle d'un MachineSet.
5.2.4.2. Suppression de nœuds d'un cluster bare metal
Lorsque vous supprimez un nœud à l'aide de la CLI, l'objet nœud est supprimé dans Kubernetes, mais les pods qui existent sur le nœud ne sont pas supprimés. Tous les pods nus qui ne sont pas soutenus par un contrôleur de réplication deviennent inaccessibles à OpenShift Container Platform. Les pods soutenus par des contrôleurs de réplication sont replanifiés sur d'autres nœuds disponibles. Vous devez supprimer les pods de manifeste locaux.
Procédure
Supprimez un nœud d'un cluster OpenShift Container Platform fonctionnant sur du métal nu en effectuant les étapes suivantes :
Marquer le nœud comme non ordonnançable :
$ oc adm cordon <node_name>
Drainer tous les pods sur le nœud :
oc adm drain <node_name> --force=true
Cette étape peut échouer si le nœud est hors ligne ou ne répond pas. Même si le nœud ne répond pas, il est possible qu'il exécute toujours une charge de travail qui écrit dans le stockage partagé. Pour éviter toute corruption de données, mettez le matériel physique hors tension avant de poursuivre.
Supprimer le nœud de la grappe :
oc delete node <node_name> $ oc delete node <node_name>
Bien que l'objet nœud soit désormais supprimé du cluster, il peut toujours rejoindre le cluster après un redémarrage ou si le service kubelet est redémarré. Pour supprimer définitivement le nœud et toutes ses données, vous devez le déclasser.
- Si vous avez mis le matériel physique hors tension, remettez-le sous tension pour que le nœud puisse rejoindre le cluster.