如何在k8s的cron作业中指定cron时区?



根据文档(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调度器;

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:

谨慎

:

v1 CronJob API不正式支持如上所述设置时区。

设置CRON_TZTZ这样的变量是Kubernetes项目官方不支持的。CRON_TZTZ是用于解析和计算下一个Job创建时间的内部库的实现细节。不建议在生产集群中使用。

如果您可以升级到1.24,您可以使用新的CronJobTimeZone特性门来启用KEP 3140添加的新的,官方的时区支持。请注意,这仍然是一个alpha级别的功能;希望它能在1.25达到测试版。如果一切顺利,该特性将在1.27版中成熟。

启用特性门后,您可以将timeZone字段添加到CronJobspec:

apiVersion: batch/v1
kind: CronJob
metadata:
name: scheduler
spec:
schedule: "0 23 * * *"
timeZone: "Etc/UTC"

相关内容

  • 没有找到相关文章