Kubernetes hat eine analoge Art, einmalige Prozesse auszuführen Arbeitsplätze und periodische Prozesse wie Zeitgesteuerte Aufgaben.
Wir beginnen mit einem typischen Beispiel dafür, welche Jobs sind, und zeigen ein Standardbeispiel aus den offiziellen Dokumenten. Aus diesem Beispiel wird es leicht sein zu verstehen, was es bedeutet, einen Job erfolgreich im Kontext von Kubernetes auszuführen.
Um mitzumachen, empfehle ich Ihnen, den Kataconda -Spielplatz für Kubernetes zu verwenden, der einen Kubernetes -Cluster aus dem Box bietet, ohne dass Sie einen manuell konfigurieren oder einen Produktionscluster für Experimente riskieren müssen.
Jobs sind Kubernetes -Abstraktionen auf höherer Ebene, ähnlich wie Replikatetten und Bereitstellungen. Aber im Gegensatz zu Pods, die von Bereitstellungen und Repliken verwaltet werden, vervollständigen Pods, die einen Job ausführen.
Wenn eine bestimmte Anzahl von Pods abgeschlossen ist, soll der Job erfolgreich abgeschlossen sein. Was sind die Kriterien, die eine erfolgreiche Beendigung eines Pod definieren, was wir in der YAML -Datei des Jobs definieren werden. Dann stellt der Jobcontroller sicher, dass eine bestimmte Anzahl von Pods erfolgreich gekündigt hat und der Job abgeschlossen sein soll.
Lassen Sie uns einen Job erstellen, der Ziffern von PI bis zu 2000 Orten in seinen Protokollen druckt, die wir untersuchen werden. Erstellen Sie eine Datei und rufen Sie sie an mein Job.Yaml und speichern die folgenden Inhalte darin;
apiversion: batch/v1
Art: Job
Metadaten:
Name: pi
Spezifikation:
Vorlage:
Spezifikation:
Behälter:
- Name: pi
Bild: Perl
Befehl: ["Perl", "-mbignum = bpi", "-wle", "Print BPI (2000)"]
Neustartpolitik: Nie
Backofflimit: 4
Erstellen Sie den Job mit dieser Datei:
$ kubectl erstellen -f ./Arbeit.YamlSie werden feststellen, dass der Job mit ein paar Sekunden bis ein paar Minuten zum Laufen dauert und sobald dies erledigt ist. Wenn Sie versuchen, alle Schoten mit:
$ kubectl bekommen Pods
Name Ready Status neu startet das Alter neu
pi-wg6zp 0/1 abgeschlossen 0 50s
Sie werden sehen, dass der Status des PI -bezogenen Pod lautet Vollendet nicht laufen oder gekündigt.Sie können auch den Namen des Pod kopieren, damit wir überprüfen können, ob PI tatsächlich auf 2000 Ziffern berechnet wurde. Der spezifische Name der POD kann sich in Ihrem Fall unterscheiden.
$ kubectl logs pi-wg6zp
Interessanterweise hat der Pod nicht Beendet Es ist immer noch sehr aktiv, nur dass es keine Anwendungen darin gibt. Ähnlich wie nur Ihren Computer einzuschalten und ihn nicht zu verwenden. Wenn die Schote beendet worden wäre, hätten wir überhaupt nicht in der Lage gewesen.
Führen Sie den Befehl aus:
$ kubectl löschen -f my -jobs.YamlWeitere Informationen zu den Arbeitsspezifikationen und zum Schreiben Ihrer Spezifikation in der offiziellen Dokumentation finden Sie in der offiziellen Dokumentation.
Zeitgesteuerte Aufgaben
Cron -Jobs ähneln dem Cron -Versorgungsunternehmen in Unix, das regelmäßig gemäß einem Zeitplan läuft, den wir uns wünschen. Es ist keine Superstable in Kubernetes zum Zeitpunkt dieses Schreibens, sodass Sie möglicherweise vorsichtig mit der Verwendung sein möchten. Um die offiziellen Dokumente zu zitieren:
„Ein Cron -Job schafft ein Jobobjekt um Einmal pro Ausführungszeit des Zeitplans. Wir sagen „über“, weil es bestimmte Umstände gibt, unter denen zwei Jobs geschaffen werden oder kein Job erstellt werden könnten. Wir versuchen, diese selten zu machen, verhindern sie aber nicht vollständig. Daher sollten Jobs sein idempotent”
Der Begriff idempotent bedeutet, dass der Cron -Job, unabhängig davon. Überprüfung nach Aktualisierungen, Überwachung dieser Art von Vorgängen kann als ideMpotent betrachtet werden. Das Ändern von Daten oder das Schreiben in eine Datenbank gehört jedoch nicht zu diesen.
Schreiben wir einen Cron -Job, der eine „Hallo, Welt schreiben würde!Meldung in seinen Protokollen zusammen mit einem Zeitstempel, als diese Nachricht geschrieben wurde. Datei erstellen namens My-cronjob.Yaml und dazu schreiben Sie den folgenden Inhalt:
apiversion: batch/v1beta1Der 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,
Verwenden von Sternchen (*) Für ein Feld bedeutet jeder verfügbare Wert dieses Feldes (wie eine Platzkarte) und der erste Eintrag in unserem Zeitplan „ */1 * * * * *“, dass der Job jede Minute unabhängig von der Stunde, dem Tag oder Monat von durchgeführt werden muss das Jahr. Drucken Sie die Nachricht mit */5 alle 5 Minuten drucken.
Sie können mehr über die Cronjob Yaml -Spezifikation in den offiziellen Dokumenten erfahren. Lassen Sie uns alle Schoten sehen, die für den Job laufen, den wir My-cronjob nannten.
$ kubectl bekommen Pods
Name Ready Status neu startet das Alter neu
my-cronjob-1534457100-hfhzf 0/1 abgeschlossen 0 2m
my-cronjob-1534457160-gk85l 0/1 abgeschlossen 0 1m
my-cronjob-1534457220-bj22x 0/1 abgeschlossen 0 57s
Wenn Sie sich in die Protokolle eines jeden Pods graben, werden eine einzige Nachricht mit einem Zeitstempel aufgezeigt.
$ kubectl log my-cronjob-1534457100-hfhzf
Um den Cronjob zu löschen, rennen Sie einfach:
$ kubectl löschen -f my -cronjob.Yaml
Dadurch werden auch Schoten gelöscht, die im ordnungsgemäßen Prozess erstellt wurden.
Verweise
Weitere Informationen zu Kubernetes-Jobs finden Sie hier und für Cron-Jobs können Sie diesen Abschnitt ihrer gut strukturierten Dokumentation besuchen.