Я настроил cronjob в OpenShift. Его запись в crontab выглядит так:
spec:
schedule: "0 3 * * 1-5"
jobTemplate:
Так что в будние дни он должен работать в 03:00 утра. Все узлы кластера настроены на использование нашего местного часового пояса, CET, который равен UTC + 1. Это видно через date
команда. В документации OpenShift говорится, что cronjobs выполняются через crontab, соответствующий настроенному часовому поясу главных узлов, поэтому я ожидаю, что cronjobs фактически запустятся в 03:00 CET.
Однако, согласно журналам, cronjobs выполняются в 04:00, что составляет 03:00 CET по UTC. Странно то, что oc describe cronjob
показывает:
Last Schedule Time: Mon, 14 Jan 2019 04:00:00 +0100
Таким образом, сервер действительно знает, что задание cron выполнено на час позже.
Мой вопрос: почему задание cron выполняется на час позже, почему сервер знает об этом и как я могу это исправить?
CronJobs управляется мастер-контроллером.
В Openshift (после ~ v3.10) контроллеры запускаются как под, определенный в /etc/origin/node/pods
(по крайней мере, в нашей настройке).
У нас была точно такая же проблема, и мы заметили, что отметка времени в журналах контроллера была на один час позже.
Это было исправлено добавлением крепления в /etc/origin/node/pods/controller.yaml
Под volumeMounts:
, Добавить:
- mountPath: /etc/localtime
name: localtime
Под volumes:
, Добавить:
- hostPath:
path: /etc/localtime
name: localtime