我在 OpenShift 中配置了一个 cronjob。它的 crontab 条目如下所示:
spec:
schedule: "0 3 * * 1-5"
jobTemplate:
因此它应该在工作日早上 03:00 运行。所有集群节点都配置为使用我们的本地时区 CET,即 UTC+1。这可以通过命令查看date
。OpenShift 文档说 cronjobs 是通过与主节点配置的时区匹配的 crontab 执行的,所以我预计 cronjobs 实际上会在 03:00 CET 运行。
但是,根据日志,cronjobs 是在 04:00 执行的,也就是 UTC 的 03:00 CET。奇怪的是,它oc describe cronjob
显示:
Last Schedule Time: Mon, 14 Jan 2019 04:00:00 +0100
因此,服务器实际上知道 cronjob 执行晚了一个小时。
我的问题是:为什么 cronjob 执行晚了一个小时,为什么服务器知道这件事,我该如何解决这个问题?
答案1
CronJobs 由主控制器控制。
在 Openshift(~v3.10 之后)中,控制器作为 pod 运行,并在/etc/origin/node/pods
(至少在我们的设置中)中定义。
我们遇到了完全相同的问题,并注意到控制器日志中的时间戳相差了一个小时。
这个问题通过添加安装来解决/etc/origin/node/pods/controller.yaml
在 下volumeMounts:
,添加:
- mountPath: /etc/localtime
name: localtime
在 下volumes:
,添加:
- hostPath:
path: /etc/localtime
name: localtime