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) oder Replace (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) und spec.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.