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
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.
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.
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.
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.
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.
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.
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"
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