Kubernetes CronJob erzeugt Kubernetes Jobs nach einem festen Zeitplan – vergleichbar mit einem cron-Eintrag auf einem Linux-Server, aber direkt in Kubernetes. Damit lassen sich wiederkehrende Aufgaben wie nächtliche Backups, Log-Rotation oder regelmäßige Reports vollständig im Cluster verwalten. Seit Kubernetes 1.21 ist die Ressource batch/v1 stabil.
So wird der Zeitplan definiert
Der Zeitplan steht im Feld spec.schedule in klassischer Cron-Syntax mit fünf Feldern: Minute, Stunde, Tag im Monat, Monat, Wochentag. 0 2 * * * bedeutet beispielsweise täglich um 02:00 Uhr. Das Feld spec.jobTemplate enthält die Vorlage für den Job, den der CronJob bei jedem Termin erzeugt.
apiVersion: batch/v1
kind: CronJob
metadata:
name: naechtliches-backup
spec:
schedule: "0 2 * * *"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: backup
image: backup-image:latest
Wichtige Felder
spec.concurrencyPolicy:Allow(Standard, parallele Läufe erlaubt),Forbid(kein neuer Lauf, solange der vorherige noch läuft) oderReplace(laufender Job wird abgebrochen).spec.startingDeadlineSeconds: wie lange ein verspäteter Start spätestens nachgeholt wird, bevor der Termin verfällt.spec.suspend: true: pausiert die Zeitplanung, ohne den CronJob zu löschen.spec.successfulJobsHistoryLimit(Standard 3) undspec.failedJobsHistoryLimit(Standard 1): wie viele abgeschlossene bzw. fehlgeschlagene Jobs als Historie erhalten bleiben.spec.timeZone: Zeitzone für die Auswertung des Zeitplans.
Mit kubectl lassen sich CronJobs anlegen und prüfen (kubectl get cronjobs, kubectl get jobs --watch). Der CronJob gehört zusammen mit dem ReplicaSet und dem Job zu den Workload-Controllern, die Kubernetes im Controller Manager ausführt.