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
TajimaTheMemer
October 19, 2021
Programming
0
1.2k
CronJobがschedule通りにJobを生成しない時
Kubernetes Novice Tokyo #14 のLT枠の登壇資料です。
TajimaTheMemer
October 19, 2021
Tweet
Share
More Decks by TajimaTheMemer
See All by TajimaTheMemer
事業成長を加速させるGoのコード品質改善の取り組み / Code quality improvement for Go language
tajimathememer
5
2.1k
入門wasm
tajimathememer
0
86
ふわっと理解する類似画像検索技術
tajimathememer
0
140
Machine Learning As Software
tajimathememer
0
63
Other Decks in Programming
See All in Programming
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
0
100
Symfony Mapper Component
soyuka
2
730
Cloudflare MCP ServerでClaude Desktop からWeb APIを構築
kutakutat
1
550
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
450
たのしいparse.y
ydah
3
120
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
260
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
CSC305 Lecture 26
javiergs
PRO
0
140
ドメインイベント増えすぎ問題
h0r15h0
2
340
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
BBQ
matthewcrist
85
9.4k
Facilitating Awesome Meetings
lara
50
6.1k
Making Projects Easy
brettharned
116
5.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
How to Ace a Technical Interview
jacobian
276
23k
Six Lessons from altMBA
skipperchong
27
3.5k
The Cult of Friendly URLs
andyhume
78
6.1k
Navigating Team Friction
lara
183
15k
Faster Mobile Websites
deanohume
305
30k
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