如何让 CronJob 尊重夏令时?

And*_*ykh 9 cron kubernetes

假设我和我正在处理的合作伙伴公司生活在一个采用夏令时的国家/地区。

我在 kubernetes 集群中有一个 CronJob,它每天在 4:00、10:00、16:00 和 22:00 将文件上传到合作伙伴公司。例如0 4,10,16,22 * * *

Kubernetes SIG决定CronJob 对象将不支持本地时区,并将始终以默认时区运行,即 UTC。

我可以更改时间表,以便它反映上面在 UTC 中指定的本地时间,并为 CronJob 提供该时间表。但是,每次夏令时开始(一年两次)时,我都需要以某种方式修改所有 CronJobs 以使用新时间,并且我需要修改我的部署管道以使用新时间创建 CronJobs 的新版本。

在夏令时更改之后,我无法让 CronJob 以相同的时间表运行,因为该作业将不会在合作伙伴预期的时间内上传文件。

管理这个最简单的方法是什么?

选项1

有人建议编写一个新的 kubernetes 控制器可以做到,但似乎没有人提出这个挑战并发布工作解决方案。

选项 2

我考虑过的另一个选择是更改整个集群的时区。但是如果你用谷歌搜索它,它似乎并不是一个非常流行的解决方案,而且有些人强烈认为 kubernetes 作为一个云应用程序应该在 UTC 中运行。

据我所知,cron使用本地时区,在 kubernetes 的情况下,它将是控制器管理器的时区,它不是运行节点的时区所必需的。另一方面,更改控制器管理器容器的时区听起来有风险,因为尚不清楚它将如何与 Kubernetes 的其他组件(例如 etcd 和 kubelets)交互。

选项 3

每年手动执行两次。由于组织中的人来来去去,因此很难在何时以及如何保留知识。我不希望我们的合作伙伴一年抱怨两次。此外,由于日期每年都在变化,因此为此设置通知可能会很棘手。

选项 4

编写一些本土自动化以每年运行两次,并希望当时间到来时它按预期工作。这实际上是触发,在正确的时间触发并完成它应该做的一切。(后者更容易测试,但前者更难)。

所有这些选项都让人感到很不满意。我用谷歌搜索了很多,但我没有找到很多,我觉得这应该是很常见的问题,但搜索中没有任何内容。我是否忽略了什么?有没有简单自然的方法来解决它?

小智 0

我知道这是一个老问题,但 argo 工作流程有一个支持时区和夏令时的 Cron 工作流程 CRD。https://argoproj.github.io/argo-workflows/cron-workflows/#daylight- saving 。