假设我和我要处理的合作伙伴公司生活在雇用Daylight Saving Time的国家/地区。
我在kubernetes集群中有一个CronJob,每天在4:00、10:00、16:00和22:00将文件上传到合作伙伴公司。例如。 0 4,10,16,22 * * *
。
Kubernets SIG decided表示CronJob对象不支持本地时区,并且始终在默认时区(UTC)中运行。
我可以更改时间表,以便它可以反映上面在UTC中指定的本地时间,并为CronJob提供该时间表。但是,每次夏令时开始(每年两次),我都需要以某种方式修改所有CronJobs以使用新的时间,和我需要修改我的部署管道,以使用新的版本创建CronJobs的新版本。时间。
在夏令时结束后,我无法使CronJob按相同的时间表运行,因为该作业将不在合作伙伴预期的时间内上载文件。
最简单的管理方法是什么?
选项1
suggested可以编写一个新的kubernetes控制器,但是似乎没有人提出这一挑战并发布了可行的解决方案。
选项2
我考虑过的另一个选项是更改整个群集的时区。但是,如果您google it似乎不是很受欢迎的解决方案,则有些人强烈认为,作为云应用程序的kubernetes应该在UTC上运行。
据我了解,cron
使用一个本地时区,在kubernetes的情况下,它将是控制器管理器的时区,而不是运行它的节点的时区。另一方面,更改控制器管理器容器的时区听起来很冒险,因为尚不清楚它将如何与kubernetes的其他组件(例如etcd和kubelets)进行交互。
选项3
每年手动进行两次。由于组织中的人来来去去,很难在何时何地保留知识。我不希望我们的伴侣每年抱怨两次。此外,由于日期每年都会更改,因此为此设置通知可能很棘手。
选项4
编写一些本地自动化系统,使其每年运行两次,并希望在时间到时能够按预期运行。这实际上是触发器,在正确的时间触发,并完成了它应该做的所有事情。 (后者更易于测试,而前者更难)。
所有这些选项都让人感到不满意。我在Google上搜索了很多,但没有找到很多,我觉得这应该是很普遍的问题,但搜索没有发现任何问题。我在俯视什么吗?有没有简单自然的方法来解决它?
答案 0 :(得分:0)
我知道这是一个老问题,但 argo 工作流有一个支持时区和夏令时的 Cron 工作流 CRD。 https://argoproj.github.io/argo-workflows/cron-workflows/#daylight-saving。