Allgemeine Informationen zu Tasks
Im Gegensatz zu Anwendungen mit langer Laufzeit werden Tasks für eine begrenzte Zeit ausgeführt und dann beendet. Tasks werden je nach Konfiguration in der übergeordneten Anwendung in eigenen Containern ausgeführt und können so konfiguriert werden, dass nur begrenzte Ressourcen verwendet werden (wie CPU/Arbeitsspeicher/flüchtiger Laufwerkspeicher).
Anwendungsfälle für Tasks
- Datenbank migrieren
- Batchjob ausführen (geplant/nicht geplant)
- E-Mails senden
- Daten umwandeln (ETL)
- Daten verarbeiten (Upload/Sicherung/Download)
Funktionsweise von Tasks
Tasks werden asynchron und unabhängig von der übergeordneten Anwendung oder anderen Tasks ausgeführt, die in derselben Anwendung laufen. Für eine Anwendung, die für das Ausführen von Tasks erstellt wurde, werden keine Routen erstellt oder zugewiesen. Der Lebenszyklus Ausführen wird übersprungen. Die Lebenszyklen Upload des Quellcodes und Build werden ausgeführt und führen zu einem Container-Image, das zum Ausführen von Tasks nach dem Übertragen der Anwendung verwendet wird (siehe die Anwendungslebenszyklen unter Anwendung bereitstellen).
Der Lebenszyklus von Tasks sieht so aus:
- Sie übertragen eine Anwendung zum Ausführen von Tasks mit dem Befehl
kf push APP_NAME --task
. - Sie führen mit dem Befehl
kf run-task APP_NAME
Tasks in der Anwendung aus. Tasks übernehmen die Umgebungsvariablen, Dienstbindungen, die Ressourcenzuweisung, den Startbefehl und die Sicherheitsgruppen, die an die Anwendung gebunden sind. - Kf erstellt einen Tekton-PipelineRun mit Werten aus der Anwendung und Parametern aus dem Befehl
run-task
. - Der Tekton-PipelineRun erstellt einen Kubernetes-Pod, der anhand der Konfigurationen in der Anwendung und dem Task einen Container startet.
- Die Task-Ausführung wird gestoppt (Task wird manuell beendet), der zugrunde liegende Pod wird entweder angehalten oder beendet. Pods gestoppter Tasks bleiben erhalten und über den Befehl
kf logs APP_NAME --task
kann auf Task-Logs zugegriffen werden. - Wenn Sie Tasks beenden, bevor sie gestoppt werden, wird der Tekton-PipelineRun abgebrochen (siehe Pipeline-Ausführung abbrechen) und der zugrunde liegende Pod wird zusammen mit den Logs gelöscht. Die Logs beendeter Tasks werden an die Logging-Streams auf Clusterebene gesendet, wenn sie konfiguriert sind (zum Beispiel Stackdriver oder Fluentd).
- Ist die Anzahl der Tasks, die in einer Anwendung ausgeführt werden, größer als 500, werden die ältesten Tasks automatisch gelöscht.
Aufbewahrungsrichtlinie für Tasks
Tasks werden im Kubernetes-Cluster als benutzerdefinierte Ressourcen erstellt. Daher ist es wichtig, den Speicherplatz der zugrunde liegenden etcd
-Datenbank nicht vollständig zu belegen. Standardmäßig behält Kf nur die neuesten 500 Tasks pro Anwendung. Sobald die Anzahl der Tasks 500 erreicht hat, werden die ältesten zusammen mit den zugrunde liegenden Pods und Logs automatisch gelöscht.
Task-Logging und Ausführungsverlauf
Alle Daten oder Nachrichten, die Tasks an STDOUT oder STDERR ausgeben, sind über den Befehl kf logs APP_NAME --task
verfügbar. Beim Logging auf Clusterebene (zum Beispiel mit Stackdriver oder Fluentd) werden die Task-Logs an das konfigurierte Logging-Ziel gesendet.
Tasks planen
Wie oben beschrieben, können Tasks mit dem Befehl kf run-task APP_NAME
asynchron ausgeführt werden.
Alternativ können Sie die Ausführung von Tasks planen. Erstellen Sie dazu zuerst einen Job mit dem Befehl kf create-job
und planen Sie ihn dann mit dem Befehl kf schedule-job JOB_NAME
. Sie können diesen Job so planen, dass Tasks automatisch nach einem festgelegten unix-cron-Zeitplan ausgeführt werden.
Task-Planung
Erstellen und planen Sie einen Job zum Ausführen von Tasks. Ein Job beschreibt die auszuführenden Tasks und verwaltet automatisch die Task-Erstellung.
Tasks werden nach dem Zeitplan erstellt, auch wenn vorherige Task-Ausführungen noch laufen. Wenn Ausführungen aus irgendeinem Grund verpasst werden, findet nach der Wiederherstellung des Systems nur die zuletzt verpasste Ausführung statt.
Wenn Sie einen Job löschen, werden auch alle zugehörigen Tasks gelöscht. Falls noch Tasks in Bearbeitung sind, werden sie vor dem Abschluss gelöscht.
Tasks, die durch einen geplanten Job erstellt wurden, unterliegen trotzdem der Aufbewahrungsrichtlinie für Tasks.
Unterschiede zu PCF Scheduler
PCF Scheduler ermöglicht mehrere Zeitpläne für einen einzelnen Job, während Kf nur einen einzigen Zeitplan pro Job unterstützt. Sie können das Verhalten von PCF Scheduler replizieren, indem Sie mehrere Jobs erstellen – einen für jeden Zeitplan.