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
Active job meets kubernetes
Search
Yasutomo Uemori
PRO
September 24, 2019
Programming
57
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Active job meets kubernetes
Kubernetes Meetup Osaka #1でのLT資料です
Yasutomo Uemori
PRO
September 24, 2019
More Decks by Yasutomo Uemori
See All by Yasutomo Uemori
よくわかる新収益認識基準
wakaba260
PRO
0
1.5k
いまどきのゲームサーバアーキテクチャ
wakaba260
PRO
1
610
オンラインゲームのRails複数db戦略
wakaba260
PRO
0
97
Ruby/Rails Benchmarking and Profiling with TDD
wakaba260
PRO
0
86
GCP・GKEで作るスケーラブルなゲーム開発環境
wakaba260
PRO
0
94
サービスクラス、その前に
wakaba260
PRO
0
53
Rails on Dockerとの戦い
wakaba260
PRO
0
51
Rubocopとの付き合い方
wakaba260
PRO
0
58
Rails api way in aiming
wakaba260
PRO
0
64
Other Decks in Programming
See All in Programming
React本体のコードリーディング
high_g_engineer
1
140
メールのエイリアス機能を履き違えない
isshinfunada
0
240
FDEが実現するAI駆動経営の現在地
gonta
2
280
数百円から始めるRuby電子工作
tarosay
0
150
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
230
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
590
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
910
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.4k
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
500
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
450
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
370
A designer walks into a library…
pauljervisheath
211
24k
For a Future-Friendly Web
brad_frost
183
10k
Practical Orchestrator
shlominoach
191
12k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
480
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Building AI with AI
inesmontani
PRO
1
1.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Evolving SEO for Evolving Search Engines
ryanjones
0
250
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Transcript
ActiveJob meets Kubernetes Kubernetes Meetup Osaka #1 LT 植森 康友(wakaba260)
me.inspect => { “HN”: "wakaba260", “name”: "Yasutomo Uemori", “company”: "株式会社Aiming",
“twitter”: "https://twitter.com/wakaba260yen", “github”: "https://github.com/yuemori", “skills”: ["rails api", "docker", "kubernetes", "GCP"] }
ActiveJob?
ActiveJob(Rails) - Ruby on Railsの非同期ジョブの仕組み - Adapterを実装することでなんでもバックエンドに出来る - 現在の主な実装例 -
Sidekiq, Resque: ruby製のjob queue worker - Shoryuken: Amazon SQSをメッセージキューに使える
ActiveJobの使用例 class GuestsCleanupJob < ApplicationJob queue_as :default def perform(*args) #
後で実行したい作業をここに書く end end # 「キューイングシステムが空いたらジョブを実行する」とキューに登録する guest = Guest.find(guest_id) GuestsCleanupJob.perform_later(guest)
Rails on Kubernetesでのジョブの運用 - SidekiqのworkerをDeploymentで立てる - ジョブキューのBackendにredisを立てる - replicas指定でworker数を増やしてスケールアウト
唐突な思いつき - Sidekiqのworkerのスケールアウトを考えるとCPU使用率などでは 上手くスケールできない - Kubernetesには既にJobという仕組みがある - リトライ、タイムアウトなど機能も充実 - Kubernetes
Jobを使うことでいい感じにスケールできそう
作ってみた https://github.com/yuemori/kube_queue/
# app/jobs/print_message_job.rb class PrintMessageJob < ApplicationJob include KubeQueue::Worker worker_name 'print-message-job'
image "your-registry/your-image" container_name 'your-container-name' def perform(payload) logger.info payload[:message] end end PrintMessageJob.perform_later(message: ‘hello!’)
class ComputePiJob < ApplicationJob include KubeQueue::Worker worker_name 'pi' image 'perl'
container_name 'pi' command "perl","-Mbignum=bpi","-wle","print bpi(2000)" cpu_limit '0.3' cpu_request '0.2' memory_limit '100m' memory_request '50m' end
kube_queueの実装 - perform_laterを呼んだら指定されたJobを起動 - やってることはJob作成のAPIを呼ぶだけ
やってみてわかったこと - スケールアウトがworkerのreplica数からリソースに依存するように なった - KubernetesのAPI経由でコンテナを呼ぶことで、プラットフォームや 言語に依存せずにコンテナの恩恵を享受できる - KubernetesのAPIを呼ぶことでいろいろ面白いことが出来るので、 活用する機会があれば試していきたい
ご静聴ありがとうございました