Kubernetes CronJob : l’automatisation des tâches
Kubernetes surveille activement l’exécution des CronJobs et exécute des actions prédéfinies par l’utilisateur en cas d’erreur. La configuration de Kubernetes CronJobs s’effectue aisément à l’aide de fichiers YAML.
Un CronJob, c’est quoi au juste ?
Un CronJob est une méthode pour automatiser des tâches. En fait, c’est comme un réveil qui sonne à une heure précise. Selon le même principe, un CronJob peut être configuré pour qu’il exécute automatiquement des tâches prédéfinies à des heures précises. Un CronJob peut automatiser différents types de tâches telles que la mise à jour de bases de données, la sauvegarde de fichiers, l’exécution de scripts ou l’envoi d’emails à intervalles réguliers. L’intégration de CronJobs dans la plateforme Kubernetes permet de surveiller les tâches et de les exécuter de manière isolée dans les conteneurs.
Managed Kubernetes de IONOS vous offre une plateforme hautement performante dans laquelle vous pouvez configurer des nœuds de travail selon vos besoins. La solution complète de gestion du Cloud IONOS assure un fonctionnement sans faille de votre cluster Kubernetes.
Kubernetes CronJob : configuration
La création d’un CronJob ressemble beaucoup à celle d’un Job (tâche) standard dans Kubernetes. Pour ce faire, vous devez créer un fichier manifest.yaml. Il s’agit d’une description structurée contenant tous les détails pertinents pour le CronJob. Y sont définis des paramètres importants tels que le planificateur d’exécution du job, les conteneurs ainsi que les commandes exactes qui doivent être exécutées dans ces conteneurs.
Création d’un fichier YAML
Ouvrez un éditeur de texte de votre choix pour créer le fichier de configuration YAML pour le CronJob. Veillez à définir la planification du CronJob en format Cron. Ajoutez la définition du job, y compris la tâche à exécuter. Enregistrez ensuite le fichier en lui donnant l’extension .yaml
.
apiVersion: batch/v1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image-name:latest
command:
- /bin/sh
yamlAjoutez, le cas échéant, des exigences en termes de ressources et d’autres paramètres à la spécification du pod :
spec:
containers:
- name: container
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
yamlActivation du CronJob
Saisissez la commande suivante dans un terminal pour créer le CronJob dans le cluster Kubernetes :
kubectl apply -f [filename].yaml
shellContrôle du CronJob
En exécutant la commande suivante, vous obtenez une liste des Kubernetes CronJobs existants et le mode Watch (mode surveillance) veille à ce que la sortie soit automatiquement actualisée lorsque le statut des CronJobs change.
kubectl get cronjob --watch
shellSyntaxe du calendrier CronJob
La Schedule-Syntax (syntaxe du planificateur) pour les Kubernetes CronJobs est basée sur le format Cron classique comprenant cinq champs dans l’ordre suivant : minute, heure, jour du mois, mois et jour de la semaine. Elle prend la forme suivante :
- Minute (0–59)
- Heure (0–23)
- Jour du mois (1–31)
- Mois (1–12 ou Jan–Déc.)
- Jour de la semaine (0–7 ou Dim–Sam)
Caractères spéciaux :
*
: toute valeur valable pour le champ,
: indication de plusieurs valeurs/
: indication des étapes
Exemples :
0 ** **
: toutes les heures
15 2 ** *
: tous les jours à 2h15
0 0 1 **
: le premier jour de chaque mois à minuit
0 0 *3*
: tous les jours à minuit en mars
0 2 ** 1
: tous les lundis à 2 heures du matin
Règle de simultanéité CronJob
La règle de simultanéité peut être spécifiée dans la configuration d’un CronJob et a un impact sur la façon dont les tâches parallèles sont traitées au sein du même Kubernetes CronJob.
- Allow (par défaut) : si la règle de simultanéité est paramétrée sur
Allow
(autoriser) un nouveau job est lancé, même si le job précédent n’est pas encore terminé. Cela signifie que plusieurs instances d’un même job peuvent être exécutées en même temps. - Forbid : ce paramètre permet de ne pas lancer un nouveau job si un job précédent n’est pas encore terminé. Il permet aussi de s’assurer qu’une seule instance du job est exécutée à un moment donné.
- Replace : les jobs non terminés sont interrompus afin que les nouveaux jobs puissent continuer. Aucune instance du même job ne peut être exécutée en même temps.
Fixation d’un délai pour l’exécution
Le champ startingDeadlineSeconds
dans un Kubernetes CronJob indique le nombre maximal de secondes autorisées après l’heure d’exécution planifiée, pour lancer un job. Si le job ne s’exécute pas dans ce laps de temps, il est considéré comme échoué.
apiVersion: batch/v1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
startingDeadlineSeconds: 300
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image-name:latest
command:
- /bin/sh
yamlDans cet exemple, le job défini par le CronJob doit être lancé dans les 300 secondes (5 minutes) après l’heure fixée, sans quoi il sera considéré comme un échec.
Limiter l’historique des jobs
Dans Kubernetes CronJobs, les paramètres spec.successfulJobsHistoryLimit
(limite de l’historique des jobs réussis) et spec.failedJobsHistoryLimit
(limite de l’historique des jobs échoués) offrent la possibilité de limiter le nombre de jobs conservés dans l’historique du CronJob. spec.successfulJobsHistoryLimit
est un champ facultatif qui fixe le nombre de tâches terminées avec succès qui doivent être sauvegardées dans l’historique. Cela est utile pour gérer l’utilisation des ressources et s’assurer que l’historique n’est pas surchargé par un nombre excessif de tâches terminées avec succès. De la même façon, spec.failedJobsHistoryLimit
permet de limiter le nombre de jobs ayant échoué présents dans l’historique.
apiVersion: batch/v1
kind: CronJob
metadata:
name: new_cronjob
spec:
schedule: "0 ** ** "
successfulJobsHistoryLimit: 3 # Keep only the last 3 successfully completed jobs in history.
failedJobsHistoryLimit: 1 # Keep only the last failed job in history.
jobTemplate:
spec:
template:
spec:
containers:
- name: container
image: image-name:latest
command:
- /bin/sh
yamlDans l’exemple ci-dessus, nous indiquons de ne conserver dans l’historique du CronJob Kubernetes new_cronjob
uniquement les trois derniers jobs terminés avec succès et le dernier job ayant échoué.
Kubernetes CronJob : erreurs et dépannage
Différentes erreurs peuvent survenir dans les CronJobs Kubernetes. Il est donc important de connaître les techniques de dépannage efficaces. Voici quelques sources d’erreurs courantes et des méthodes pour y remédier :
Le job ne s’exécute pas
Si un CronJob ne s’exécute pas dans Kubernetes, cela peut avoir plusieurs causes. Une image de conteneur erronée ou non disponible, voire des autorisations manquantes pour le compte de service du pod, peuvent en être la cause. Pour cerner le problème, examinez les logs du conteneur avec kubectl logs <pod-name>
, les événements du CronJob avec kubectl describe cronjob <cronjob-name>
, et les événements du pod avec kubectl describe pod <pod-name>
. Assurez-vous que le compte de service dispose des autorisations requises en vérifiant le rôle et la liaison des rôles (RoleBinding).
Configuration CronJob erronée
Des erreurs de syntaxe dans le fichier YAML ou des paramètres invalides pour Schedule et RestartPolicy peuvent être à l’origine d’une mauvaise configuration de CronJob. Afin d’identifier ce type de problèmes, vérifiez la syntaxe et les paramètres du fichier YAML. Avec kubectl describe cronjob <cronjob-name>
, vous pouvez obtenir des informations détaillées sur la configuration et détecter d’éventuelles erreurs ou incohérences.
Dépassement des limites de ressources
Le dépassement des limites de ressources peut entraîner une exécution incorrecte des CronJobs. Pour résoudre le problème, vérifiez les limites de ressources dans le CronJob et les pods associés avec kubectl describe cronjob <cronjob-name>
et kubectl describe pod <pod-name>
. Par ailleurs, la surveillance de l’utilisation des ressources du cluster avec kubectl top nodes
et kubectl top pods
peut fournir des indications précieuses. Le cas échéant, modifiez les limites de ressources dans le fichier YAML.
Pour vous initier à la gestion de clusters dans Kubernetes, nous vous recommandons le tutoriel Kubernetes de notre Digital Guide.
Managed Kubernetes est la plateforme idéale pour des applications de conteneurs performantes et hautement évolutives.