OpenShiftでcronjobを構成しました。そのcrontabエントリは次のようになります。
spec:
schedule: "0 3 * * 1-5"
jobTemplate:
したがって、平日の午前3時に実行する必要があります。すべてのクラスターノードは、ローカルタイムゾーンであるCET(UTC + 1)を使用するように構成されています。これは、date
コマンドを介して表示できます。 OpenShiftのドキュメントには、マスターノードの構成されたタイムゾーンに一致するcrontabを介してcronjobsが実行されると記載されているため、実際には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が1時間遅れて実行されることを認識しています。
私の質問は次のとおりです:なぜcronjobは1時間遅れで実行されるのですか、なぜサーバーはそれを知っているのですか?これをどのように修正できますか?
CronJobはマスターコントローラーによって制御されます。
Openshift(〜v3.10以降)では、コントローラーは/etc/Origin/node/pods
で定義されたポッドとして実行されます(少なくともセットアップでは)。
まったく同じ問題が発生し、コントローラーログのタイムスタンプが1時間ずれていることがわかりました。
これは、/etc/Origin/node/pods/controller.yaml
にマウントを追加することで修正されました
volumeMounts:
の下に、以下を追加します。
- mountPath: /etc/localtime
name: localtime
volumes:
の下に、以下を追加します。
- hostPath:
path: /etc/localtime
name: localtime