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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm cordon <node1> $ oc adm cordon <node1>
oc adm cordon <node1> $ oc adm cordon <node1>
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow node/<node1> cordonné
node/<node1> cordonné
Vérifiez que l'état du nœud est bien
Ready,SchedulingDisabled
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get node <node1> $ oc get node <node1>
oc get node <node1> $ oc get node <node1>
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME STATUS ROLES AGE VERSION <node1> Ready,SchedulingDisabled worker 1d v1.25.0
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
$ 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 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --force=true
$ 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 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --grace-period=-1
$ oc adm drain <node1> <node2> --grace-period=-1
Ignorer les pods gérés par des ensembles de démons utilisant l'indicateur
--ignore-daemonsets
avec la valeurtrue
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --ignore-daemonsets=true
$ oc adm drain <node1> <node2> --ignore-daemonsets=true
Fixe le temps d'attente avant d'abandonner en utilisant le drapeau
--timeout
. Une valeur de0
définit une durée infinie :Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --timeout=5s
$ oc adm drain <node1> <node2> --timeout=5s
Supprimez les pods même s'il existe des pods utilisant des volumes
emptyDir
en définissant l'indicateur--delete-emptydir-data
surtrue
. Les données locales sont supprimées lorsque le nœud est vidé :Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --delete-emptydir-data=true
$ 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-run
réglée surtrue
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node1> <node2> --dry-run=true
$ 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é.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm uncordon <node1> $ oc adm uncordon <node1>
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label node <node> <key_1>=<value_1> ... <clé_n>=<valeur_n>
$ oc label node <node> <key_1>=<value_1> ... <clé_n>=<valeur_n>
Par exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label nodes webconsole-7f7f6 unhealthy=true
$ oc label nodes webconsole-7f7f6 unhealthy=true
AstuceVous pouvez également appliquer le YAML suivant pour appliquer l'étiquette :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kind: Node apiVersion: v1 metadata: name: webconsole-7f7f6 labels: unhealthy: 'true'
kind: Node apiVersion: v1 metadata: name: webconsole-7f7f6 labels: unhealthy: 'true'
La commande suivante met à jour tous les pods de l'espace de noms :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label pods --all <key_1>=<value_1>
$ oc label pods --all <key_1>=<value_1>
Par exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label pods --all status=unhealthy
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm cordon <node>
$ oc adm cordon <node>
Par exemple :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm cordon node1.example.com
$ oc adm cordon node1.example.com
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm uncordon <node1> $ oc adm uncordon <node1>
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get machinesets -n openshift-machine-api
$ 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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
Ou bien :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit machineset <machineset> -n openshift-machine-api
$ 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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: replicas: 2
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm cordon <node_name>
$ oc adm cordon <node_name>
Drainer tous les pods sur le nœud :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm drain <node_name> --force=true
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 :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete node <node_name> $ oc delete node <node_name>
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.