Tasks

Über Tasks

Im Gegensatz zu Anwendungen mit langer Laufzeit werden Tasks für eine begrenzte Zeit ausgeführt und dann angehalten. Tasks werden je nach Konfiguration in der übergeordneten App in eigenen Containern ausgeführt und können so konfiguriert werden, dass nur begrenzte Ressourcen verwendet werden (z.B. CPU-/Arbeitsspeicher/flüchtiger Laufwerkspeicher).

Anwendungsfälle für Aufgaben

  • Datenbank migrieren
  • Batchjob ausführen (geplant/nicht geplant)
  • E-Mails senden
  • Daten umwandeln (ETL)
  • Daten verarbeiten (Upload/Sicherung/Download)

Funktionsweise von Tasks

Aufgaben werden asynchron ausgeführt und unabhängig von der übergeordneten App oder anderen Tasks ausgeführt, die in derselben App ausgeführt werden. Für eine Anwendung, die für das Ausführen von Tasks erstellt wurde, wurden keine Routen erstellt oder zugewiesen. Der Ausführen-Lebenszyklus wird übersprungen. Die Lebenszyklen Quellcode-Upload und Build werden fortgesetzt und führen zu einem Container-Image, das zum Ausführen von Tasks nach dem Übertragen der App verwendet wird (siehe „App-Lebenszyklus“ unterAnwendung bereitstellen).

Der Lebenszyklus von Tasks sieht so aus:

  1. Sie übertragen eine App zum Ausführen von Aufgaben mit dem Befehl kf push APP_NAME --task.
  2. Mit dem Befehl kf run-task APP_NAME führen Sie eine Task in der App aus. Tasks übernimmt die Umgebungsvariablen, Dienstbindungen, die Ressourcenzuweisung, den Startbefehl und die Sicherheitsgruppen, die an die Anwendung gebunden sind.
  3. Kf erstellt ein Tekton-PipelineRun mit Werten aus der App und Parametern des Befehls run-task.
  4. Tekton PipelineRun erstellt einen Kubernetes-Pod, der einen Container basierend auf den Konfigurationen in der Anwendung und der Task startet.
  5. Die Aufgabenausführung wird gestoppt (Task wird beendet oder manuell beendet), der zugrunde liegende Pod wird entweder angehalten oder beendet. Pods angehaltener Tasks bleiben erhalten und über den Befehl kf logs APP_NAME --task kann auf Task-Logs zugegriffen werden.
  6. Wenn Sie einen Task beenden, bevor er anhält, wird der Tekton-PipelineRun abgebrochen (siehe Einen PipelineRun abbrechen), der zugrunde liegende Pod wird zusammen mit den Logs gelöscht. Die Logs der geplanten Tasks werden an die Logging-Streams auf Clusterebene gesendet, wenn sie konfiguriert sind, z.B. Stackdriver oder Fluentd.
  7. Ist die Anzahl der Tasks, die für eine App 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 Space der zugrunde liegenden etcd-Datenbank nicht zu belegen. Standardmäßig behält Kf nur die neuesten 500 Tasks pro App. Sobald die Anzahl der Tasks 500 erreicht hat, werden die ältesten Tasks (zusammen mit den zugrunde liegenden Pods und Logs) automatisch gelöscht.

Tasks-Logging und Ausführungsverlauf

Alle Daten oder Nachrichten, die Tasks an STDOUT oder STDERR ausgibt, sind über den Befehl kf logs APP_NAME --task verfügbar. Beim Logging auf Clusterebene (z. B. Stackdriver oder Fluentd) werden die Task-Logs an das konfigurierte Logging-Ziel gesendet.

Aufgaben planen

Wie oben beschrieben, können Aufgaben mit dem Befehl kf run-task APP_NAME asynchron ausgeführt werden. Alternativ können Sie Tasks für die Ausführung 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 Aufgaben automatisch nach einem angegebenen Zeitplan unix-cron ausgeführt werden.

Aufgabenplanung

Erstellen und planen Sie einen Job zur Ausführung der Aufgabe. Ein Job beschreibt die auszuführende Aufgabe und verwaltet automatisch die Aufgabenerstellung.

Aufgaben werden nach dem Zeitplan erstellt, auch wenn vorherige Ausführungen der Aufgabe noch ausgeführt werden. Wenn Ausführungen aus irgendeinem Grund verpasst werden, wird nur die zuletzt verpasste Ausführung ausgeführt, wenn das System wiederhergestellt wird.

Wenn Sie einen Job löschen, werden alle zugehörigen Aufgaben gelöscht. Wenn noch zugehörige Aufgaben in Bearbeitung waren, werden sie ohne Löschen erzwungen.

Aufgaben, die von einem geplanten Job erstellt wurden, unterliegen weiterhin der Aufbewahrungsrichtlinie für Aufgaben.

Unterschiede zum PCF-Planer

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 PCF-Planer-Verhalten replizieren. Erstellen Sie dazu mehrere Jobs, einen für jeden Zeitplan.