Manchmal kann es vorkommen, dass Sie Ihren Pod neu starten müssen. Zum Beispiel, wenn sich Ihr Pod im Fehlerzustand befindet.
Abhängig von der Neustartrichtlinie versucht Kubernetes selbst, neu zu starten und das Problem zu beheben.
Aber wenn das nicht funktioniert und Sie die Fehlerquelle nicht finden können, ist ein manueller Neustart des Kubernetes-Pods die schnellste Möglichkeit, Ihre App wieder zum Laufen zu bringen.
So starten Sie Pods in Kubernetes neu
Leider gibt es keinen kubectl-Neustart-Pod-Befehl für diesen Zweck. Hier sind einige Möglichkeiten, wie Sie Ihre Pods neu starten können:
- Rollout-Pod wird neu gestartet
- Skalieren der Anzahl der Replikate
Lassen Sie mich Ihnen beide Methoden im Detail zeigen.
Methode 1:Rollout-Pod wird neu gestartet
Ab Kubernetes-Version 1.15 können Sie einen rollierenden Neustart Ihrer Bereitstellungen durchführen.
Der Controller beendet einen Pod nach dem anderen und verlässt sich auf das ReplicaSet, um neue Pods hochzuskalieren, bis alle Pods neuer sind als zum Zeitpunkt des Neustarts. Meiner Meinung nach ist dies der beste Weg, um Ihre Pods neu zu starten, da Ihre Anwendung nicht heruntergefahren wird.
Hinweis: Einzelne Pod-IPs werden geändert.
Nehmen wir ein Beispiel. Sie haben eine Bereitstellung namens my-dep, die aus zwei Pods besteht (da replik auf zwei gesetzt ist).
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 13s
Rufen wir die Pod-Details ab:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 47s 172.16.213.255 kworker-rj2 <none> <none>
my-dep-6d9f78d6c4-rkhrz 1/1 Running 0 47s 172.16.213.35 kworker-rj1 <none> <none>
Lassen Sie uns nun den Neustart für die my-dep-Bereitstellung mit einem Befehl wie dem folgenden durchführen:
kubectl rollout restart deployment name_of_deployment
Erinnern Sie sich an den Namen der Bereitstellung aus den vorherigen Befehlen? Verwenden Sie es hier:
[email protected]:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted
Sie können beobachten, wie alte Pods beendet und neue erstellt werden, indem Sie kubectl get pod -w
verwenden Befehl:
[email protected]:~# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 5s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-6d9f78d6c4-8j5fq 1/1 Running 0 69s
my-dep-6d9f78d6c4-rkhrz 1/1 Terminating 0 69s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 69s
my-dep-557548758d-svg7w 0/1 ContainerCreating 0 1s
my-dep-557548758d-svg7w 1/1 Running 0 3s
my-dep-6d9f78d6c4-8j5fq 1/1 Terminating 0 71s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 72s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-rkhrz 0/1 Terminating 0 74s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
my-dep-6d9f78d6c4-8j5fq 0/1 Terminating 0 76s
Wenn Sie die Pods jetzt überprüfen, können Sie sehen, dass sich die Details hier geändert haben:
[email protected]:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-557548758d-kz6r7 1/1 Running 0 42s 172.16.213.43 kworker-rj1 <none> <none>
my-dep-557548758d-svg7w 1/1 Running 0 38s 172.16.213.251 kworker-rj2 <none> <none>
Methode 2. Skalieren der Anzahl der Replikate
In einer CI/CD-Umgebung kann der Prozess zum Neustarten Ihrer Pods bei Auftreten eines Fehlers lange dauern, da der gesamte Build-Prozess erneut durchlaufen werden muss.
Ein schnellerer Weg, dies zu erreichen, ist die Verwendung der kubectl scale
Befehl, um die Replikatnummer auf null zu ändern, und sobald Sie eine Zahl größer als null festlegen, erstellt Kubernetes neue Replikate.
Lass es uns versuchen. Überprüfen Sie zuerst Ihre Pods:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-kz6r7 1/1 Running 0 11m
my-dep-557548758d-svg7w 1/1 Running 0 11m
Rufen Sie die Bereitstellungsinformationen ab:
[email protected]:~# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-dep 2/2 2 2 12m
Setzen Sie nun die Replikationsnummer auf Null:
[email protected]:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled
Und dann wieder auf zwei setzen:
[email protected]:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled
Prüfen Sie jetzt die Pods:
[email protected]:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
my-dep-557548758d-d2pmd 1/1 Running 0 10s
my-dep-557548758d-gprnr 1/1 Running 0 10s
Sie haben Kubernetes Pods erfolgreich neu gestartet.
Verwenden Sie eine der oben genannten Methoden, um Ihre App schnell und sicher zum Laufen zu bringen, ohne die Endnutzer zu beeinträchtigen.
Nachdem Sie diese Übung durchgeführt haben, stellen Sie bitte sicher, dass Sie das Kernproblem finden und beheben, da ein Neustart Ihres Pods nicht funktioniert Beheben Sie das zugrunde liegende Problem.
Ich hoffe, Ihnen gefällt dieser Kubernetes-Tipp. Vergessen Sie nicht, mehr zu abonnieren.
Rakesh Jain
DevOps-Profi | RCA | Jenkins | Git | Docker | Kubernetes | Ansible | Prometheus | Grafana | AWS-Cloud