GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So leeren Sie einen Knoten in Kubernetes

In diesem Kubernetes-Tutorial erfahren Sie, wie Sie einen Knoten mithilfe des Befehls kubectl drain zur Vorbereitung auf die Wartung leeren.

Es ist so einfach wie diesen Befehl einzugeben:

kubectl drain node_name

Sie können die Knotendetails mit kubectl get nodes abrufen Befehl.

Aber das Draining von Knoten in Kubernetes hat noch mehr zu bieten, also werfen wir einen detaillierten Blick darauf.

Warum müssen Sie Knoten leeren?

Kubernetes ist so konzipiert, dass es gegenüber Ausfällen von Worker-Knoten fehlertolerant ist.

Es kann verschiedene Gründe geben, warum ein Worker-Knoten unbrauchbar wird, z. B. aufgrund eines Hardwareproblems, eines Problems eines Cloud-Anbieters oder wenn es Netzwerkprobleme zwischen Worker und Master-Knoten gibt, behandelt der Kubernetes-Master dies effektiv.

Aber das bedeutet nicht, dass es immer so sein wird. Und das ist der Zeitpunkt, an dem Sie die Knoten entleeren und alle Hülsen entfernen müssen.

Das Draining ist der Prozess zum sicheren Entfernen aller Pods von einem Knoten. Auf diese Weise werden die auf dem Pod ausgeführten Container ordnungsgemäß beendet.

Wie man Knoten in Kubernetes richtig leert

Beginnen wir mit der praktischen Demonstration.

Schritt 1:Markiere den Knoten als nicht planbar (cordon)

Um Wartungsarbeiten an einem Knoten durchzuführen, sollten Sie den Zeitplan für einen Knoten aufheben und ihn dann entleeren.

Werfen Sie zunächst einen Blick auf die aktuell laufenden Knoten:

[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]:~#

Sehen Sie sich die Pods an, die auf verschiedenen Knoten ausgeführt werden:

[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]:~#

Markieren Sie nun den Knoten als nicht planbar, indem Sie den folgenden Befehl ausführen:

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

Listen Sie die Knoten erneut auf:

[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]:~#

Sie können feststellen, dass der Knoten kworker-rj2 jetzt als SchedulingDisabled gekennzeichnet ist.

Bis zu diesem Schritt werden die Pods, die auf diesem Knoten ausgeführt werden, nicht entfernt. Überprüfen Sie den Pod-Status:

[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]:~#

Sie können sehen, dass der Pod „my-dep-557548758d-d2pmd“ immer noch auf dem kworker-rj2-Knoten läuft.

Schritt 2:Entleeren Sie den Knoten, um die Wartung vorzubereiten

Leeren Sie nun den Knoten in Vorbereitung auf die Wartung, um Pods zu entfernen, die auf dem Knoten ausgeführt werden, indem Sie den folgenden Befehl ausführen:

[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]:~#

HINWEIS: kubectl drain kann keine Pods löschen, die nicht von ReplicationController, ReplicaSet, Job, DaemonSet oder StatefulSet verwaltet werden. Sie müssen --force verwenden, um dies zu überschreiben, und dadurch werden die einzelnen Pods dauerhaft gelöscht.

Sehen Sie sich nun die Pods an:

[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]:~#

Der Pod, der auf dem Knoten kworker-rj2 lief, wurde von dort entfernt und als neuer Pod auf dem Knoten kworker-rj1 gestartet.

Knotenstatus bleibt gleich:

[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]:~#

Schritt 3:Entkoppeln Sie den Knoten nach Abschluss der Wartung

Sie müssen anschließend den folgenden Befehl ausführen, um Kubernetes mitzuteilen, dass es die Planung neuer Pods auf dem Knoten fortsetzen kann.

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

Überprüfen Sie den Knotenstatus:

[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

Der Knoten kworker-rj2 wird wieder bereit, neue Workloads zu bewältigen.

Ich hoffe, Ihnen gefällt dieser kurze Tipp zum Leeren von Knoten in Kubernetes.

Rakesh Jain
DevOps-Profi | RCA | Jenkins | Git | Docker | Kubernetes | Ansible | Prometheus | Grafana | AWS-Cloud

Linux
  1. So installieren Sie Node.js auf Fedora 35 / Fedora 34

  2. So verwenden Sie Podman innerhalb von Kubernetes

  3. So löschen Sie einen Dienst in Kubernetes

  4. So fügen Sie Knoten in Kubernetes Labels hinzu oder entfernen sie

  5. So installieren Sie NodeJs unter Ubuntu 18.04

So installieren Sie Kubernetes unter Ubuntu 20.04

So stellen Sie Single Node Kubernetes mit Microk8s auf Ubuntu 20.04 bereit

So installieren Sie Node.js auf AlmaLinux 8

So installieren Sie Node.js auf Manjaro 20

So installieren Sie Node.js unter Debian 8

So installieren Sie Node.js unter Ubuntu 14.04