À propos des tâches
Contrairement aux applications (processus de longue durée), les tâches s'exécutent pendant une durée limitée, puis s'arrêtent. Les tâches s'exécutent dans leurs propres conteneurs en fonction de la configuration de l'application parente et peuvent être configurées pour utiliser des ressources limitées (telles que processeur/mémoire/espace de stockage sur disque).
Cas d'utilisation des tâches
- Migrer une base de données
- Exécuter un job par lot (planifié/non planifié)
- Envoyer un e-mail
- Transformer des données (ETL)
- Traiter des données (importation/sauvegarde/téléchargement)
Fonctionnement des tâches
Les tâches sont exécutées de manière asynchrone et fonctionnent indépendamment de l'application parente ou des autres tâches exécutées sur la même application. Aucune route créée ou attribuée n'est associée à une application utilisée pour exécuter des tâches, et le cycle de vie Exécuter est ignoré. Les cycles de vie Importation du code source et Compilation se poursuivent et aboutissent à une image de conteneur utilisée pour exécuter les tâches après le déploiement de l'application (voir les cycles de vie de l'application dans Déployer une application).
Le cycle de vie d'une tâche est le suivant :
- Vous transférez une application pour exécuter des tâches à l'aide de la commande
kf push APP_NAME --task. - Pour exécuter une tâche sur l'application, vous utilisez la commande
kf run-task APP_NAME. La tâche hérite des variables d'environnement, des liaisons de service, de l'allocation des ressources, de la commande de démarrage et des groupes de sécurité associés à l'application. - Kf crée un PipelineRun Tekton à partir des valeurs de l'application et des paramètres de la commande
run-task. - Le PipelineRun Tekton crée un pod Kubernetes qui lance un conteneur basé sur les configurations de l'application et de la tâche.
- L'exécution de la tâche s'arrête (la tâche se termine ou est terminée manuellement), et le pod sous-jacent est arrêté ou interrompu. Les pods des tâches arrêtées sont conservés. Les journaux des tâches sont donc accessibles via la commande
kf logs APP_NAME --task. - Si vous terminez une tâche avant qu'elle ne s'arrête, le PipelineRun Tekton est annulé (consultez la section Annuler un PipelineRun) et le pod sous-jacent et les journaux sont supprimés. Les journaux des tâches terminées sont transmis aux flux de journalisation au niveau du cluster s’ils sont configurés (par exemple, Stackdriver, Fluentd).
- Si le nombre de tâches exécutées sur une application dépasse 500, les tâches les plus anciennes sont automatiquement supprimées.
Règles de conservation des tâches
Les tâches sont créées en tant que ressources personnalisées dans le cluster Kubernetes. Il est donc important de ne pas épuiser l'espace de la base de données etcd sous-jacente. Par défaut, Kf ne conserve que les 500 dernières tâches par application. Une fois que le nombre de tâches atteint la limite de 500, les tâches les plus anciennes sont automatiquement supprimées, tout comme le sont les pods et journaux sous-jacents.
Journalisation et historique d'exécution des tâches
Les données ou les messages générés par la tâche dans STDOUT ou STDERR sont disponibles via la commande kf logs APP_NAME --task. Un mécanisme de journalisation au niveau du cluster (tel que Stackdriver, Fluentd) envoie les journaux de tâches à la destination de journalisation configurée.
Planifier des tâches
Comme décrit ci-dessus, les tâches peuvent être exécutées de manière asynchrone à l'aide de la commande kf run-task APP_NAME.
Vous pouvez également planifier des tâches à exécuter en créant un job à l'aide de la commande kf create-job, puis en la planifiant avec la commande kf schedule-job JOB_NAME. Vous pouvez programmer un job pour exécuter automatiquement des tâches selon une planification unix-cron spécifiée.
Comment sont planifiées les tâches
Créez et planifiez un job pour exécuter la tâche. Un job décrit une tâche à exécuter et gère automatiquement sa création.
Les tâches sont créées conformément à la planification, même si leurs exécutions précédentes sont toujours en cours. Si des exécutions sont manquées pour une raison quelconque, seule la dernière exécution manquée est relancée lors de la récupération du système.
La suppression d'un job entraîne la suppression de toutes les tâches associées. Si des tâches associées étaient toujours en cours, elles sont supprimées de force sans attendre qu'elles se terminent.
Les tâches créées par un job planifié sont toujours soumises aux règles de conservation des tâches.
Différences avec PCF Scheduler
PCF Scheduler autorise plusieurs planifications pour un seul job, tandis que Kf n'accepte qu'une seule planification par job. Vous pouvez répliquer le comportement de PCF Scheduler en créant plusieurs jobs, un pour chaque planification.