Skip to content

CronJobs

ii02735 edited this page Oct 12, 2026 · 1 revision

Les CronJobs

Qu'est-ce qu'un CronJob ?

Un CronJob planifie des Jobs à intervalles réguliers, comme cron sous Linux : à chaque déclenchement, il crée un Job, qui s'exécute puis se termine.

Un CronJob qui déclenche des Jobs à intervalles réguliers

  • schedule suit le format cron (5 champs : minute, heure, jour du mois, mois, jour de la semaine) ;
  • le CronJob ne fait que créer des Jobs : la gestion des Pods (relances, comptage) reste celle d'un Job ;
  • un Job créé par un CronJob porte un nom horodaté (ex. sauvegarde-28313840).

Le champ schedule

minute  heure  jour-du-mois  mois  jour-de-la-semaine

Quelques exemples :

  • "*/30 * * * *" : toutes les 30 minutes ;
  • "0 2 * * *" : chaque jour à 02:00 ;
  • "0 0 * * 1" : chaque lundi à minuit ;
  • "*/10 * * * *" : toutes les 10 minutes (la granularité la plus fine de cron).

Note

Le champ spec.timeZone permet de choisir le fuseau horaire du planning (ex. Europe/Paris). Sinon, c'est le fuseau de l'apiserver qui est utilisé.

concurrencyPolicy : éviter les chevauchements

Que se passe-t-il si un déclenchement arrive alors que le Job précédent tourne encore ?

  • Allow (défaut) : on lance le nouveau Job en même temps.
  • Forbid : on saute ce déclenchement, on attend le suivant.
  • Replace : on annule le Job en cours et on en démarre un nouveau.

Quand choisir quoi ?

  • Tâche idempotente (envoyer un e-mail, un rapport) → Allow ou Replace.
  • Tâche à ne jamais doubler (backup, migration, purge) → Forbid.

startingDeadlineSeconds : rattraper les retards

  • Si le cluster a été inactif à l'heure prévue (ou le CronJob désactivé), le déclenchement est manqué.
  • startingDeadlineSeconds tolère un retard : le Job peut encore être créé tant qu'on reste dans la fenêtre (ex. 300 = jusqu'à 5 min après l'heure prévue) ; au-delà, le déclenchement est compté comme manqué.

L'historique et le nettoyage

  • successfulJobsHistoryLimit (défaut 3) : combien de Jobs réussis conserver.
  • failedJobsHistoryLimit (défaut 1) : combien de Jobs échoués conserver.
  • Sans ces limites, les Jobs accumulés rempliraient le cluster. On peut aussi les combiner avec ttlSecondsAfterFinished.

Un manifeste CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sauvegarde
spec:
  schedule: "0 2 * * *"
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 300
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      completions: 1
      backoffLimit: 2
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: backup
              image: busybox
              command: ["sh", "-c", "echo sauvegarde effectuee"]

Planifier ou exécuter une seule fois ?

  • Une seule fois → un Job (voir Les Jobs).
  • Régulièrement, selon un planning cron → un CronJob.

Les commandes principales

  • Créer un CronJob (impératif) : kubectl create cronjob sauvegarde --image=busybox --schedule="0 2 * * *" -- echo ok
  • Lister les CronJobs : kubectl get cronjobs
  • Obtenir les détails : kubectl describe cronjob sauvegarde
  • Voir les Jobs qu'il a créés : kubectl get jobs
  • Supprimer un CronJob (sans supprimer les Jobs déjà créés) : kubectl delete cronjob sauvegarde

Clone this wiki locally