Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CronJobがschedule通りにJobを生成しない時

 CronJobがschedule通りにJobを生成しない時

Kubernetes Novice Tokyo #14 のLT枠の登壇資料です。

TajimaTheMemer

October 19, 2021
Tweet

More Decks by TajimaTheMemer

Other Decks in Programming

Transcript

  1. CronJobがschedule通りに 
 Jobを生成しない時 
 Kubernetes Novice Tokyo #14 2021/10/19 


    
 株式会社ZOZO
 技術本部 データシステム部
 MLOpsブロック
 田島 太一 Copyright © ZOZO, Inc.
  2. © ZOZO, Inc. 株式会社ZOZO 
 技術本部 データシステム部 
 MLOpsブロック 田島

    太一
 Kubernetes(GKE)歴: 1.5年
 
 Twitter: @tap1ma
 GitHub: TajimaTheMemer
 
 
 2
  3. © ZOZO, Inc. https://zozo.jp/ 
 3 • ファッション通販サイト
 • 1,400以上のショップ、8,400以上のブランドの取り扱い


    • 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商 品を掲載(2021年6月末時点)
 • ブランド古着のファッションゾーン「ZOZOUSED」や
 コスメ専門モール「ZOZOCOSME」、靴の専門モール
 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン
 「ZOZOVILLA」を展開
 • 即日配送サービス
 • ギフトラッピングサービス
 • ツケ払い など

  4. © ZOZO, Inc. https://wear.jp/ 
 4 • ファッションコーディネートアプリ
 • 1,500万ダウンロード突破、コーディネート投稿総数は1,000万件以上

    (2021年6月末時点)
 • ピックアップタグから最新のトレンドをチェック
 • コーディネート着用アイテムをブランド公式サイトで購入可能
 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加

  5. © ZOZO, Inc. CronJobとは 
 CronJob Jobを定期的に生成するリソース 
 ↪ Job

    バッチ処理をPodとして実行するリソース 
 ↪ Pod
 
 
 10
  6. © ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース① 
 具体例
 • 毎日8:00(UTC)に実行されるscheduleに設定していた。 
 •

    10/18 6:00(UTC) に、scheduleを毎日8:00(UTC) → 毎日9:00(UTC)実行に変更し kubectl applyした。すると、即座にJobが生成された。 
 
 lastScheduleTimeの日時(10/17 8:00) 
 ↓
 変更前のscheduleの次回予定日時(10/18 8:00) 
 ↓
 変更後のscheduleの次回予定日時(10/18 9:00) 
 19
  7. © ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース① 
 なぜ...? CronJobの仕様です。 
 ただし、Kubernetes 1.20からalphaで使用できるCronJob

    Controller v2では この挙動は発生しません。 ※alphaなのでご注意 
 
 
 20 参考: https://github.com/kubernetes/kubernetes/issues/65457#issuecomment-400984574
  8. © ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② 
 具体例
 • 8:00〜9:00は開始時刻として許容する設定になっていた。 
 ◦

    毎日8:00(UTC)に実行されるscheduleを設定していた。 
 ◦ startingDeadlineSecondsに3600秒(=1時間)を設定していた。 
 • ある日の8:30にsuspend: true → falseに変更しkubectl applyした。するとJobが 即座に生成された。 
 
 
 25
  9. © ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② 
 なぜ...? これもCronJobの仕様です。 
 suspend: true

    → falseに変更する際はその時刻と startingDeadlineSecondsの設定値に気を配りましょう。 
 
 
 
 26
  10. © ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース 
 具体例
 • startingDeadlineSecondsが未設定だった。毎分実行されるschedule設定にし ていた。
 •

    10:00(UTC)にsuspend:trueにし、それから2時間後の12:00(UTC)にsuspend: falseに戻した。 (=120回スキップ) 
 • 12:01(UTC)にJobが生成されると思いきや、生成されない。 
 
 
 
 29
  11. © ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース 
 回避策 「startingDeadlineSecondsを適切に設定する」 
 startingDeadlineSecondsを設定すると... 


    「100回連続の失敗すると」ではなく「scheduleに指定した時刻から startingDeadlineSecondsの設定した秒数の間に連続して100回失敗する と」Jobを生成しなくなる。 
 
 
 
 31
  12. © ZOZO, Inc. 参考
 • Kubernetes公式ドキュメント: CronJob • CronJob v2

    ControllerのPull Request • mercari engineering: Kubernetes CronJobと仲良くなりたい
 34