Seidor
Kubernetes con CronJobs

25 mars 2024

CronJobs dans votre environnement Kubernetes

Gestion des charges de travail avec Cronjobs dans Kubernetes

Kubernetes est rapidement devenu l'outil standard pour la gestion des infrastructures containerisées. Kubernetes dispose d'une variété de ressources de charge de travail disponibles pour contrôler et gérer les pods et les conteneurs, les plus courants étant :

  • Deployments
  • ReplicaSets
  • StatefulSets

Ces ressources sont utilisées à la fois pour créer des systèmes et pour contrôler le comportement souhaité des différentes parties. Bien que ces ressources aient des objectifs et des fonctionnalités différents, elles partagent toutes l'opération de maintenir les systèmes en fonctionnement en cas de défaillance, en évaluant l'état des conteneurs, et en redémarrant ou en reprogrammant ("rescheduling") les parties pertinentes si nécessaire.

Cependant, il existe d'autres ressources de charge de travail disponibles :

  • Job
  • Cronjobs
  • Work queues

Dans cet article de blog, nous nous concentrons sur les Cronjobs : leur fonction et les options de personnalisation disponibles.

Qu'est-ce qu'un cron?

Les “crons” sont une utilité commune de Linux / UNIX utilisée pour programmer des tâches (généralement des scripts ou des commandes) afin qu'elles s'exécutent périodiquement à des heures, dates ou intervalles fixes. Ils sont utiles pour des tâches périodiques et récurrentes, telles que des sondages, l'envoi de courriels, la collecte de statistiques ou la création de sauvegardes de bases de données.

Qu'est-ce qu'un Job (dans Kubernetes)?

Un Job crée un Pod, qu'il suivra pour s'assurer qu'il se termine avec succès. Si le pod échoue, le Job continuera à créer des Pods jusqu'à ce que le/(les) Pod(s) se terminent avec succès. Dans le fichier YAML correspondant, un nombre spécifique de terminaisons réussies est désigné. Le Job suivra les terminaisons réussies jusqu'à ce que le nombre désigné de Pods soit complété, après quoi le Job sera terminé.

Qu'est-ce qu'un CronJob (dans Kubernetes)?

Un CronJob est une tâche qui garantit qu'un Job est créé à des heures, dates ou intervalles spécifiques. Ils offrent la possibilité de :

Containeriser les crons :

Cela assure une meilleure fiabilité en ce qui concerne l'exécution des crons. Étant des crons exécutés de manière serverless, si un serveur pertinent tombe en panne, les CronJobs continuent de s'exécuter.

Options de personnalisation étendues :

Permet une personnalisation étendue de la tâche en question, garantissant ainsi la flexibilité de la tâche inhérente. Dans la section suivante, avec un exemple, nous évaluerons le manifeste d'une ressource CronJob.

Voici un exemple de job :

CronJob

Comme pour toutes les autres ressources, ces valeurs doivent être stipulées :

  • ApiVersion : version utilisée par le cluster
  • Kind : CronJob
  • Metadata : informations pertinentes au CronJob, telles que : (il y a plus de variables disponibles dans ce bloc, bien qu'elles ne soient pas nécessaires)
  • Name : $${nom souhaité pour le CronJob}
  • Namespace : ${namespace où vous hébergerez le CronJob}
  • Spec : dans ce bloc nécessaire, certaines valeurs sont nécessaires et d'autres optionnelles :

Nécessaires

  • Schedule : spécifie la date, les heures ou les intervalles auxquels exécuter le Job

(Pour plus d'informations sur la transcription en expressions cron, il existe de nombreux liens, tels que crontab

  • JobTemplate : Ici, le modèle du Job que le CronJob générera est créé

Optionnel :

  • StartingDeadlineSeconds : Délai autorisé (en secondes) pour commencer un Job après que son moment d'exécution désigné soit passé.

C'est-à-dire, dans le cas où un Job ne s'exécute pas à son moment désigné et que le délai autorisé est dépassé, le Job sera terminé et un nouveau sera programmé. Le Job échoué sera marqué comme un Missed Schedule.
Remarque : Le contrôleur du CronJob garde la trace du nombre de Missed Schedules qu'un CronJob a rencontrés. Lorsqu'un CronJob a plus de 100 Missed Schedules, il cessera de s'exécuter.
Valeur par défaut = Pas de délai

  • ConcurrencyPolicy : Spécifie le comportement concernant l'exécution de Jobs concurrents. Une seule des options suivantes peut être sélectionnée :
  • Allow : Permet l'exécution de Jobs concurrents
  • Forbid : N'autorise pas l'exécution de Jobs concurrents. C'est-à-dire, s'il y a un Job programmé, mais que le précédent est toujours en cours d'exécution, le nouveau sera ignoré.
  • Replace : N'autorise pas l'exécution de Jobs concurrents. C'est-à-dire, s'il y a un Job programmé, mais que le précédent est toujours en cours d'exécution, le nouveau Job remplacera l'ancien. Valeur par défaut = Allow
  • Suspend : Suspend toutes les exécutions ultérieures du CronJob. (Ne s'applique pas aux Jobs déjà commencés) Valeur par défaut = false.
  • SuccessfulJobsHistoryLimit : Stipule combien de Jobs réussis sont conservés. (Attribuer une valeur de 0 indique qu'aucun Job réussi n'est conservé) Valeur par défaut = 3
  • FailedJobsHistoryLimit : Stipule combien de Jobs échoués sont conservés. (Attribuer une valeur de 0 indique qu'aucun Job échoué n'est conservé) Valeur par défaut = 1