Kubernetes CronJob Schedule
A Kubernetes CronJob's spec.schedule is standard 5-field cron. The example runs every 5 minutes. Modern clusters also support a spec.timeZone field; without it, the schedule uses the kube-controller-manager's timezone (usually UTC).
The manifest
apiVersion: batch/v1
kind: CronJob
metadata:
name: report
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: myimage:latest
restartPolicy: OnFailureTimezone
On Kubernetes 1.27+ add spec.timeZone: "America/New_York". Without it, times are interpreted in the controller-manager's zone, which is UTC on most managed clusters.
Prevent overlap
Set spec.concurrencyPolicy: Forbid so a new run is skipped if the previous one is still running. Replace kills the old one; the default Allow lets them overlap.
Missed runs
startingDeadlineSeconds controls how late a missed job may start. If too many runs are missed (e.g. controller was down), the CronJob may stop scheduling until you clear it.
FAQ
What cron format does a Kubernetes CronJob use?
Standard 5-field cron in spec.schedule, e.g. "*/5 * * * *" for every 5 minutes. Quote the string in YAML.
How do I set the timezone of a Kubernetes CronJob?
Add spec.timeZone (Kubernetes 1.27+), e.g. "America/New_York". Otherwise the schedule uses the controller-manager's zone, typically UTC.
How do I stop Kubernetes CronJob runs from overlapping?
Set spec.concurrencyPolicy: Forbid to skip a new run while the previous is active, or Replace to cancel the old one. The default Allow permits overlap.