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
Google Kubernetes Engine におけるバッチ処理のパターン
Search
Shouta Yoshikai
April 19, 2018
Technology
7.3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Google Kubernetes Engine におけるバッチ処理のパターン
JapanContainerDays v18.04
Shouta Yoshikai
April 19, 2018
More Decks by Shouta Yoshikai
See All by Shouta Yoshikai
GKEで学ぶKubernetes入門
tinjyuu
1
2.4k
Other Decks in Technology
See All in Technology
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
140
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
280
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
130
データ_AIの事業の勝敗をわけるもの
nek0128
0
140
あるけみー式LTスライド作成術
alchemy1115
1
210
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
120
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
390
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
2
1.4k
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
1
500
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
150
ASTを使って影響範囲を特定する
nealle
0
190
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
140
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
Designing for humans not robots
tammielis
254
26k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
Navigating Team Friction
lara
192
16k
Git: the NoSQL Database
bkeepers
PRO
432
67k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
880
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Transcript
Google Kubernetes Engine における バッチ処理のパターン 株式会社 カブク 吉海 将太
自己紹介 2
自己紹介 吉海 将太 / @yoshikai_ ❏ 株式会社 カブク ❏ サーバーサイドエンドエンジニア
(開発と運用) ❏ Python, Go, Kubernetes, GCP ❏ コミュニティ活動 ❏ Kubernetes Meetup Tokyo, GCPUG Tokyo ❏ Web連載 ❏ CodeZine Kubernetesによるスケーラブルな Webアプリ環境の構築 ❏ 趣味 ❏ クソアプリ開発, IoT(ロボ作ったり、雨になったら開く紙の傘を作ったり 3
今日のゴール 4
今日のゴール Google Kubernetes Engineにおけるバッチ処理には • どの様なパターンがあるか ◦ K8S Job, メッセージキューイング
• どの様な構成例があるか ◦ 弊社の構成例をご紹介します 5
アジェンダ • バッチ処理の定義 • バッチ処理のパターン紹介 • 弊社の構築例を紹介 6
バッチ処理の定義 7
バッチ処理の定義 1. 数秒から数時間以上かかる処理 2. 非同期(今回は非同期のバッチ処理を想定しています) 弊社では、時間がかかる3D解析処理をバッチ処理にしています 本講演では、タスクという単語がよく出てきます。 タスクはバッチ処理のことを指します。 8
バッチ処理のパターン 9
バッチ処理のパターン 大きく分けて2通り • KubernetesのJob • メッセージキューイングの組み合わせる ◦ クラウドのメッセージキューイングサービス ▪ Cloud
Pub/Sub ◦ ミドルウェア ▪ RabbitMQ 10
KubernetesのJob • 一度限りの処理を実行させるためコンテナ ◦ 処理が終わるとコンテナが終了する • Kubernetesの標準の機能 • リトライ機能(コンテナ再実行) ◦
ゼロ以外の終了コード ◦ デフォルトのリトライ上限は6回 ▪ リトライのディレイは10秒, 20秒, 40秒と大きくなる • 上限は6分 標準機能なので使うのが容易だが単純な仕組みしか用意されていない ので、自前で色々と準備する必要があり 11
KubernetesのJobの構成例 12 Client K8S Job K8S API API Server &
Controller
Jobのみを使う構成ついて • メリット ◦ 構成するコンポーネントの数が少ない。シンプル超いいね ◦ 機能が単純なので理解しやすい • デメリット ◦
Jobの数が増えると管理するのが大変 ▪ ラベルをつけて管理出来るが数が多いと辛い ◦ 一度に大量のJobを作ると ▪ リソースの上限に達してしまう ▪ Kubernetes apiserver, controller, or schedulerに負荷が かかる 13
Jobのみを使う構成の問題 公式で紹介されている解決案 https://kubernetes.io/docs/tasks/job/parallel-processing-expansion/ • Parallel Processing using Expansions • Coarse
Parallel Processing Using a Work Queue ◦ RabbitMQと組み合わせる • Fine Parallel Processing Using a Work Queue ◦ Redisと組み合わせる 14
メッセージキューイングと組み 合わせる 15
メッセージキューイングと組み合わせる メリット • Jobのみ構成の問題解決 ◦ 管理の大変さ、リソース上限、K8SのAPIserverに対する負荷 の軽減 • 並列にタスクを処理できる •
Podを使える ◦ キャッシュをPodにもたせて処理時間の短縮 ◦ レスポンス性がいい ▪ コンテナ起動時の処理がはいらないので ◦ マシンリソースはJobより使うことに 16
メッセージキューイングの組み合わせる デメリット • 検討すべき点が増える ◦ どのメッセージキューイング使うか ◦ Push式するか、Pull式するか ◦ ネットワーク構成どうする
• コンポーネントが増える ◦ 運用コストなどが増える ◦ 構成を理解するのに時間がかかる 17
クラウドの メッセージキューイング 18
クラウドのメッセージキューイング Google Cloud Platform • Cloud Pub/Sub フルマネージドなので、導入コストが低い 負荷の問題も金で解決できる 通信経路が、K8Sのネットワーク外
19
クラウドのメッセージキューイングサービスを使った構 成図 Job 20 Client K8S Job (Worker) K8S API
Cloud Message Queue Cloud API API Server & Controller
クラウドのメッセージキューイングサービスを使った構 成図 Pod Push方式 21 Client K8S Pod (Worker) Cloud
API Cloud Message Queue Cloud API
ミドルウェアの メッセージキューイング 22
ミドルウェアの メッセージキューイング K8Sにミドルウェアを動作させる形 • RabbitMQなど 特徴 • 導入、運用コストが高い • 要件にあったミドルウェアを使える
23
Middlewareのメッセージキューイングサービスを 使った構成図 Pod Push方式 24 Client K8S Pod (Worker) Middleware
API Middleware Message Queue Middleware API
まとめ バッチ処理のパターンを検討する上で • 構成をシンプルに ◦ Jobで要件をみたすか ◦ 構成するコンポーネント数を少なく • 導入コスト、運用コスト
◦ クラウドを使うのかミドルウェアをブチ込むのか Jobでのバッチ処理を検討して難しいようであれば、メッセージキューイ ングを使った仕組みを検討する 25
弊社の構築例の紹介 26
弊社の構築例の紹介 要件 • タスクのリトライ機能 • 3D解析処理 ◦ 数秒から1時間を超える処理 • GPUとCPUのヘテロ構成
◦ GPU ▪ レンダリング ◦ CPU ▪ ポリゴンリダクション 27
注意!! これから紹介する構成例は 良くない例です 歴史的背景がなー 色々となー 28
現構成 29 Client K8S CPU Pod (Worker) HTTP AppEngine &
TaskQueue HTTP K8S GPU Pod (Worker) Pod (Worker) LB 非同期 同期
課題 • 長時間のタスクをHTTPで動的に投げているゆえの制約 ◦ 1タスクの最大処理時間が1時間の上限がある ▪ AppEngineのネットワーク制約 ▪ 3D解析処理によっては1時間超えることがある ◦
処理中のPodにもタスクが振られてしまう場合がある ▪ LoadBalancerで3D解析処理APIにリクエストを飛ばして いるため 30
課題点 31 K8S CPU Pod (Worker) HTTP AppEngine & TaskQueue
K8S GPU Pod (Worker) Pod (Worker) LB 処理終わるまで 繋ぎっぱ タスク処理中とか 知らんがな
そうだ、新しい構成に移行し よう 32
新要件 • HTTPを辞める ◦ 1時間を超えるタスクの処理が出来るように ◦ 空いているPodにタスクを振り分けるように 33
いくつか新しい構成を検討し ていくことに 34
検討したもの • Cloud Pub/Sub ◦ ACK(確認応答)の期限が最大10分 • Cloud Tasks ◦
アルファーなので本番使うのは無謀 • Redis ◦ シンプルで速いけど必要な機能が足りない • RabbitMQ ◦ 多機能。要件は満たしそう ◦ うさぎ可愛い 35
あ、RabbitMQだ! かわいい!! 36 君に決めた!
RabbitMQを使った構成 37
新構成 using RabbitMQ 38 Client K8S CPU Pod (Worker) amqp
Rabbit MQ HTTP K8S GPU Pod (Worker) Pod (Worker) AppEngine (API互換のため)
新構成 using RabbitMQ • タスクの処理時間の上限の問題の解決 ◦ AMQP • 処理中のPodにもタスクが振られてしまう問題の解決 ◦
コンシューマーのプリフェッチカウントを1 39
まとめ 40
まとめ • バッチ処理のパターンには大きく2通り ◦ Job ◦ メッセージキューイング • バッチ処理の構成は ◦
なるべくシンプルに ◦ コストを考える • 悪い構成は良くしていこうな ◦ なかなか難しい... 41
おまけ 42
エンジニアを募集してます!!!! • フロントエンドエンジニア • サーバーサイドエンジニア • 機械学習エンジニア 3名のGoogle Developers Expertsが在籍!!
3Dプリンター使い放題!! 43
4月22日の技術書典にサークル参加します!!! 44