CronJobs - ii02735/learn-k8 GitHub Wiki
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.
schedulesuit 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.timeZonepermet 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) →
AllowouReplace. - 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é.
startingDeadlineSecondstolè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