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

  1. 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?

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

einfache Job-Definition

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

ein-einen-einfachen-Job erstellen

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

get-simple-job-pod

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

delete-the-simple-job

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

Arbeitsplatz-Definition

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

Einen Arbeitsplatz schaffen

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

Kündigungsgrund -

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

delete-the-job-with-enforce-time-limit

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

cronjob-Definition

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

create-a-cronjob

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

Beobachten-Kronjobs-Laufen-nach-jeder-1-Minute

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

check-logs-of-individual-pod

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

delete-the-cronjob

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.

Das könnte dich auch interessieren …