OpenShift:尽管主配置正确,但 Cronjob 在错误的时区执行

sim*_*szu 5 cron timezone kubernetes

我在 OpenShift 中配置了一个 cronjob。它的 crontab 条目如下所示:

spec:
  schedule: "0 3 * * 1-5"
  jobTemplate:
Run Code Online (Sandbox Code Playgroud)

所以它应该在工作日的早上 03:00 运行。所有集群节点都配置为使用我们的本地时区 CET,即 UTC+1。这可以通过date命令看到。OpenShift 文档说 cronjobs 是通过与主节点配置的时区匹配的 crontab 执行的,所以我希望 cronjobs 实际在欧洲中部时间 03:00 运行。

但是,根据日志,cronjobs 在 04:00 执行,即 UTC 时间的 03:00 CET。奇怪的部分是oc describe cronjob揭示:

Last Schedule Time:  Mon, 14 Jan 2019 04:00:00 +0100
Run Code Online (Sandbox Code Playgroud)

因此,服务器实际上知道 cronjob 执行得太晚了一个小时。

我的问题是:为什么 cronjob 执行晚了一个小时,为什么服务器知道它,我该如何解决这个问题?

小智 6

CronJobs 由主控制器控制。

在 Openshift(~v3.10 之后)中,控制器作为 pod 运行,定义在/etc/origin/node/pods(至少在我们的设置中)。

我们遇到了完全相同的问题,并注意到控制器日志中的时间戳是一小时。

这是通过在 /etc/origin/node/pods/controller.yaml

在 下volumeMounts:,添加:

   - mountPath: /etc/localtime
      name: localtime
Run Code Online (Sandbox Code Playgroud)

在 下volumes:,添加:

  - hostPath:
      path: /etc/localtime
    name: localtime
Run Code Online (Sandbox Code Playgroud)