Schedule semantics
CronJob uses five fields: minute, hour, day of month, month, day of week. When both day fields are restricted, a run happens if either matches, which is standard cron behaviour. Without spec.timeZone (GA since 1.27), the controller uses the kube-controller-manager’s zone, which is usually UTC but cannot be known from the manifest.
The preview is arithmetic. Missed schedules, startingDeadlineSeconds, concurrencyPolicy and controller downtime decide whether a Job actually starts.
Questions
Can I put TZ= in the schedule?
No. CronJob validation rejects TZ= and CRON_TZ= in spec.schedule. Use spec.timeZone.
What happens across daylight saving changes?
Runs whose wall-clock time is skipped do not appear in the preview, and repeated times can appear twice. Check the controller’s behaviour for your version before relying on runs near the transition.