Kubernetes

Kubernetes-Jobs und Cron-Jobs

Kubernetes-Jobs und Cron-Jobs
Die meisten Anwendungen, die auf einem verteilten System wie Kubernetes laufen, sind immer live wie Webserver oder Datenbanken oder API-Server. Aber es gibt eine separate Klasse von Objekten, die einmal ausgeführt werden sollen oder nur ab und zu aufwachen und ihren Lauf nehmen. Regelmäßige Jobs wie die Erneuerung von TLS-Zertifikaten mit Agenten wie Certbot sind ein klassisches Beispiel für solche Jobs, die auf traditionellen Servern ausgeführt werden. Dies geschieht mit dem Cron-Dienstprogramm in Unix-Systemen.

Kubernetes hat eine analoge Methode, einmalige Prozesse auszuführen Arbeitsplätze und periodische Prozesse wie Zeitgesteuerte Aufgaben.

Wir beginnen mit einem typischen Beispiel dafür, was Jobs sind, und zeigen ein Standardbeispiel aus den offiziellen Docs. Aus diesem Beispiel wird leicht zu verstehen, was es bedeutet, einen Job erfolgreich im Kubernetes-Kontext auszuführen.

Um weiterzumachen, würde ich Ihnen empfehlen, Kataconda Playground für Kubernetes zu verwenden, das einen sofort einsatzbereiten Kubernetes-Cluster bereitstellt, ohne dass Sie einen manuell konfigurieren oder einen Produktionscluster für Experimente riskieren müssen.

Kubernetes-Jobs

Jobs sind Kubernetes-Abstraktionen auf höherer Ebene, ähnlich wie ReplicaSets und Deployments. Aber im Gegensatz zu Pods, die von Deployments und ReplicaSets verwaltet werden, beenden Pods, die einen Job ausführen, ihre Arbeit und werden beendet.

Wenn eine bestimmte Anzahl von Pods abgeschlossen ist, gilt der Job als erfolgreich abgeschlossen. Was sind die Kriterien, die eine erfolgreiche Beendigung eines Pods definieren, werden wir in der YAML-Datei des Jobs definieren. Dann stellt der Job-Controller sicher, dass eine bestimmte Anzahl von Pods erfolgreich beendet wurde und der Job als abgeschlossen gilt.

Lassen Sie uns einen Job erstellen, der Ziffern von pi bis zu 2000 Stellen in seinen Protokollen druckt, die wir untersuchen werden. Erstellen Sie eine Datei und rufen Sie sie auf mein Job.yaml und speichern Sie die folgenden Inhalte darin;

apiVersion: Batch/v1
Art: Job
Metadaten:
Name: pi
spezifikation:
Vorlage:
spezifikation:
Behälter:
- Name: pi
Bild: Perle
Befehl: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
Neustart-Richtlinie: Nie
backoffLimit: 4

Erstellen Sie den Job mit dieser Datei:

$ kubectl create -f ./Job.yaml

Sie werden feststellen, dass die Ausführung des Jobs einige Sekunden bis einige Minuten dauert und sobald er abgeschlossen ist. Wenn Sie versuchen, alle Pods aufzulisten, verwenden Sie Folgendes:

$ kubectl Pods erhalten
NAME       BEREIT     STATUS      NEUSTARTEN   ALTER
pi-wg6zp   0/1       Abgeschlossen   0          50 s

Sie werden sehen, dass der Status des pi-bezogenen Pods ist Abgeschlossen nicht ausgeführt oder beendet.Sie können auch den Namen des Pods kopieren, damit wir überprüfen können, ob pi tatsächlich auf 2000 Stellen berechnet wurde. Der spezifische Name des Pods kann in Ihrem Fall abweichen.

$ kubectl logs pi-wg6zp

Interessanterweise hat der Pod nicht Beendet es ist immer noch sehr aktiv, nur dass darin keine Anwendungen laufen. Ähnlich wie wenn Sie Ihren Computer einfach einschalten und nicht verwenden. Wenn der Pod beendet worden wäre, hätten wir die Protokolle überhaupt nicht daraus ziehen können.

Führen Sie den folgenden Befehl aus, um den Job und alle erstellten Pods zu bereinigen:

$ kubectl delete -f my-jobs.yaml

In der offiziellen Dokumentation erfahren Sie mehr über die Job-Spezifikationen und wie Sie Ihre Spezifikation schreiben.

Zeitgesteuerte Aufgaben

Cron-Jobs ähneln dem Cron-Dienstprogramm in Unix, das regelmäßig nach einem von uns gewünschten Zeitplan ausgeführt wird. Zum Zeitpunkt des Schreibens dieses Artikels ist es in Kubernetes keine superstabile Sache, daher sollten Sie bei der Verwendung vorsichtig sein. Um die offiziellen Dokumente zu zitieren:

„Ein Cron-Job erstellt ein Job-Objekt Über einmal pro Ausführungszeit seines Zeitplans. Wir sagen „ungefähr“, weil es bestimmte Umstände gibt, in denen möglicherweise zwei oder gar keine Arbeitsplätze geschaffen werden. Wir versuchen, diese selten zu machen, verhindern sie aber nicht vollständig. Daher sollten Arbeitsplätze sein idempotent

Der Begriff idempotent bedeutet, dass der Cron-Job, ob er ein- oder zweimal oder beliebig oft ausgeführt wird, die gleiche Wirkung auf das System hat. Die Suche nach Updates und die Überwachung dieser Art von Vorgängen kann als idempotent angesehen werden. Aber das Ändern von Daten oder das Schreiben in eine Datenbank gehören nicht dazu.

Lassen Sie uns einen Cron-Job schreiben, der ein "Hello, World" schreiben würde!”-Nachricht in seinen Protokollen zusammen mit einem Zeitstempel, wann diese Nachricht geschrieben wurde. Erstellen Sie eine Datei namens my-cronjob.yaml und schreibe dazu folgenden Inhalt:

apiVersion: batch/v1beta1
Art: CronJob
Metadaten:
Name: mein-cronjob
spezifikation:
Anhang 1 * * * *"
JobVorlage:
spezifikation:
Vorlage:
spezifikation:
Behälter:
- Name: hallo
Bild: Busybox
Argumente:
- /bin/sh
- -c
- Datum; echo Hallo vom Kubernetes-Cluster
restartPolicy: OnFailure

Der Zeitplan-Teil des Jobs ist der wichtigste. Es folgt der Standard-Cron-Konvention, es gibt eine Liste von Zahlen, die durch Leerzeichen getrennt sind. Die fünf Zahlen repräsentieren,

  1. Minute (0-59)
  2. Stunde (0-23)
  3. Tag des Monats (1-31)
  4. Monat (1-12)
  5. Wochentag (0-6) ab Sonntag

Verwenden von Sternchen (*) für ein Feld bedeutet jeden verfügbaren Wert dieses Felds (wie ein Platzhalter) und der erste Eintrag in unserem Zeitplan „*/1 * * * *“ gab an, dass der Job jede Minute ausgeführt werden muss, unabhängig von Stunde, Tag oder Monat month das Jahr. Bei Verwendung von */5 wird die Nachricht alle 5 Minuten gedruckt.

Weitere Informationen zur cronjob-yaml-Spezifikation finden Sie in den offiziellen Dokumenten learn. Sehen wir uns alle Pods an, die für den Job laufen, den wir my-cronjob genannt haben.

$ kubectl Pods erhalten
NAME                     BEREIT     STATUS      NEUSTARTEN   ALTER
my-cronjob-1534457100-hfhzf   0/1       Abgeschlossen   0          2 m
my-cronjob-1534457160-gk85l   0/1       Abgeschlossen   0          1m
my-cronjob-1534457220-bj22x   0/1       Abgeschlossen   0          57s

Das Durchsuchen der Protokolle jedes der Pods würde eine einzelne Nachricht mit einem Zeitstempel anzeigen, da sie alle zu unterschiedlichen Zeiten erstellt wurden, haben sie alle unterschiedliche Zeitstempel.

$ kubectl log my-cronjob-1534457100-hfhzf

Um den Cronjob zu löschen, führen Sie einfach aus:

$ kubectl delete -f mein-cronjob.yaml

Dadurch werden auch alle Pods gelöscht, die im Rahmen des ordnungsgemäßen Prozesses erstellt wurden.

Verweise

Sie können hier mehr über Kubernetes-Jobs erfahren und für Cron-Jobs können Sie diesen Abschnitt der gut strukturierten Dokumentation besuchen.

Top 10 Spiele zum Spielen auf Ubuntu
Die Windows-Plattform war eine der dominierenden Plattformen für Spiele aufgrund des großen Prozentsatzes von Spielen, die heute entwickelt werden, um...
Die 5 besten Arcade-Spiele für Linux
Heutzutage sind Computer ernsthafte Maschinen, die zum Spielen verwendet werden. Wenn du den neuen Highscore nicht bekommst, weißt du was ich meine. I...
Schlacht um Wesnoth 1.13.6 Entwicklung veröffentlicht
Schlacht um Wesnoth 1.13.6, das letzten Monat veröffentlicht wurde, ist die sechste Entwicklungsversion im 1.13.x-Serie und bietet eine Reihe von Verb...