Jobs in Kubernetes
Ein Job erstellt eine oder mehrere Pods zur Durchführung einer bestimmten Operation und stellt sicher, dass die Pods erfolgreich beendet werden. Wenn eine bestimmte Anzahl von Pods erfolgreich abgeschlossen ist, ist der Job beendet. Wenn ein Job gelöscht wird, löscht er die von ihm angelegten Pods. Ein Job kann auch zur parallelen Ausführung mehrerer Pods verwendet werden.
Um mehr über Kubernetes-Jobs zu erfahren, klicken Sie hier.
In diesem Artikel sehen wir die Implementierung eines einfachen Jobs, eines Jobs mit einem Zeitlimit und eines Cronjobs.
Voraussetzungen
- Kubernetes Cluster mit mindestens 1 Worker-Knoten.
Wenn Sie lernen möchten, wie man einen Kubernetes-Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen bei der Erstellung eines Kubernetes-Clusters mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18.04 EC2-Instanzen.
Was werden wir tun?
- Erstellen Sie Jobs
Jobs anlegen
Einfacher Job
Erstellen Sie eine Multi-Container-Portdefinitionsdatei mit dem folgenden Inhalt.
vim simple-job-1.yml
apiVersion: batch/v1 kind: Job metadata: name: simple-job-1 spec: template: spec: containers: - name: job-1 image: busybox args: - /bin/sh - -c - date; echo sleeping....; sleep 30s; echo exiting!; date restartPolicy: Never
Rufen Sie eine Liste der vorhandenen Pods und Jobs im Cluster Kubernetes ab, und legen Sie mit den folgenden Befehlen einen Job an.
kubectl get pods
kubectl get jobs
kubectl create -f simple-job-1.yml
Auf dem obigen Screenshot sehen Sie, dass es im bestehenden Cluster keine Pods und Jobs gibt und ein neuer Job angelegt wurde.
Wenn Sie einen Job anlegen, wird zusammen mit dem Job ein Pod mit dem Jobnamen erstellt.
Sie können die Hülse und den Job mit den folgenden Befehlen abrufen.
kubectl get pods
kubectl get jobs
In der obigen Abbildung sehen Sie, dass der Auftrag nach seiner Ausführung abgeschlossen wird.
Wenn Sie Ihren Job nicht mehr benötigen, können Sie ihn mit dem folgenden Befehl löschen.
kubectl delete -f simple-job-1.yml
kubectl get pods
kubectl get jobs
Ein Job mit Zeitlimit durchsetzen
Sie können in dem Job ein Zeitlimit erzwingen, das sicherstellt, dass der Job seine Ausführung innerhalb des angegebenen Zeitlimits abschließen muss.
Erstellen Sie eine Job-Definitionsdatei mit folgendem Inhalt.
vim enforce-time-limit-job-2.yml
apiVersion: batch/v1 kind: Job metadata: name: enforce-time-limit-job-2 spec: activeDeadlineSeconds: 20 template: spec: containers: - name: job-2 image: busybox args: - /bin/sh - -c - date; echo some task which should complete in 30 secs....but due to activeDeadlineSeconds=5 will get terminated within 5 secs before its completetion; sleep 30s; echo exiting!; date restartPolicy: Never
Holen Sie sich erneut eine Liste der Hülsen und Jobs im Kubernetes-Cluster und erstellen Sie einen Job unter Verwendung der obigen Datei.
kubectl get jobs
kubectl get pods
kubectl create -f enforce-time-limit-job-2.yml
Wenn Sie nach dem Erstellen des Jobs seine Details überprüfen, können Sie beobachten, dass der Pod, der nach dem Erstellen des Jobs erstellt wurde, vor seinem Abschluss beendet wird, d.h. er wird 30 Sekunden lang nicht ausgeführt und beendet
Überprüfen Sie den Grund für seinen Abbruch mit dem folgenden Befehl
kubectl get pods
kubectl get jobs enforce-time-limit-job-2 -o yaml
Im obigen Screenshot in der ersten Zeile sehen Sie, dass wir activeDeadlineSeconds=20 angegeben haben. Und wir haben sleep=30 Sekunden angegeben. Das bedeutet, dass unsere Kapsel 30 Sekunden lang hätte leben sollen, aber sie wurde innerhalb von 20 Sekunden beendet.
Um den Job jetzt zu löschen, können Sie den folgenden Befehl verwenden.
kubectl delete -f enforce-time-limit-job-2.yml
kubectl get jobs
Cronjob
Um einen Cronjob-Job als Objekt im Kubernetes zu erstellen, erstellen Sie eine Datei mit folgendem Inhalt. Dieser Cronjob in Kubernetes ist derselbe wie der Cronjob in Linux.
vim cronjob-3.yml
apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob-3 spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: cronjob-container image: busybox args: - /bin/sh - -c - date; echo sleeping for 5 secs....; sleep 5s; echo exiting...; restartPolicy: Never
Die obige Definition besagt, dass der Job nach jeweils 1 Minute erstellt wird und 5 Sekunden lang dauert.
Verwenden Sie die folgenden Befehle, um eine Liste der vorhandenen Jobs und Pods zu erhalten und einen Cronjob zu erstellen.
kubectl get jobs
kubectl get pods
kubectl create -f cronjob-3.yml
Um zu sehen, dass der neue Auftrag nach jeweils 1 Minute erstellt wird, um die definierte Aufgabe abzuschließen, verwenden Sie den folgenden Befehl.
kubectl get jobs -w
Nun können Sie die Protokolle überprüfen, in denen Sie beobachten können, dass der Job nach jeweils 1 Minute startet.
kubectl get pods
kubectl logs cronjob-3-1594359720-jfkcl
In der obigen Abbildung sehen Sie die Protokolle der verschiedenen Pods, die als Teil des Jobs nach jeweils einer Minute erstellt wurden.
Dies bedeutet, daß der Job nach jeweils einer Minute ausgelöst wurde.
Wenn Sie den Job nicht mehr benötigen, können Sie ihn mit dem folgenden Befehl löschen.
kubectl delete -f cronjob-3.yml
kubectl get pods
kubectl get jobs
Schlussfolgerung
In diesem Artikel haben wir gelernt, einen einfachen Job in Kubernetes zu erstellen. Wir haben gesehen, wie wir die zeitliche Begrenzung des Jobs durchsetzen können, um sicherzustellen, dass der Job nicht zu lange ausgeführt wird. Am Ende sahen wir die Schritte zur Erstellung eines Cronjobs, der von selbst erstellt wird, um die Aufgabe zum angegebenen Zeitpunkt zu erledigen. Dieses Cronjob-Objekt in Kubernetes ähnelt dem Cronjob-Job in Linux.