So legen Sie verschiedene Kubernetes-Neustartrichtlinien fest

So Legen Sie Verschiedene Kubernetes Neustartrichtlinien Fest



Wir werden in diesem Artikel speziell auf die verschiedenen Kubernetes-Neustartrichtlinien eingehen. Lassen Sie uns zunächst die verschiedenen Richtlinien besprechen, die verwendet werden, wenn Kubernetes neu gestartet werden muss. Sie können diese Richtlinien verwenden, um zu verhindern, dass eine bestimmte Workload im Cluster bereitgestellt wird. Während das Auferlegen strenger Standards im Cluster in der Regel erfolgt, um die Einhaltung sicherzustellen, sollten Cluster-Administratoren auch einige empfohlene Best Practices befolgen.

Was ist die Kubernetes-Neustartrichtlinie?

Jeder Kubernetes-Pod unterliegt einem bestimmten Lebenszyklus. Es beginnt in der „ausstehenden“ Phase und geht, wenn einer oder mehrere der primären Container erfolgreich gestartet wurden, in die „laufende“ Phase über. Je nachdem, ob die Container im Pod erfolgreich sind oder nicht, geht der Prozess dann in die „Erfolgreich“- oder „Fehlgeschlagen“-Phase über.







Um die Richtlinie auf der Ebene der angewendeten Container neu zu starten, können drei Optionen verwendet werden:



Stets

Jedes Mal, wenn ein Container beendet wird, erstellt Kubernetes einen neuen, da der Pod jederzeit aktiv sein muss.



OnFailure

Wenn der Container mit einem anderen Rückgabecode als 0 beendet wird, wird er nur einmal neu gestartet. Für Container, die 0 (Erfolg) zurückgeben, ist kein Neustart erforderlich.





Niemals

Der Container konnte nicht neu gestartet werden.

Im folgenden Abschnitt besprechen wir nun, wie Sie einen Pod neu starten können.



Wie starte ich einen Pod in Kubernetes neu?

Geben Sie zum Neustarten eines Kubernetes-Pods Befehle mit dem kubectl-Tool aus. Es wird eine Verbindung mit dem KubeAPI-Server hergestellt. Lassen Sie uns die verfügbaren Optionen erkunden:

Neustart eines Containers innerhalb eines Pods

Ein Pod kann mehrere Behälter aufnehmen. Andererseits verbinden Sie sich im Wesentlichen mit dem primären Container innerhalb eines Pods, wenn Sie sich mit ihm verbinden. Sie können sich mit jedem Container verbinden, den Sie in einem Fall definiert haben, wenn Sie mehr als einen definiert haben.

Unten sehen Sie ein Beispiel für eine Pod-Spezifikation mit mehreren Containern:


Dies beschreibt ein gemeinsam genutztes Volume und zwei Container. Die HTML-Datei wird vom NGINX-Container bereitgestellt und jede Sekunde fügt der Ubuntu-Container der HTML-Datei einen Datumsstempel hinzu.

Da Sie nicht angegeben haben, mit welchem ​​Container eine Verbindung hergestellt werden soll, wird automatisch der erste (NGINX) ausgewählt, wenn Sie versuchen, eine Verbindung zu diesem Pod herzustellen. Der Screenshot ist unten angehängt:


Sie können nun versuchen, den PID 1-Prozess innerhalb des derzeit aktiven Containers zu beenden. Führen Sie dazu die folgenden Befehle als root aus:


Sie können auch das unten beschriebene kubectl-Tool verwenden:


Laut Pod-Spezifikation wird K8s nun versuchen, den zerstörten Container neu zu starten. Dazu wird der „describe“-Befehl wie folgt verwendet:


Hier ist das Ergebnis des obigen Befehls:


Der gegenwärtige Zustand „geht“, während der vorherige Zustand „beendet“ wurde. Das bedeutet, dass der Container demnach neu gestartet wurde. Allerdings können nicht alle Container auf Root-Anmeldeinformationen zugreifen. Aus diesem Grund ist diese Methode möglicherweise nicht sehr nützlich.

Neustart eines Pods durch Skalierung

Das Skalieren der Replikationsanzahl eines Pods auf 0 und das anschließende Hochskalieren auf 1 ist die einfachste Möglichkeit, ihn neu zu starten. Sie müssen stattdessen eine Bereitstellung erstellen, da der Skalierungsbefehl nicht auf Pods verwendet werden kann. Hier ist eine einfache Möglichkeit, dies zu erreichen:


Skalieren Sie auf 0 und danach auf 1. Dadurch wird der Pod beendet und dann erneut im Cluster bereitgestellt:


Die Replikate werden auf 1 gesetzt, wie Sie in diesem Bild sehen können.


Um die Deployment-Details anzuzeigen, haben wir jetzt „kubectl get Deployments“ verwendet. Das Folgende ist eine Liste sowohl des Befehls als auch des Ergebnisses:

Neustarten eines Pods durch Löschen und erneutes Bereitstellen

Mit dem Befehl „kubectl delete“ können Sie einen Pod löschen und ihn dann erneut bereitstellen. Dieser Ansatz ist jedoch ziemlich störend und wird daher nicht empfohlen.

Neustart eines Pods mit Rollout

Um einen Pod auf die oben beschriebene Weise neu zu starten, müssen Sie entweder den vorhandenen Pod zerstören und dann einen neuen erstellen oder den Replikat-Count herunter- und dann hochskalieren. Mit Kubernetes Version 1.15 können Sie eine Bereitstellung fortlaufend neu starten. Dies ist das vorgeschlagene Verfahren zum Neustarten eines Pods. Geben Sie einfach den folgenden Befehl ein, um loszulegen:


Wenn Sie nun den Bereitstellungsstatus auf einem anderen Terminal im Auge behalten, werden Sie den Ablauf der Ereignisse wie folgt feststellen:


Wenn es fehlerfrei ist, wird es die vorherige Replik der Bereitstellung herunterskalieren und eine neue Replik des Pods hochfahren. Das Ergebnis ist dasselbe, außer dass bei diesem Ansatz die zugrunde liegende Orchestrierung von Kubernetes übernommen wurde.

Wie können Kubernetes-Pods auf unterschiedliche Weise neu gestartet werden?

Beginnen wir zunächst mit dem Docker-Container. Mit folgendem Befehl können Docker-Container neu gestartet werden:

> Docker-Neustart container_id

In Kubernetes gibt es jedoch keinen vergleichbaren Befehl zum Neustarten von Pods, insbesondere wenn keine YAML-Datei angegeben ist. Alternativ können Sie Kubernetes-Pods mit kubectl-Befehlen neu starten. Folgende Befehle sind aufgelistet:

Der Befehl Kubectl Set Env

Eine Methode ist die Verwendung des Befehls kubectl scale. Dadurch wird die Anzahl der Replikate des Pods geändert, die neu gestartet werden müssen. Nachfolgend finden Sie einen Beispielbefehl, wie Sie die Replikate im Pod auf zwei festlegen:

> kubectl-Scale-Bereitstellung erste Bereitstellung - Repliken = 2

Rollout-Neustartbefehl

Hier zeigen wir, wie Sie den Rollout-Restart-Befehl verwenden, um Kubernetes-Pods neu zu starten:

> kubectl-Rollout Bereitstellung neu starten erste Bereitstellung -n Demo-Namensraum

Der Controller wird durch den Befehl angewiesen, jede Kapsel einzeln zu vernichten. Anschließend werden neue Pods mit dem ReplicaSet hochskaliert. Bis jeder neue Pod neuer ist als jeder aktuelle Pod, wenn der Controller wieder aufgenommen wird, wird dieser Prozess fortgesetzt.

Der Delete-Pod-Befehl

In diesem Abschnitt wird erläutert, wie Sie den Befehl remove zum Neustarten von Kubernetes-Pods verwenden. Sie können feststellen, dass wir den nächsten Befehl verwendet haben, um das Pod-API-Objekt in diesem Bild loszuwerden:

. > kubectl löschen pod first-pod -n demo_namespace

Dem Erwarteten wird durch Löschen des Pod-Objekts widersprochen, da die Kubernetes-API deklarativ ist. Um die Übereinstimmung mit dem erwarteten zu wahren, wird der Pod daher neu erstellt.

Mit dem vorherigen Befehl kann jeweils ein Pod neu gestartet werden. Beziehen Sie sich auf den beigefügten Befehl, um mehrere Pods neu zu starten:

> kubectl delete replicaset pods-multiple-n demo_namespace

Der oben genannte Befehl startet jeden Pod neu, indem er das gesamte ReplicaSet von Pods löscht und es dann von Grund auf neu erstellt.

Fazit

Dieser Beitrag enthält Informationen zu den verschiedenen Neustartrichtlinien von Kubernetes. Wir haben jeden Schritt anhand von Musterbeispielen illustriert. Probieren Sie auch diese Befehle aus und sehen Sie, welche Ausgabe sie erzeugen.