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
880
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
1.4k
入門wasm
tajimathememer
0
38
ふわっと理解する類似画像検索技術
tajimathememer
0
100
Machine Learning As Software
tajimathememer
0
39
Other Decks in Programming
See All in Programming
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
110
Cloudflare Workersの環境を再現することについて
yusukebe
5
730
So You Think You Know Git - Part 2
schacon
PRO
0
1.3k
Cloud RunとCloud PubSubでサーバレスなデータ基盤2024 with Terraform / Cloud Run and PubSub with Terraform
shinyorke
7
1.7k
品質が高いコードって何?Rev2.1
ickx
1
390
Apple Vision Pro購入RTA 1泊3日弾丸ハワイツアー / RTA: Purchase Apple Vision Pro in Hawaii
yutailang0119
0
480
一休.comレストランのRustバックエンド開発の様子
kymmt90
13
7.9k
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
2
400
SmartHRにおけるプロダクトエンジニア/product_engineer_in_smarthr_20240227
saitoryc
5
180
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
2
190
生成 AI の中身を覗いてみよう〜基礎から医療現場での応用まで〜
soh9834
2
700
開発者体験を変えるInfrastructure as Codeの新機能6選!
konokenj
4
850
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
215
8.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
11
1.4k
Facilitating Awesome Meetings
lara
39
5.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
Web Components: a chance to create the future
zenorocha
304
41k
A better future with KSS
kneath
230
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
0
3.2k
Raft: Consensus for Rubyists
vanstee
130
6.2k
Teambox: Starting and Learning
jrom
126
8.3k
Code Reviewing Like a Champion
maltzj
512
39k
We Have a Design System, Now What?
morganepeng
42
6.7k
How STYLIGHT went responsive
nonsquared
92
4.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