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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
信頼性の目標を誰も求めてない
shubox
0
110
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Press start. Python's next generation.
willingc
PRO
3
140
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
490
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
280
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.1k
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
2
1.2k
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
220
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
VibeCodingからAgenticWorkflowへ
starfish719
0
870
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
250
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Become a Pro
speakerdeck
PRO
31
6.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
220
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
360
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
450
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
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