wake-up-neo.com

kubernetes starten den Container innerhalb des Pods neu

Ich habe einen Pod test-1495806908-xn5jn mit 2 Behältern. Ich möchte einen von ihnen mit dem Namen container-test neu starten. Ist es möglich, einen einzelnen Container innerhalb eines Pods neu zu starten und wie? Wenn nicht, wie starte ich den Pod neu?

Der Pod wurde mit einer deploy.yaml erstellt mit:

kubectl create -f deployment.yaml
29
s5s

Kann ein einzelner Container neu gestartet werden?

Nicht über kubectl, auch wenn Sie abhängig von der Einrichtung Ihres Clusters "cheaten" und docker kill the-sha-goes-here, was dazu führt, dass kubelet den "ausgefallenen" Container neu startet (vorausgesetzt, die Neustart-Richtlinie für den Pod sagt natürlich, dass dies der Fall ist )

wie starte ich die pod neu?

Das hängt davon ab, wie der Pod erstellt wurde, aber basierend auf dem von Ihnen angegebenen Pod-Namen scheint er unter der Aufsicht eines ReplicaSets zu stehen. Sie können also nur kubectl delete pod test-1495806908-xn5jn und kubernetes einen neuen an seiner Stelle erstellen (der neue Pod wird es haben) einen anderen Namen, erwarten Sie also nicht, dass kubectl get pods jemals test-1495806908-xn5jn zurückgegeben wird.

42

Es gibt Fälle, in denen Sie einen bestimmten Container neu starten möchten, anstatt den Pod zu löschen und ihn von Kubernetes neu erstellen zu lassen.

Einen kubectl exec POD_NAME -c CONTAINER_NAME reboot zu machen, hat für mich funktioniert.

23
Zsolt Katona

Der Grund für die Verwendung von Kubernetes besteht darin, dass die Container für Sie verwaltet werden, so dass Sie sich nicht so sehr um den Lebenszyklus der Container in der Kapsel kümmern müssen. 

Da Sie über ein deployment-Setup verfügen, das replica set verwendet. Sie können den Pod mit kubectl delete pod test-1495806908-xn5jn löschen, und kubernetes verwaltet die Erstellung eines neuen Pods mit den 2 Containern ohne Ausfallzeiten. Wenn Sie versuchen, einzelne Container in Pods manuell neu zu starten, werden die gesamten Vorteile von Kuberneten aufgehoben.

6
Innocent Anigbo

Den in der Docker-Datei angegebenen Prozess CMD/ENTRYPOINT zu beenden, funktioniert für mich. (Der Container startet automatisch neu)

In meinem Container war ein Neustart nicht zulässig, daher musste ich diese Problemumgehung verwenden.

2
Kevin

In allen oben genannten Antworten wurde das Löschen des Pods erwähnt. Wenn Sie jedoch über mehrere Pods desselben Dienstes verfügen, wäre es mühsam, jeden einzelnen davon zu löschen.

Daher schlage ich folgende Lösung vor: Neustart:

  • 1) Waage auf Null stellen:

     kubectl scale deployment <<name>> --replicas=0 -n service 
    

    Der obige Befehl beendet alle Ihre Pods mit dem Namen <<name>>

  • 2) Um den Pod erneut zu starten, stellen Sie die Replikate auf mehr als 0 ein

    kubectl scale deployment <<name>> --replicas=2 -n service
    

    Mit dem obigen Befehl werden die Pods mit 2 Replikaten erneut gestartet.

2
Ajay Reddy

Es gab ein Problem im Pod coredns, ich habe diesen Pod von gelöscht

kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf

Der Pod wird automatisch neu gestartet.

1
j3ffyang

Sowohl der Pod als auch der Container sind flüchtig. Versuchen Sie, den folgenden Container mit dem folgenden Befehl zu stoppen. Der k8s-Cluster startet einen neuen Container.

kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"

1
ROY

Wir verwenden eine ziemlich praktische Befehlszeile, um die erneute Bereitstellung neuer Images im Integrations-Pod zu erzwingen.
Wir haben festgestellt, dass alle Alpine-Container ihren "Sustaining" -Befehl auf PID 5 ausführen. Wenn Sie also ein SIGTERM-Signal senden, wird der Container abgebrochen. Wenn imagePullPolicy auf Always gesetzt ist, zieht das kubelet das letzte Bild erneut, wenn es den Container zurückbringt.

kubectl exec -i [pod name] -c [container-name] -- kill -15 5
0
Alexis LEGROS