GNU/Linux >> Tutoriels Linux >  >> Linux

Comment drainer un nœud dans Kubernetes

Dans ce didacticiel Kubernetes, vous apprendrez à drainer un nœud à l'aide de la commande kubectl drain pour préparer la maintenance.

C'est aussi simple que d'entrer cette commande :

kubectl drain node_name

Vous pouvez obtenir les détails des nœuds en utilisant kubectl get nodes commande.

Mais il y a plus à drainer les nœuds dans Kubernetes, alors examinons-le en détail.

Pourquoi avez-vous besoin de drainer des nœuds ?

Kubernetes est conçu pour être tolérant aux pannes des nœuds de travail.

Il peut y avoir différentes raisons pour lesquelles un nœud de travail devient inutilisable, par exemple en raison d'un problème matériel, d'un problème de fournisseur de cloud ou s'il existe des problèmes de réseau entre le nœud de travail et le nœud maître, le maître Kubernetes le gère efficacement.

Mais cela ne signifie pas que ce sera toujours le cas. Et c'est à ce moment que vous devez vider les nœuds et supprimer tous les pods.

Le drainage est le processus permettant d'expulser en toute sécurité tous les pods d'un nœud. De cette façon, les conteneurs exécutés sur le pod se terminent correctement.

Comment drainer correctement les nœuds dans Kubernetes

Commençons par la démonstration pratique.

Étape 1 :Marquer le nœud comme non programmable (cordon)

Pour effectuer la maintenance d'un nœud, vous devez annuler la planification, puis vider un nœud.

Examinez d'abord les nœuds en cours d'exécution :

[email protected]:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8
[email protected]:~#

Regardez les pods s'exécutant sur différents nœuds :

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Marquez maintenant le nœud comme non planifiable en exécutant la commande suivante :

[email protected]:~# kubectl cordon kworker-rj2
node/kworker-rj2 cordoned
[email protected]:~# 

Listez à nouveau les nœuds :

[email protected]:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
[email protected]:~#

Vous pouvez remarquer que le nœud kworker-rj2 est maintenant étiqueté comme SchedulingDisabled.

Jusqu'à cette étape, il n'expulse pas les pods exécutés sur ce nœud. Vérifiez l'état du pod :

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-d2pmd   1/1     Running   1          4d15h     172.16.213.57   kworker-rj2   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Vous pouvez voir que le pod "my-dep-557548758d-d2pmd" est toujours en cours d'exécution sur le nœud kworker-rj2.

Étape 2 :vidangez le nœud pour préparer la maintenance

Videz maintenant le nœud en préparation de la maintenance pour supprimer les pods qui s'exécutent sur le nœud en exécutant la commande suivante :

[email protected]:~# kubectl drain kworker-rj2 --grace-period=300 --ignore-daemonsets=true
node/kworker-rj2 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-fl8dl, kube-system/kube-proxy-95vdf
evicting pod default/my-dep-557548758d-d2pmd
pod/my-dep-557548758d-d2pmd evicted
node/kworker-rj2 evicted
[email protected]:~#

REMARQUE : kubectl drain ne peut pas supprimer les pods non gérés par ReplicationController, ReplicaSet, Job, DaemonSet ou StatefulSet. Vous devez utiliser --force pour remplacer cela et, ce faisant, les pods individuels seront définitivement supprimés.

Regardez maintenant les pods :

[email protected]:~# kubectl get pods -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-gprnr   1/1     Running   1          4d23h   172.16.213.48   kworker-rj1   <none>           <none>
my-dep-557548758d-dsanh   1/1     Running   0          27s     172.16.213.38   kworker-rj1   <none>           <none>
pod-delete-demo           1/1     Running   1          2d      172.16.213.56   kworker-rj1   <none>           <none>
[email protected]:~#

Le pod qui s'exécutait sur le nœud kworker-rj2 a été expulsé de là et a démarré comme un nouveau pod sur le nœud kworker-rj1.

L'état des nœuds reste le même :

[email protected]:~# kubectl get nodes
NAME          STATUS                     ROLES    AGE   VERSION
kmaster-rj    Ready                      master   44d   v1.18.8
kworker-rj1   Ready                      <none>   44d   v1.18.8
kworker-rj2   Ready,SchedulingDisabled   <none>   44d   v1.18.8
[email protected]:~#

Étape 3 :Déconnecter le nœud une fois la maintenance terminée

Vous devez ensuite exécuter la commande suivante pour indiquer à Kubernetes qu'il peut reprendre la planification de nouveaux pods sur le nœud.

[email protected]:~# kubectl uncordon kworker-rj2
node/kworker-rj2 uncordoned

Vérifiez l'état du nœud :

[email protected]:~# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kmaster-rj    Ready    master   44d   v1.18.8
kworker-rj1   Ready    <none>   44d   v1.18.8
kworker-rj2   Ready    <none>   44d   v1.18.8

Le nœud kworker-rj2 redevient prêt à gérer de nouvelles charges de travail.

J'espère que vous aimez ce conseil rapide sur le drainage des nœuds dans Kubernetes.

Rakesh Jain
DevOps Professionnel | RHCA | Jenkins | Gite | Docker | Kubernetes | Ansible | Prométhée | Grafane | Nuage AWS

Linux
  1. Comment installer Node.js sur Fedora 35 / Fedora 34

  2. Comment supprimer un service dans Kubernetes

  3. Comment ajouter ou supprimer des étiquettes aux nœuds dans Kubernetes

  4. Comment installer NodeJs sur Ubuntu 18.04

  5. Comment obtenir l'historique des pods exécutés sur le nœud Kubernetes ?

Comment installer Kubernetes sur Ubuntu 20.04

Comment déployer Kubernetes à nœud unique avec Microk8s sur Ubuntu 20.04

Comment installer Node.js sur AlmaLinux 8

Comment installer Node.js sur Manjaro 20

Comment installer Node.js sur Debian 8

Comment installer Node.js sur Ubuntu 14.04