Hvordan dræner jeg en Kubernetes Worker Node?

Hvad betyder det at dræne Kubernetes Worker Node?

Når vi udfører vedligeholdelse på vores Kubernetes Cluster eller en specifik worker node, kan vi nogle gange have brug for at være i stand til at fjerne en eller flere Kubernetes noder fra clusteret. 

Vi vil midlertidigt kunne fjerne noden, udføre vores vedligeholdelse og så tilføj det tilbage til clusteret igen. For at gøre dette skal vi dræne noden.

Det får pods der kører på denne worker node til at afslutte elegant, og automatisk starte op en anden node.

Vi kan tømme en node meget nemt ved blot at bruge kommandoen kubectl drain efterfulgt af node navnet.

Parametere som kan tilføjes:

--delete-local-data=true Kubernetes kontroller først om der er nogle pods med lokale data på disken. Hvis der er kan denne parameter slette lokale pod-data på noden.

--ignore-daemonsets=true Hvis vi har nogen Daemonset-pods der kører på noden får vi en fejlmeddelelse, der fortæller os at Kubernetes ikke kan dræne noden på grund af disse Daemonsets.Parameteren vil ignore deamonsets.

--force=true Der kontrolleres også om noden har nogle pods der ikke administreres af nogen kubernetes selv (såsom Daemonset, Replicaset, Replicacontroller, Statefulset, Job osv.) eller af en anden operatør.

  

Sådan dræner du en worker node: 

  1. For at dræne en kubernetes worker node, vil vi først se alle noderne i clusteret, ved at udføre nedenstående kommando:
    kubectl get nodes Her bør du kontrollere om alle noder står til “Ready” under Status.
  2. Se også hvor alle Pods køre:
    kubectl get pods -o wide 
  3. Nu kan du dræne en worker node:
    kubectl drain worker-node1  Hvis du får fejl: cannot delete Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use –force to override): default/my-pod. Cannot delete DaemonSet-managed Pods (use –ignore-daemonsets to ignore): kube-system/calico-node-bhmls, kube-system/kube-proxy-pcpdh, så kan du i stedet benytte: kubectl drain worker-node1--force=true --ignore-daemonsets=true

Nu er denne node drænet for pods og slået fra, og der kan ikke spawne/starte nye pods. Hvis denne worker node har ReplicationController, ReplicaSet, Job, DaemonSet eller StatefulSet pods kørende, så vil disse pods gå i evicted mode, men burde starte op på en anden worker node.

 

For at tilføje worker noden tilbage til clusteret:

  1. Aktiver og tilføj noden tilbage: kubectl uncordon worker-node1 
  2. Se status på worker-node1: kubectl get nodes kontroller om der står Ready under Status.

Hvis du gerne vil omrokere dine pods, så worker-node1 bliver benyttet, kan du blot benytte kubectl delete.

  1. Se først alle pods: kubeclt get pods -o wide 
  2. Du kan f.eks. ved at skrive: kubectl delete pod pods-navn så vil der stå pod “pod-navn” deleted
  3. Du kan kontroller hvor alle pods køre ved at skrive igen kubeclt get pods -o wide 

 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.