我有一个时间表:schedule: "0 10,14,18 * * *"
,我想在上午 10:00、下午 2:00、下午 6:00 运行此作业。
由于我位于 UTC+8 时区,因此此 cronjob 看起来没有按预期运行。
无论如何要为时区添加配置?
在 Kubernetes v1.25 中,您可以启用CronJobTimeZone
功能门,并通过将spec.timeZone
设置为有效的时区名称来设置时区。
例如,设置spec.timeZone: "Australia/Melbourne"
使 Kubernetes 能够相对于UTC+10 (STD)
时区解释计划。
您可以参考官方文档以获取更多详细信息。
来自 Kubernetes 文档:
注意:所有 CronJob 计划:时间基于启动作业的主节点的时区。
如果你在香港部署你的主站,你应该没问题。基仕伯在中国没有区域(请参阅此处)
您可以考虑在 AWS 上部署 Kubernetes。AWS 在中国北京和中国宁夏设有区域(请参阅此处)
或者可能在 Azure 上(请参阅此处)
完成上述设置后,schedule: "0 10,14,18 * * *"
应该可以工作
如果您使用的是托管 GCP K8,则时间采用 UTC 格式
文档
对于vanila kubernetes,你可以修复静态pod。添加块
卷装载: - 名称:当地时间 mountPath:/etc/localtime 只读:真 卷: - 主机路径: 路径:/etc/localtime 名称:本地时间
这使得 kube-controller-manager 与主机在同一时区运行。
在 v1.22 中,有一种方法可以做到这一点。
将类似CRON_TZ=Asia/Tehran 0 0 * * *
的内容设置为 .spec.schedule 值
此外,CronJob 调度支持时区处理,可以通过在 CronJob 调度开头添加"CRON_TZ="来指定时区,建议始终设置CRON_TZ。
该文件 https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#:~:text=In%20addition%2C%20the%20CronJob%20schedule,the%20kube%2Dcontroller%2Dmanager。