metamorworks - stock.adobe.com
Administration Kubernetes : comprendre les Jobs et les CronJobs
Les Jobs et les CronJobs servent tous les deux à exécuter des batchs de fonctions. Les premiers ont une utilisation d’appoint, les seconds permettent de programmer des processus récurrents.
Il existe deux approches pour gérer les tâches dans Kubernetes : les Jobs et les CronJobs. Les Jobs correspondent aux tâches lancées de manière ponctuelle. Les Cronjobs correspondent aux tâches récurrentes.
Les Jobs conviennent par exemple à un batch de traitement d’images, à la réplication ou à la restauration de données, à la transformation ou à la normalisation de données, ainsi qu’à d’autres tâches d’analyse de données. Par exemple, une restauration de données peut être suffisamment critique pour qu’il existe un job dédié à cette tâche, mais elle n’est nécessaire que dans de rares occasions, typiquement lorsqu’une perte de données se produit.
Les CronJobs, mieux adaptés aux tâches planifiées ou récurrentes, conviennent aux sauvegardes de données, à la synchronisation ou à l’agrégation de données, au nettoyage des logs ou autres activités de maintenance système, ainsi qu’à l’ajout périodique de ressources. Par exemple, confier un nettoyage régulier des logs à un CronJob, permet d’éviter le risque qu’un responsable oublie de le faire en temps et en heure.
Comment fonctionne un job Kubernetes ?
Un job crée un ou plusieurs pods de containers pour exécuter ponctuellement une série plus ou moins longue de fonctions successives. L’élément à prendre en compte avec les Jobs est leur nature éphémère.
Alors que la plupart des pods ne s’éteignent que lorsque l’orchestrateur Kubernetes considère qu’ils sont en surnombre par rapport à l’activité en cours, le pod impliqué dans un Job est conçu pour se terminer une fois que son train de fonction a été exécuté. Modulo le fait que l’administrateur puisse programmer une répétition dans ce train de fonctions pour, par exemple, traiter successivement un certain nombre de lots de données.
Les jobs peuvent gérer des tâches parallèles qui se déroulent sur plusieurs pods, réessayer automatiquement une opération en cas d’échec et garder une trace de ce qui a été accompli. L’administrateur peut supprimer ou suspendre les jobs de manière manuelle ou par programmation.
Un job Kubernetes a les caractéristiques suivantes :
- La configuration se fait à l’aide d’un fichier YAML et l’exécution se fait par le biais d’une ligne de commande Kubernetes.
- On décline des modèles (templates) de jobs pour créer des pods qui exécutent des tâches spécifiques. L’administrateur se sert des templates pour créer des tâches standardisées et réutilisables pour plusieurs types d’opérations.
- On met en place une règle de redémarrage qui détermine le comportement du pod après un échec ou un accomplissement.
- On indique un taux d’accomplissement nécessaire pour considérer le job comme terminé ; ce taux n’est pas forcément de 100 %.
- On définit le parallélisme du job en indiquant le nombre maximum de pods qui peuvent s’exécuter simultanément pour accomplir la tâche attendue.
L’administrateur peut lister les jobs en cours de fonctionnement avec la commande Kubernetes kubectl get all.
Comment fonctionne un Cronjob Kubernetes ?
Un CronJob est un Job qui s’exécute selon un calendrier récurrent, ou à une date spécifiée en amont. La planification repose sur un format et des paramètres Cron déclaratifs, Cron étant un utilitaire de planification de tâches en ligne de commande sur les systèmes d’exploitation de type Unix. La fonctionnalité CronJob est intégrée à l’API REST de Kubernetes.
Les tâches sont spécifiées comme n’importe quel autre Job dans Kubernetes, mais l’intention récurrente des CronJobs signifie que les Jobs sous-jacents sont souvent adaptés aux opérations répétitives. Les exemples les plus courants incluent les sauvegardes, la synchronisation des données et la génération de rapports.
Un CronJob Kubernetes a les caractéristiques suivantes :
- Comme pour les Jobs ordinaires, on décline des modèles qui prennent en charge les tâches standardisées et réutilisables.
- Le CronJob doit spécifier le calendrier, y compris l’heure et la fréquence d’exécution du CronJob.
- Il y a concomitance, intentionnelle ou accidentelle, lorsqu’un CronJob démarre alors qu’un CronJob précédent est toujours en cours d’exécution. Le CronJob doit préciser comment il gère ce type de chevauchement.
- Le CronJob doit stipuler le temps maximum autorisé, ou une date limite, pour le démarrage d’une tâche. Au-delà, le système considère qu’elle a échoué.
Il existe trois limitations notables aux CronJobs :
- L’administrateur peut préciser des fuseaux horaires dans la planification CronJob, mais les formats habituels de ce type d’information ne sont pas nécessairement tous supportés selon les systèmes. Si tel est le cas, des alertes auront lieu lors de l’exécution.
- Un CronJob ne s’applique qu’aux nouveaux Jobs. Lorsqu’un CronJob existant est modifié, les modifications s’appliquent uniquement aux Jobs qui démarrent après la sauvegarde de ces modifications. Cela signifie que les CronJobs ne mettront pas à jour les Jobs déjà en cours d’exécution.
- Il est possible qu’aucun Job ne démarre au cours d’un cycle, ou que des Jobs se chevauchent, comme dans le cas d’une concomitance accidentelle. Cela est dû au fonctionnement du planificateur Kubernetes. Les heures de début prévues ne sont pas précises.