How can I specify cron timezone in k8s cron job?

8/27/2021

According to documentation (https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) I can create cron job in k8s with specify timezone like: "CRON_TZ=UTC 0 23 * * *"

My deployment file is:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: scheduler
spec:
  schedule: "CRON_TZ=UTC 0 23 * * *"
...

During the deploy I am getting an error:

The CronJob "scheduler" is invalid: spec.schedule: Invalid value: "CRON_TZ=UTC 0 23 * * ": Expected exactly 5 fields, found 6: CRON_TZ=UTC 0 23 * *

Cron is working without perfectly timezone (schedule: "0 23 * * *")

Cluster version is: Kubernetes 1.21.2-do.2 - digitalocean.

What is wrong?

-- yihereg819
cron
cron-task
digital-ocean
k8s-cronjobber
kubernetes

1 Answer

8/31/2021

The CRON_TZ=<timezone> prefix won't be available yet, not until 1.22. The inclusion in the 1.21 release docs was an error.

Originally, the change adding the syntax was included for 1.22, but it appears someone got confused and moved the documentation over to 1.21. Supporting the CRON_TZ=<timezone> syntax is accidental, purely because the package used to handle the scheduling was recently upgraded to version 3, which added support for the syntax. The package is the key component that makes the syntax possible and is only part of 1.22.

-- Martijn Pieters
Source: StackOverflow