Pods mit Jobs und Cronjobs ausführen

KubernetesKubernetesBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In Kubernetes werden Jobs und Cronjobs verwendet, um Aufgaben auszuführen, die nicht Teil einer langlaufenden Anwendung oder eines langlaufenden Dienstes sind. Jobs werden für einmalige Aufgaben verwendet, während Cronjobs für Aufgaben eingesetzt werden, die in regelmäßigen Abständen ausgeführt werden müssen.

In diesem Lab (Praktikum) werden wir lernen, wie man Pods mit Jobs und Cronjobs in Kubernetes ausführt. Wir beginnen mit einem einfachen Beispiel und erweitern uns schrittweise zu komplexeren Beispielen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-11300{{"Pods mit Jobs und Cronjobs ausführen"}} kubernetes/get -.-> lab-11300{{"Pods mit Jobs und Cronjobs ausführen"}} kubernetes/create -.-> lab-11300{{"Pods mit Jobs und Cronjobs ausführen"}} kubernetes/apply -.-> lab-11300{{"Pods mit Jobs und Cronjobs ausführen"}} kubernetes/logs -.-> lab-11300{{"Pods mit Jobs und Cronjobs ausführen"}} end

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum Standardprojektordner:

    cd /home/labex/project
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    • Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Je nach Leistung Ihres Systems kann es einige Minuten dauern, bis Minikube gestartet ist.
  3. Überprüfen Sie, ob Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    • Suchen Sie nach Komponenten wie kubelet und apiserver, die als Running (Läuft) aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.

Ausführen eines Pods mit einem Job

Der erste Schritt besteht darin, einen Pod zu erstellen, der einen Job ausführt. In diesem Beispiel werden wir einen Pod erstellen, der einen Befehl ausführt, um "Hello, World!" in die Konsole auszugeben.

Erstellen Sie eine Datei mit dem Namen job.yaml in /home/labex/project/ mit folgendem Inhalt:

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["sh", "-c", 'echo "Hello, World!"']
      restartPolicy: Never
  backoffLimit: 4

In dieser Datei definieren wir einen Job namens hello-job, der einen einzelnen Container namens hello ausführt. Der Container verwendet das busybox-Image und führt einen Befehl aus, um "Hello, World!" in die Konsole auszugeben.

Um den Job zu erstellen, führen Sie folgenden Befehl aus:

kubectl apply -f job.yaml

Sie können den Status des Jobs überprüfen, indem Sie folgenden Befehl ausführen:

kubectl get jobs

Sobald der Job abgeschlossen ist, können Sie die Logs des Pods anzeigen, indem Sie folgenden Befehl ausführen:

kubectl logs <POD_NAME>

Ersetzen Sie <POD_NAME> durch den Namen des Pods, der den Job ausgeführt hat. Sie können den POD_NAME mit dem Befehl kubectl get pods |grep hello-job erhalten.

Herzlichen Glückwunsch, Sie haben erfolgreich einen Pod mit einem Job in Kubernetes ausgeführt!

Ausführen eines Jobs mit mehreren Pods

In einigen Fällen müssen Sie möglicherweise einen Job mit mehreren Pods ausführen, um eine bessere Leistung zu erzielen. In diesem Beispiel werden wir einen Job erstellen, der mehrere Pods ausführt, um Dateien von einem Remote-Server herunterzuladen.

Erstellen Sie eine Datei mit dem Namen multi-pod-job.yaml in /home/labex/project/ mit folgendem Inhalt:

apiVersion: batch/v1
kind: Job
metadata:
  name: download-job
spec:
  completions: 3
  parallelism: 2
  template:
    spec:
      containers:
        - name: downloader
          image: curlimages/curl
          command: ["curl", "-o", "/data/file", "http://example.com/file"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
      restartPolicy: Never
      volumes:
        - name: data-volume
          emptyDir: {}
  backoffLimit: 4

In dieser Datei definieren wir einen Job namens download-job, der mehrere Pods mit dem curlimages/curl-Image ausführt. Jeder Pod lädt eine Datei von http://example.com/file herunter und speichert sie auf einem gemeinsamen Volume namens data-volume.

Um den Job zu erstellen, führen Sie folgenden Befehl aus:

kubectl apply -f multi-pod-job.yaml

Sie können den Status des Jobs überprüfen, indem Sie folgenden Befehl ausführen:

kubectl get jobs

Sobald der Job abgeschlossen ist, können Sie die Logs eines Pods anzeigen, indem Sie folgenden Befehl ausführen:

kubectl logs <POD_NAME>

Ersetzen Sie <POD_NAME> durch den Namen eines beliebigen Pods, der den Job ausgeführt hat. Sie können das Download-Log der Datei anzeigen. Sie können den POD_NAME mit dem Befehl kubectl get pod |grep download-job erhalten.

Herzlichen Glückwunsch, Sie haben erfolgreich einen Job mit mehreren Pods in Kubernetes ausgeführt!

Ausführen eines Cronjobs

Neben einmaligen Jobs unterstützt Kubernetes auch Cronjobs (Zeitplangesteuerte Jobs), um Aufgaben in regelmäßigen Abständen auszuführen. In diesem Beispiel werden wir einen Cronjob erstellen, der einen Befehl jede Minute ausführt.

Erstellen Sie eine Datei mit dem Namen cronjob.yaml in /home/labex/project/ mit folgendem Inhalt:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["sh", "-c", 'echo "Hello, World!"']
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3

In dieser Datei definieren wir einen Cronjob namens hello-cronjob, der einen Befehl jede Minute ausführt. Der Befehl ist derselbe wie in unserem ersten Beispiel, um "Hello, World!" in die Konsole auszugeben.

Um den Cronjob zu erstellen, führen Sie folgenden Befehl aus:

kubectl apply -f cronjob.yaml

Sie können den Status des Cronjobs überprüfen, indem Sie folgenden Befehl ausführen:

kubectl get cronjobs

Sobald der Cronjob läuft, können Sie die Logs eines Pods anzeigen, indem Sie folgenden Befehl ausführen:

kubectl logs -f <POD_NAME>

Ersetzen Sie <POD_NAME> durch den Namen eines beliebigen Pods, der vom Cronjob erstellt wurde. Sie können den POD_NAME mit dem Befehl kubectl get pod |grep hello-cronjob erhalten.

Herzlichen Glückwunsch, Sie haben erfolgreich einen Cronjob in Kubernetes ausgeführt!

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Pods mit Jobs und Cronjobs in Kubernetes ausführt. Wir begannen mit einem einfachen Beispiel eines Pods, der einen Job ausführt, und erweiterten uns allmählich zu komplexeren Beispielen von Jobs mit mehreren Pods und Cronjobs, die in regelmäßigen Abständen ausgeführt werden. Mit diesen Kenntnissen können Sie verschiedene Aufgaben ausführen, die nicht Teil einer langlaufenden Anwendung oder eines Dienstes in Kubernetes sind.