hello-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
spec:
schedule: "*/1 * * * *" # jede Minute
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- echo "📅 Hallo von CronJob um $(date)"
restartPolicy: OnFailure
kubectl apply -f hello-cronjob.yaml
Warte 1–2 Minuten, dann:
kubectl get cronjob hello-cronjob
kubectl get jobs
kubectl get pods --selector=job-name --sort-by=.metadata.creationTimestamp
kubectl get pods # z. B. hello-cronjob-xxxx
kubectl logs <PODNAME>
→ Beispielausgabe:
📅 Hallo von CronJob um Mon Jun 6 10:00:00 UTC 2025
Ändere den CronJob so, dass der Container einen Fehler produziert:
args:
- /bin/sh
- -c
- exit 1
→ Füge auch ein backoffLimit: 1
hinzu:
spec:
backoffLimit: 1
→ Neu anwenden:
kubectl apply -f hello-cronjob.yaml
Dann prüfen:
kubectl get jobs
kubectl describe job <JOBNAME>
→ Status zeigt “failed” nach 1 Versuch.
kubectl create job --from=cronjob/hello-cronjob manual-run
kubectl delete cronjob hello-cronjob
kubectl delete jobs --all
Feld | Bedeutung |
---|---|
schedule |
Cron-Syntax wie * * * * * |
restartPolicy |
Muss bei CronJobs OnFailure oder Never sein |
jobTemplate |
Enthält den eigentlichen Task |
backoffLimit |
Anzahl Wiederholungen bei Fehler |
successfulJobsHistoryLimit |
Anzahl erfolgreicher Job-Runs, die behalten werden |
failedJobsHistoryLimit |
Dasselbe für Fehlversuche |