Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
170
ふわっと理解する類似画像検索技術
tajimathememer
0
170
Machine Learning As Software
tajimathememer
0
110
Other Decks in Programming
See All in Programming
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.2k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
新卒PdEのリアル
ryu1013
1
500
Jetpack Compose メカニズム
skydoves
0
420
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
570
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
120
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
6
1.9k
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
Heart of Swift Concurrency
koher
0
740
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
710
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
Featured
See All Featured
HDC tutorial
michielstock
2
870
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
The browser strikes back
jonoalderson
0
1.7k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
540
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Embracing the Ebb and Flow
colly
88
5.2k
30 Presentation Tips
portentint
PRO
1
390
Paper Plane (Part 1)
katiecoart
PRO
2
11k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The Curse of the Amulet
leimatthew05
3
14k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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