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
Rails_on_EKSのマイグレーション_失敗パターンを検証してみた
Search
納谷太陽
PRO
September 25, 2025
0
250
Rails_on_EKSのマイグレーション_失敗パターンを検証してみた
納谷太陽
PRO
September 25, 2025
Tweet
Share
More Decks by 納谷太陽
See All by 納谷太陽
Kubernetesを手元で学ぼう! 初心者向けローカル環境のススメ
nayaaaa
PRO
2
1.3k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
526
40k
Designing for Performance
lara
610
69k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
270
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to train your dragon (web standard)
notwaldorf
97
6.3k
Bash Introduction
62gerente
615
210k
Why Our Code Smells
bkeepers
PRO
340
57k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Transcript
Rails on EKS マイグレーション 失敗パターンを検証してみた SATORI株式会社 納谷太陽
自己紹介 @NayaTaiyo • 年齢:25歳 • 会社:SATORI株式会社 • 好きな食べ物:ラーメン、カレー • 趣味:音楽を聴くこと
• 好きな技術:Ansible、Kubernetes、AWS • Qiita:@nayaaaa • GitHub:nayataiyo
なぜやろうと思ったか? • 最近転職してRailsを学習する必要がある • ITインフラ 勉強もサボるわけに いかない 何か効率 良い方法 ないか
🤔 そういえ Kubernetes勉強したときにITインフラについて 網羅的に学習できた気がしたな....
None
Rails マイグレーションと ? マイグレーション(migration) Active Recordと呼 れるRails 標準機能 1つで あり、データベーススキーマが長期にわたって進化を安定して繰り返せるようにす
るため 仕組みです。 マイグレーション機能 おかげで、スキーマ変更を生SQLで記述せずに、Rubyで作 成されたマイグレーション用 DSL(ドメイン固有言語)を用いてテーブル 変更を 簡単に記述できます。 ▪ 公式ドキュメント https://railsguides.jp/active_record_migrations.html
# 失敗時:直近に戻す→確認 bin/rails rollback STEP=1 bin/rails db:version # 生成→適用→確認 bin/rails
g model novice name:string description:text bin/rails db:migrate bin/rails db:version # 変更(列追加)→適用→確認 bin/rails g migration AddNayanayaToNovices nayanaya:text bin/rails db:migrate bin/rails db:version
というようにめちゃくちゃ便利な機能です!! で 本題 失敗パターン ど ようなも がある かな?
Rails on EKSマイグレーション 失敗パターン • 複数 db:migrateが同時実行 • InitContainerにdb:migrateを記述する •
Resource不足で OOMKilled ※他にも様々なパターン(IAM権限やDB権限不足など)が あるかもしれないですが検証まで行えた これらになります。
複数 db:migrateが同時実行 • Deployment マニフェストに以下 ような記述をして applyすると?
Datadogで確認すると以下 ようなエラーを発見 👀
結果めちゃくちゃ時間がかかった....
InitContainerにdb:migrateを記述 • 何がまずいか? ◦ InitContainerでdb:migrateがこけるとアプリケーションコンテナが起動しな い ◦ 複数 db:migrateも同時実行されてしまう ◦
エラーが発生した際にログ 確認がしづらい
そもそもInitcontainerってなんだっけ? 単一 Pod 、Pod内にアプリケーションを実行している複数 コ ンテナを持つことができますが、同様に、アプリケーションコンテナ が起動する前に実行されるInitコンテナも1つ以上持つことができ ます。 また、Initコンテナ そ
Pod 準備ができる前に完了する必要 があります。 ▪ 公式ドキュメント https://kubernetes.io/ja/docs/concepts/workloads/pods/init-containers/
実際にInitcontainerでこけた例👇
None
Resource 不足で OOMKilled • 何がまずいか? ◦ resources:limits 制限によりOOMKilled発生 ◦ OOMKilledによりPODがCrashLoopBackOffとなる
OOMとresources:limitsと ? OOM アウトオブメモリ(Out Of Memory) 略でシステムが必要 とするメモリ容量を確保できず、処理 続行が不可能となり発生 するエラー
こと。 resources:limits Kubernetesで 、コンテナによって使用される リソース 最大量 設定値 こと。メモリ量とCPUが定義できる。 ▪ 公式ドキュメント https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-memory-res ource/
• OOMKilled→ClashLoopBackOFFにSTATUSが変化している kubectl getコマンドで確認してみると 👀
kubectl describeコマンドで確認してみると 👀
適切なリソース 調整が必要 or resources:limitsを設定しない?
余談な ですが.... 登壇って失敗パターンを見える化してる発表ってあんまりないですよ ?
まとめ • db:migrate ジョブで分離し、CI/CDなどで制御する。 • 適切なリソース 調整が必要 • 初めて オンライン登壇
👏 👉 初めて触る技術が多かった で学びが多かった 良かったです。 と いえ、実務で扱っているわけで ない で有識者 方ナレッジ募です。
Datadog トライアル期間終了 • お気づきかもしれないですが、検証途中でDatadog トライア ル期間が終了した で途中 スライドからkubectlコマンドで 確認する形としています😭 Proプランに入会しようかなぁ....
参考リンク • https://kubernetes.io/ja/docs/concepts/workloads/pods/init-containers/ • https://kubernetes.io/ja/docs/tasks/configure-pod-container/assign-memor y-resource/ • https://speakerdeck.com/takeru_ichii_0901/rails-on-kubernetes-tousuru-00?sli de=58 •
https://qiita.com/MahoTakara/items/ef8ce41dfb5bc9308185 • https://medium.com/codex/database-migration-when-your-service-is-runni ng-in-kubernetes-abbe9697421d
ご清聴ありがとうございました!!