根据文档(https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/)我可以在k8s中创建带有指定时区的cron作业,例如:
"CRON_TZ=UTC 0 23 * * *"
我的部署文件是:
apiVersion: batch/v1
kind: CronJob
metadata:
name: scheduler
spec:
schedule: "CRON_TZ=UTC 0 23 * * *"
...
在部署过程中我收到错误:
CronJob“调度程序”无效:spec.schedule:无效值:“CRON_TZ=UTC 0 23 * * *”:预期正好 5 个字段,找到 6 个:CRON_TZ=UTC 0 23 * * *
Cron 在没有完美时区的情况下工作 (
schedule: "0 23 * * *"
)
集群版本是:
Kubernetes 1.21.2-do.2
- digitalocean。
出了什么问题?
CRON_TZ=<timezone>
前缀尚不可用,要到 1.22 为止。 1.21 版本文档中的包含内容是一个错误。
最初,添加语法的更改是包含在 1.22 中,但似乎有人感到困惑并将文档移至 1.21。 支持
CRON_TZ=<timezone>
语法是偶然的,纯粹是因为用于处理调度的包最近升级到了版本3,增加了对该语法的支持。该包是使语法成为可能的关键组件,并且只是 1.22 的一部分。
截至 2021 年 11 月,文档中的措辞已调整为声明 CRON_TZ
不受官方支持:
如果您可以升级到 1.24,则可以使用新的注意:
v1 CronJob API 不正式支持设置时区,如上所述。设置
CRON_TZ
或TZ
等变量不受 Kubernetes 项目官方支持。CRON_TZ
或TZ
是用于解析和计算下一个Job创建时间的内部库的实现细节。不建议在生产集群中使用它。
功能门来启用通过 KEP 3140 添加的新的官方时区支持。请注意,这仍然是 alpha 级别的功能;它在 1.25 中达到测试状态,并在 1.27 版本中达到成熟状态。 启用功能门后,您可以将
timeZone
字段添加到您的 CronJob
spec
:
apiVersion: batch/v1
kind: CronJob
metadata:
name: scheduler
spec:
schedule: "0 23 * * *"
timeZone: "Etc/UTC"