web-dev-qa-db-ja.com

OpenShift:マスター構成が正しいにもかかわらず、Cronjobが間違ったタイムゾーンで実行される

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時間遅れで実行されるのですか、なぜサーバーはそれを知っているのですか?これをどのように修正できますか?

3
simonszu

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
4
Nils Otto