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:

  1. Si la coupure dure moins de 5 minutes, les pods seront down pendant ce temps, il faudra un replicaSet par prudence.
  2. 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.