À propos de Tasks
Contrairement aux applications (processus de longue durée), Tasks s'exécute pendant une durée limitée, puis s'arrête. 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 de Tasks
- Migrer une base de données
- Exécuter une tâche par lots (planifiée/non planifiée)
- Envoyer un e-mail
- Transformer des données (ETL)
- Traiter des données (importation/sauvegarde/téléchargement)
Fonctionnement de Tasks
Les tâches sont exécutées de manière asynchrone et s'exécutent indépendamment de l'application parente ou d'autres tâches exécutées sur la même application. Aucune route créée ou attribuée n'est associée à une application créée pour exécuter Tasks, et le cycle de vie Exécuter est ignoré. Les cycles de vie Importation du code source et Build se poursuivent et aboutissent à une image de conteneur utilisée pour exécuter Tasks après le déploiement de l'application (voir les cycles de vie de l'application sur la page Déployer une application).
Le cycle de vie d'une tâche est le suivant :
- 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, 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 pipeline Tekton PipelineRun à partir des valeurs de l'application et des paramètres de la commande
run-task
. - Le pipeline Tekton PipelineRun 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, et 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 pipeline Tekton PipelineRun est annulé (consultez la section Annuler un pipeline PipelineRun), 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 est supérieur à 500, les tâches les plus anciennes sont automatiquement supprimées.
Règle de conservation de Tasks
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 (ainsi que les pods et les journaux sous-jacents) sont automatiquement supprimées.
Journalisation et historique d'exécution de Tasks
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 (Tasks) à exécuter en créant une tâche (Job) à l'aide de la commande kf create-job
, puis en la planifiant avec la commande kf schedule-job JOB_NAME
. Vous pouvez programmer une tâche (Job) pour exécuter automatiquement des tâches (Tasks) selon une planification unix-cron spécifiée.
Comment sont planifiées les tâches
Créez et planifiez une tâche (Job) pour exécuter la tâche (Task). Une tâche (Job) décrit une tâche (Task) à exécuter et gère automatiquement sa création.
Les tâches sont créées en fonction de 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'une tâche (Job) supprime toutes les tâches (Tasks) 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 une tâche planifiée sont toujours soumises aux règles de conservation des tâches.
Différences avec le programmeur PCF
Le programmeur PCF autorise plusieurs planifications pour une seule tâche, tandis que Kf n'accepte qu'une seule planification par tâche. Vous pouvez répliquer le comportement du programmeur PCF en créant plusieurs tâches, une pour chaque planification.