Wie erkenne ich, wann/ob/warum ein Container in einem Kubernetes-Cluster neu gestartet wird?

Wie erkenne ich, wann/ob/warum ein Container in einem Kubernetes-Cluster neu gestartet wird?

Ich habe einen Single-Node-Kubernetes-Cluster in der Google Container Engine zum Herumspielen.

Zweimal ist eine kleine persönliche Website, die ich darin hoste, für ein paar Minuten offline gegangen. Wenn ich mir die Protokolle des Containers ansehe, sehe ich, dass die normale Startreihenfolge vor Kurzem abgeschlossen wurde. Ich gehe also davon aus, dass ein Container gestorben ist (oder beendet wurde?) und neu gestartet wurde.

Wie kann ich herausfinden, wie und warum dies passiert ist?

Gibt es eine Möglichkeit, eine Warnung zu erhalten, wenn ein Container unerwartet gestartet/gestoppt wird?

Antwort1

Sie können die letzten Neustartprotokolle eines Containers wie folgt anzeigen:

kubectl loggt podname -c containername --vorheriges

Wie von Sreekanth beschrieben, sollte kubectl get pods Ihnen die Anzahl der Neustarts anzeigen, Sie können aber auch ausführen

kubectl beschreibt Pod Podname

Außerdem werden Ihnen Ereignisse angezeigt, die vom Kubelet an den API-Server zu den Lebenszyklus-Ereignissen des Pods gesendet werden.

Sie können auch eine Abschlussmeldung in /dev/termination-log schreiben. Diese wird dann wie indie Dokumente.

Antwort2

Neben den vorherigen Antworten hat mir ein weiterer Befehl geholfen, einen Fehler zu finden:

kubectl get event [--namespace=my-namespace]

Es listet auch Ereignisse von Pods, Jobs und Nodes auf

Antwort3

Um die Ursache für den Fehler zu ermitteln, gehe ich folgendermaßen vor:

# print out a pod logs (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs)
kubectl logs {name_of_pod} -n {namespace} --since=2h --timestamps


# print the logs for the _previous_ instance of the container in a pod if it exists
kubectl logs -p {name_of_pod} -n {namespace} --previous


# check events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#describe)
kubectl describe pod {pod_name} -n {namespace}

# look at the 'Events' at the end of the output
# ..
# Events:
#   Type     Reason   Age                 From               Message
#   ----     ------   ----                ----               -------
#   Warning  BackOff  40m                 kubelet, gke-xx    Back-off restarting failed container
# ..


# observe all events (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get)
kubectl get events -n {namespace} --sort-by=.metadata.creationTimestamp


# check logs, etc. in pod container (https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#exec)
kubectl exec -it {pod_name} -n {namespace} -- sh

Antwort4

Beim Neustart

kubectl describe pod your-pod-name

Suchen Sie nach einem Abschnitt wie diesem:

State:          Running
  Started:      Wed, 23 Jun 2021 23:52:05 +1000
Last State:     Terminated
  Reason:       Error
  Exit Code:    1
  Started:      Wed, 23 Jun 2021 23:46:48 +1000
  Finished:     Wed, 23 Jun 2021 23:46:52 +1000
Ready:          True 

Die Interpretation des oben Gesagten ist wie folgt:

  • Der Pod wurde Wed, 23 Jun 2021 23:46:52 +1000nach dem Start um beendet Wed, 23 Jun 2021 23:46:48 +1000und ist nun betriebsbereit, nachdem er zuletzt um gestartet wurde.Wed, 23 Jun 2021 23:52:05 +1000

Ein Pull Request wurde jetzt in den Kubernetes-Meilenstein 1.22 integriert, um LAST RESTARTeine Spalte hinzuzufügen kubectl get pods, und wird verfügbar sein, sobald dieser veröffentlicht wird – siehe hier. https://github.com/kubernetes/kubernetes/pull/100142

So zeigen Sie Ihre aktuelle Version an:kubernetes version

(1.21 ist die neueste Version vom 28. Juni 2021)

Bei einem Neustart

kubectl get po [your-pod-name] Der Pod wurde irgendwann neu gestartet, wenn in der RESTARTSSpalte eine Zahl steht

Warum neu gestartet

kubectl describe pod [your-pod-name]zeigt ein an Last State, das Ihnen einen Überblick gibt. Um zu sehen, was auf dem Pod vor dem Neustart passiert ist, verwenden Sie kubectl logs your-pod-name --previous. Sie können dies zur Überprüfung in eine Datei weiterleiten, z. B.

kubectl logs your-pod-name --previous > pod_previous_log.txt

(Siehe auch oben unter „Beim Neustart“)

verwandte Informationen