Kubernetes - Actions sur le nodes
Alasta 23 Août 2024 kubernetes kubernetes node
Description : Kubernetes, actions sur les nodes
Actions sur les nodes
Status sur un node down
Que devient un pod sur un node qui passe down, Kubernetes considère le pod dead et le recré sur un autre node une fois le pod-eviction timeout qui est de 5 minutes.
kube-controller-manager --pod-eviction-timeout=5m0s …
Pour une maintenance, 2 choix s’offre à nous:
- Si la coupure dure moins de 5 minutes, les pods seront down pendant ce temps, il faudra un replicaSet par prudence.
- Si cela dure plus de 5 minutes, il faut drain le node (à préférer).
Drain du node
En drainant le node, les workloads/pods sont déplacés (enfin terminés et recréés) sur un autre node.
kubectl drain node01
evicting pod default/hello-7865c89f4d-wjskt
pod/hello-7865c89f4d-wjskt evicted
node/node01 drained
Note: parfois il est necessaire d’ajouter des arguments comme –ignore-daemonsets.
k get node
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane 3d22h v1.30.0
node01 Ready,SchedulingDisabled <none> 3d22h v1.30.0
node02 Ready <none> 2m34s v1.30.0
Le node qui est drained est en status SchedulingDisabled, il n’aura plus de workload jusqu’à ce que la restriction soit supprimée.
Le node reçoit aussi une taint node.kubernetes.io/unschedulable:NoSchedule.
Uncordon du node
C’est l’action de rendre le node disponible dans le cluster, cela ne va pas redéplacer les pods sur ce node, il faudra attendre qu’il y en ait des nouveaux.
k uncordon node01
node/node01 uncordoned
k get node
NAME STATUS ROLES AGE VERSION
controlplane Ready control-plane 3d22h v1.30.0
node01 Ready <none> 3d22h v1.30.0
node02 Ready <none> 2m34s v1.30.0
Cordon du node
Cela permet de ne plus déployer de pod sur le node tout en ne déplaçant pas les workloads existants.
k cordon node01
node/node01 cordoned
k get node
NAME STATUS ROLES AGE VERSION
controlplan Ready control-plane 3d22h v1.30.0
node01 Ready,SchedulingDisabled <none> 3d22h v1.30.0
node02 Ready <none> 2m34s v1.30.0
Le node va aussi recevoir la taint node.kubernetes.io/unschedulable:NoSchedule.
Pas de différenciation visuelle dans les sorties de commandes.
Pour remettre le node dans le cluster il faut faire un uncordon du node.