Analysieren von Kubernetes-Job-Logs
Die Möglichkeit, die Logs Ihrer Kubernetes-Jobs anzuzeigen und zu analysieren, ist für das Debuggen und das Verständnis des Job-Verhaltens unerlässlich. In diesem Schritt werden wir untersuchen, wie man auf Logs von den von uns erstellten Jobs zugreift und diese analysiert.
Abrufen von Pod-Namen für unsere Jobs
Bevor wir Logs anzeigen können, müssen wir die Namen der von unseren Jobs erstellten Pods kennen. Jeder Job erstellt einen oder mehrere Pods mit Namen, die den Jobnamen und ein zufälliges Suffix enthalten.
Listen wir alle Pods auf, die sich auf unsere Jobs beziehen:
kubectl get pods --show-labels
Dies zeigt Ihnen alle Pods zusammen mit ihren Labels. Suchen Sie nach Pods mit Labels wie job-name=hello-job
oder job-name=long-job
.
Alternativ können Sie Pods nach Jobnamen filtern:
kubectl get pods -l job-name=hello-job
Dies zeigt nur Pods an, die zum Job hello-job
gehören.
Anzeigen von Job-Logs
Nachdem wir nun unsere Pod-Namen kennen, können wir die Logs für unsere Jobs anzeigen. Verwenden Sie den folgenden Befehl und ersetzen Sie <pod-name>
durch den tatsächlichen Namen Ihres Pods:
kubectl logs <pod-name>
Wenn Ihr Pod beispielsweise den Namen hello-job-abcd1
hat, würden Sie Folgendes ausführen:
kubectl logs hello-job-abcd1
Sie sollten die Ausgabe sehen:
Hello, Kubernetes!
Dies ist die Nachricht, die unser Job ausgeben sollte.
Überprüfen wir auch die Logs unseres längeren Jobs. Finden Sie zuerst den Pod-Namen:
kubectl get pods -l job-name=long-job
Zeigen Sie dann seine Logs an:
kubectl logs <long-job-pod-name>
Sie sollten sehen:
Starting long job...
Long job completed!
Anzeigen von Logs abgeschlossener Jobs
Einer der Vorteile von Kubernetes-Jobs ist, dass Sie die Logs auch nach Abschluss des Jobs anzeigen können. Dies ist sehr nützlich für Debugging- und Audit-Zwecke.
Erstellen wir einen Job, der fehlschlägt, damit wir sehen können, wie man ihn debuggt:
cd ~/project
nano failed-job.yaml
Kopieren Sie den folgenden YAML-Inhalt und fügen Sie ihn ein:
apiVersion: batch/v1
kind: Job
metadata:
name: failed-job
spec:
template:
spec:
containers:
- name: failed
image: busybox:1.28
command: ["sh", "-c", 'echo "Attempting task..." && exit 1']
restartPolicy: Never
backoffLimit: 2
Dieser Job wird immer mit dem Statuscode 1 beendet, was einen Fehler anzeigt. Speichern Sie die Datei und beenden Sie nano, und erstellen Sie dann den Job:
kubectl apply -f failed-job.yaml
Warten Sie einige Momente, bis der Job versucht hat, ein paar Mal zu scheitern (bis zum Backoff-Limit). Überprüfen Sie dann seinen Status:
kubectl get jobs failed-job
Sie sollten sehen, dass er 0/1
Abschlüsse anzeigt und die Abschlussfrist erreicht hat.
Untersuchen wir nun, was schief gelaufen ist, indem wir die Logs der fehlgeschlagenen Pods überprüfen:
kubectl get pods -l job-name=failed-job
Sie sehen mehrere Pods, alle im Status Error
. Wählen Sie einen aus und zeigen Sie seine Logs an:
kubectl logs <failed-pod-name>
Sie sollten sehen:
Attempting task...
Die Pod-Logs zeigen, dass die Aufgabe gestartet wurde, aber dann mit einem Fehlercode beendet wurde. Diese Information ist entscheidend für das Debuggen von Job-Fehlern.
Logs in Echtzeit verfolgen
Wenn Sie die Logs eines laufenden Jobs in Echtzeit verfolgen möchten, können Sie das Flag -f
verwenden:
kubectl logs -f <pod-name>
Dies ist besonders nützlich für länger laufende Jobs, bei denen Sie die Ausgabe während der Ausführung sehen möchten.
Erstellen wir einen weiteren langlaufenden Job, um dies zu demonstrieren:
cd ~/project
nano counter-job.yaml
Kopieren Sie den folgenden YAML-Inhalt und fügen Sie ihn ein:
apiVersion: batch/v1
kind: Job
metadata:
name: counter-job
spec:
template:
spec:
containers:
- name: counter
image: busybox:1.28
command:
[
"sh",
"-c",
'for i in $(seq 1 5); do echo "Count: $i"; sleep 5; done'
]
restartPolicy: Never
Speichern Sie die Datei und beenden Sie nano, und erstellen Sie dann den Job:
kubectl apply -f counter-job.yaml
Verfolgen wir nun seine Logs. Finden Sie zuerst den Pod-Namen:
kubectl get pods -l job-name=counter-job
Verfolgen Sie dann seine Logs:
kubectl logs -f <counter-job-pod-name>
Sie sehen, wie der Zähler alle 5 Sekunden inkrementiert wird:
Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
Drücken Sie Ctrl+C
, um die Verfolgung der Logs zu beenden.
Indem Sie verstehen, wie man auf Logs zugreift und diese analysiert, können Sie Ihre Kubernetes-Jobs effektiv beheben und debuggen.