Das Feld schedule
spec.schedule erwartet einen Cron-Ausdruck mit fünf Feldern, etwa "0 */6 * * *" für alle sechs Stunden. Kubernetes akzeptiert auch Makros wie @hourly, @daily, @weekly, @monthly und @yearly. Setze den Wert in YAML in Anführungszeichen, damit die Sternchen nicht falsch interpretiert werden.
Zeitzonen mit spec.timeZone
Ohne Zeitzone werden Zeitpläne in der Zeitzone des kube-controller-manager interpretiert, meist UTC. Seit Kubernetes 1.27 kannst du spec.timeZone auf einen IANA-Namen wie Europe/Berlin setzen. Wähle dieselbe Zone im Tool, um die genauen Erstellungszeiten inklusive Zeitumstellung zu sehen.
Verpasste Läufe und Nebenläufigkeit
Verpasst der Controller einen geplanten Zeitpunkt, entscheidet startingDeadlineSeconds, wie spät ein Job noch starten darf. concurrencyPolicy legt fest, was passiert, wenn ein Lauf noch aktiv ist: Allow, Forbid oder Replace. Behalte diese Einstellungen bei häufigen Zeitplänen wie jeder Minute im Blick.
Mit kubectl create job --from=cronjob/<name> <job-name> startest du beim Testen sofort einen Lauf, und kubectl get cronjob zeigt die Spalten LAST SCHEDULE und ACTIVE. Die Events am CronJob-Objekt erklären, warum ein geplanter Zeitpunkt übersprungen wurde oder warum ein Job nicht starten konnte. So lassen sich Fehler im Zeitplan schnell von Fehlern im Container unterscheiden.
Ein minimales Manifest
Ein CronJob nutzt apiVersion batch/v1 und kind CronJob, mit spec.schedule, optional spec.timeZone und einem jobTemplate, das den auszuführenden Pod beschreibt. Mit suspend: true pausierst du den Zeitplan, ohne ihn zu löschen; successfulJobsHistoryLimit und failedJobsHistoryLimit steuern, wie viele beendete Jobs zur Fehlersuche erhalten bleiben.
Häufige Fragen
- Unterstützt ein Kubernetes-CronJob Sekunden?
- Nein. Der Zeitplan hat fünf Felder, das kleinste Intervall ist also eine Minute.
- Kann ich CRON_TZ im Zeitplan verwenden?
- Nein. Die Präfixe TZ und CRON_TZ werden nicht unterstützt; verwende stattdessen das Feld spec.timeZone.
- Was bedeutet 0 */6 * * *?
- Alle sechs Stunden zur vollen Stunde: 00:00, 06:00, 12:00 und 18:00.
- Warum lief mein CronJob doppelt oder gar nicht?
- Prüfe startingDeadlineSeconds und concurrencyPolicy und ob der Controller ausgefallen war. CronJobs streben etwa einen Job pro geplanter Zeit an, garantieren es aber nicht.