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
220
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
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
KATA
mclloyd
32
15k
The Pragmatic Product Professional
lauravandoore
36
6.9k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Making Projects Easy
brettharned
119
6.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Side Projects
sachag
455
43k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Thoughts on Productivity
jonyablonski
70
4.9k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
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
ご清聴ありがとうございました!!