Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CronJobがschedule通りにJobを生成しない時
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
TajimaTheMemer
October 19, 2021
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CronJobがschedule通りにJobを生成しない時
Kubernetes Novice Tokyo #14 のLT枠の登壇資料です。
TajimaTheMemer
October 19, 2021
More Decks by TajimaTheMemer
See All by TajimaTheMemer
事業成長を加速させるGoのコード品質改善の取り組み / Code quality improvement for Go language
tajimathememer
5
3.1k
入門wasm
tajimathememer
0
160
ふわっと理解する類似画像検索技術
tajimathememer
0
170
Machine Learning As Software
tajimathememer
0
110
Other Decks in Programming
See All in Programming
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
230
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
190
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
初めてのKubernetes 本番運用でハマった話
oku053
0
120
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
350
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
act2-costs.pdf
sumedhbala
0
110
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
act1-costs.pdf
sumedhbala
0
210
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
We Have a Design System, Now What?
morganepeng
55
8.2k
Building the Perfect Custom Keyboard
takai
2
810
Abbi's Birthday
coloredviolet
3
8.6k
Technical Leadership for Architectural Decision Making
baasie
3
440
Transcript
CronJobがschedule通りに Jobを生成しない時 Kubernetes Novice Tokyo #14 2021/10/19
株式会社ZOZO 技術本部 データシステム部 MLOpsブロック 田島 太一 Copyright © ZOZO, Inc.
© ZOZO, Inc. 株式会社ZOZO 技術本部 データシステム部 MLOpsブロック 田島
太一 Kubernetes(GKE)歴: 1.5年 Twitter: @tap1ma GitHub: TajimaTheMemer 2
© ZOZO, Inc. https://zozo.jp/ 3 • ファッション通販サイト • 1,400以上のショップ、8,400以上のブランドの取り扱い
• 常時83万点以上の商品アイテム数と毎日平均2,900点以上の新着 商 品を掲載(2021年6月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、靴の専門モール 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など
© ZOZO, Inc. https://wear.jp/ 4 • ファッションコーディネートアプリ • 1,500万ダウンロード突破、コーディネート投稿総数は1,000万件以上
(2021年6月末時点) • ピックアップタグから最新のトレンドをチェック • コーディネート着用アイテムをブランド公式サイトで購入可能 • WEAR公認の人気ユーザーをWEARISTAと認定。モデル・タレント・デザ イナー・インフルエンサーといった各界著名人も参加
© ZOZO, Inc. CronJobがschedule通りにJob を生成しない時 5
© ZOZO, Inc. 本日は... CronJob運用時のschedule周りのハマり どころをお話します
6
© ZOZO, Inc. 突然ですが、 皆さんはCronJobを運用していますか? 7
© ZOZO, Inc. CronJobとは 8
© ZOZO, Inc. CronJobとは 定期実行するバッチ処理を制御するKubernetes のリソース 9
© ZOZO, Inc. CronJobとは CronJob Jobを定期的に生成するリソース ↪ Job
バッチ処理をPodとして実行するリソース ↪ Pod 10
© ZOZO, Inc. CronJobとは 11
© ZOZO, Inc. CronJobの概要はこんなところで。 では、本題に入ります。 12
© ZOZO, Inc. 本日は CronJobのschedule周りのハマりどころについて 説明します。 13
© ZOZO, Inc. 具体的には、以下について解説します。 • schedule指定の時刻じゃないのにJobを生成してしまう ケース(2つ)
• schedule指定の時刻になってもJobを生成しないケース(1つ) 14
© ZOZO, Inc. schedule指定の時刻じゃないのに Jobを生成してしまうケース 15
© ZOZO, Inc. schedule指定の時刻じゃないのに Jobを生成してしまうケース 1つ目 16
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース① scheduleを変更した際に以下の時系列の順序が成り立って いると即座にJobが生成される。 lastScheduleTimeの日時
↓ 変更前のscheduleの次回予定日時 ↓ 変更後のscheduleの次回予定日時 17
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース① lastScheduleTimeとは... CronJobが直近でJobを生成した日時のこと。
18
© 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
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース① なぜ...? CronJobの仕様です。 ただし、Kubernetes 1.20からalphaで使用できるCronJob
Controller v2では この挙動は発生しません。 ※alphaなのでご注意 20 参考: https://github.com/kubernetes/kubernetes/issues/65457#issuecomment-400984574
© ZOZO, Inc. schedule指定の時刻じゃないのに Jobを生成してしまうケース 21
© ZOZO, Inc. schedule指定の時刻じゃないのに Jobを生成してしまうケース 2つ目 22
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② CronJobのsuspendをtrue → falseに変更した時、 scheduleで指定した時刻からstartingDeadlineSecondsの時間内である
と、即座にJobが生成される。 23
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② startingDeadlineSecondsとは... CronJobのoptionalな設定値の1つ。 開始時刻が遅れた場合に許容できる秒数を指定できる。
24
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② 具体例 • 8:00〜9:00は開始時刻として許容する設定になっていた。 ◦
毎日8:00(UTC)に実行されるscheduleを設定していた。 ◦ startingDeadlineSecondsに3600秒(=1時間)を設定していた。 • ある日の8:30にsuspend: true → falseに変更しkubectl applyした。するとJobが 即座に生成された。 25
© ZOZO, Inc. schedule指定の時刻じゃないのにJobを生成してしまうケース② なぜ...? これもCronJobの仕様です。 suspend: true
→ falseに変更する際はその時刻と startingDeadlineSecondsの設定値に気を配りましょう。 26
© ZOZO, Inc. schedule指定の時刻になっても Jobを生成しないケース 27
© ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース 以下の設定でscheduleに指定した時刻を100回以上迎えると、その後 suspend: true → falseへ変更後にscheduleの時刻を迎えてもJobが生成さ
れなくなってしまう 。 • startingDeadlineSecondsが未設定 • CronJobがsuspend: trueの設定 28
© ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース 具体例 • startingDeadlineSecondsが未設定だった。毎分実行されるschedule設定にし ていた。 •
10:00(UTC)にsuspend:trueにし、それから2時間後の12:00(UTC)にsuspend: falseに戻した。 (=120回スキップ) • 12:01(UTC)にJobが生成されると思いきや、生成されない。 29
© ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース なぜ...? これまたCronJobの仕様です。 CronJobは100回連続で失敗するとJobを生成しなくなる。 (suspend:
true時のスケジュール実行は内部的には失敗としてカウント されている) 30
© ZOZO, Inc. schedule指定の時刻になってもJobを生成しないケース 回避策 「startingDeadlineSecondsを適切に設定する」 startingDeadlineSecondsを設定すると...
「100回連続の失敗すると」ではなく「scheduleに指定した時刻から startingDeadlineSecondsの設定した秒数の間に連続して100回失敗する と」Jobを生成しなくなる。 31
© ZOZO, Inc. まとめ 32
© ZOZO, Inc. まとめ scheduleやsuspendの設定値を変更する際は 変更するタイミングやstartingDeadlineSecondsの設定値に気をつ けましょう
33
© ZOZO, Inc. 参考 • Kubernetes公式ドキュメント: CronJob • CronJob v2
ControllerのPull Request • mercari engineering: Kubernetes CronJobと仲良くなりたい 34
None