yih*_*819 8 cron cron-task digital-ocean kubernetes k8s-cronjobber
根据文档(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 * * *"
...
Run Code Online (Sandbox Code Playgroud)
在部署期间我收到错误:
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。
怎么了?
Mar*_*ers 12
该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_TZ或 之类的变量TZ不受 Kubernetes 项目官方支持。CRON_TZ或者TZ是用于解析和计算下一个作业创建时间的内部库的实现细节。不建议在生产集群中使用它。
如果您可以升级到 1.24,则可以使用新的CronJobTimeZone功能门来启用KEP 3140添加的新的官方时区支持。请注意,这仍然是 alpha 级别的功能;希望它能在 1.25 中达到 beta 版。如果一切顺利,该功能应该会在 1.27 版本中达到成熟。
启用功能门后,您可以timeZone向 CronJob 添加一个字段spec:
apiVersion: batch/v1
kind: CronJob
metadata:
name: scheduler
spec:
schedule: "0 23 * * *"
timeZone: "Etc/UTC"
Run Code Online (Sandbox Code Playgroud)