OpenShift: Cronjob is executed in wrong timezone despite master configuration is correct
I have a configured a cronjob in OpenShift. Its crontab entry looks like this:
spec:
schedule: "0 3 * * 1-5"
jobTemplate:
So it should run at 03:00 in the morning on weekdays. All cluster nodes are configured to use our local timezone, CET, which is UTC+1. This is visible via the date
command. OpenShift documentation says that cronjobs are executed via the crontab matching the configured time zone of the master nodes, so i expect the cronjobs to actually run at 03:00 CET.
However, according to the logs, the cronjobs are executed at 04:00 which is 03:00 CET in UTC. The strange part is that oc describe cronjob
reveals:
Last Schedule Time: Mon, 14 Jan 2019 04:00:00 +0100
So, the server actually knows that the cronjob is executed one hour too late.
My question is: Why is the cronjob executed one hour too late, why does the server know about it, and how can i fix this?
CronJobs are controlled by the master-controller.
In Openshift (after ~v3.10), the controllers are run as a pod, defined in /etc/origin/node/pods
(at least in our setup).
We had the exact same problem and noticed that the timestamp in controller-logs was one hour off.
This was fixed by adding a mount in /etc/origin/node/pods/controller.yaml
Under volumeMounts:
, add:
- mountPath: /etc/localtime
name: localtime
Under volumes:
, add:
- hostPath:
path: /etc/localtime
name: localtime