Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリのコンテナ化と排他制御 ~ データ 破壊 だ ヨ 全員集合
Search
Satoru Takeuchi
PRO
November 30, 2020
Technology
6
9.2k
アプリのコンテナ化と排他制御 ~ データ 破壊 だ ヨ 全員集合
Kubernetes Meetup Tokyo #36のLT資料です。
https://k8sjp.connpass.com/event/196212/
Satoru Takeuchi
PRO
November 30, 2020
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
eBPF
sat
PRO
1
82
waruiBPF
sat
PRO
0
72
eBPFとwaruiBPF
sat
PRO
4
2.4k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
86
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
170
様々なファイルシステム
sat
PRO
0
310
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
400
ソースを読むプロセスの例
sat
PRO
22
17k
メモリマップトファイル
sat
PRO
1
160
Other Decks in Technology
See All in Technology
Modern Data Stack大好きマンが語るSnowflakeの魅力
sagara
0
300
たかが特別な時間の終わり / It's Only the End of Special Time
watany
28
7.6k
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
10
6.4k
Agentic AI Patterns and Anti-Patterns
glaforge
1
150
.NET 10 のパフォーマンス改善
nenonaninu
2
4.9k
Overture Maps Foundationの3年を振り返る
moritoru
0
110
GitLab Duo Agent Platformで実現する“AI駆動・継続的サービス開発”と最新情報のアップデート
jeffi7
0
200
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
160
小さな判断で育つ、大きな意思決定力 / 20251204 Takahiro Kinjo
shift_evolve
PRO
1
490
Security Diaries of an Open Source IAM
ahus1
0
130
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
300
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
630
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
How STYLIGHT went responsive
nonsquared
100
5.9k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Building Applications with DynamoDB
mza
96
6.8k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.1k
Transcript
アプリのコンテナ化と排他制御 ~ データ破壊だヨ!全員集合 Nov 30, 2020 sat@サイボウズ 1
前置き ▌アプリのコンテナ化は罠だらけ ▌本セッションは排他制御にまつわる罠を紹介 ▌実例として最近検出したRook/Ceph(後述)の データ破壊問題を紹介 2
Cephとは ▌OSSの分散ストレージシステム ▌データはOSDという領域に保存 ⚫OSDはクラスタ内のディスク上に作成 ⚫Ceph-osdというdaemonがOSD上のデータを読み書き ▌各データは全OSDにおおむね均等に分散配置 3 node0 node1 HDD
HDD HDD HDD OSD OSD OSD OSD
データ書き込み時の挙動 4 node0 node1 Cephクライアント HDD HDD HDD HDD OSD
OSD OSD OSD data0
データ書き込み時の挙動 5 node0 node1 Cephクライアント HDD HDD HDD HDD OSD
OSD OSD OSD data1 data0
データ書き込み時の挙動 6 node0 node1 Cephクライアント HDD HDD HDD HDD OSD
OSD OSD OSD data1 data2 data0
データ書き込み時の挙動 7 node0 node1 Cephクライアント HDD HDD HDD HDD OSD
OSD OSD OSD data1 data2 data0 data3
Rookとは ▌K8s上で動作するCephのオーケストレーション ▌1つのOSDに対して1つPodが存在 8 node OSD Pod OSD Pod HDD
HDD OSD OSD ceph-osd ceph-osd 操作 操作
OSD Podの管理方法 ▌諸事情によりStatefulSetではなくDeploymentsを使用 ▌ceph-osdには二重起動を避ける仕組みが存在 ⚫/var/lib/ceph/osd/ceph-<OSD ID>以下のファイルでロック 9 HDD OSD ceph-osd
A ceph-osd B ロック ceph-osd Aにロックを取られているのでアクセス不可
OSDのdeployment 10 … containers: … command: - ceph-osd volumeMounts: -
mountPath: /var/lib/ceph/osd/ceph-0 name: set1-data-0-xfvdg-bridge subPath: ceph-0 …
OSDのdeployment 11 … containers: … command: - ceph-osd volumeMounts: -
mountPath: /var/lib/ceph/osd/ceph-0 name: set1-data-0-xfvdg-bridge subPath: ceph-0 … volumes: … - emptyDir: medium: Memory name: set1-data-0-xfvdg-bridge … コンテナごとに別々の ロックファイルを作るよ!
OSDのdeployment 12 … containers: … command: - ceph-osd volumeMounts: -
mountPath: /var/lib/ceph/osd/ceph-0 name: set1-data-0-xfvdg-bridge subPath: ceph-0 … volumes: … - emptyDir: medium: Memory name: set1-data-0-xfvdg-bridge … もしOSD Podが二重起動すると OSDがブッ壊れるよ!
問題が発生するシナリオの例 1. OSD Pod AがOSDを操作 13 OSD Pod A HDD
OSD ceph-osd ロック A
問題が発生するシナリオの例 1. OSD Pod AがOSDを操作 2. OSD Pod Aがeviction対象になり”Terminating”に。Ceph-osdはまだ動作中 14
OSD Pod A HDD OSD ceph-osd ロック A Terminating
問題が発生するシナリオの例 1. OSD Pod AがOSDを操作 2. OSD Pod Aがeviction対象になり”Terminating”に。Ceph-osdはまだ動作中 3.
新しいOSD Pod Bが同じノードにスケジュールされる 15 OSD Pod A HDD OSD ceph-osd ロック A OSD Pod B ceph-osd Terminating
問題が発生するシナリオの例 1. OSD Pod AがOSDを操作 2. OSD Pod Aがeviction対象になり”Terminating”に。Ceph-osdはまだ動作中 3.
新しいOSD Pod Bが同じノードにスケジュールされる 4. 2つのceph-osdが同じOSDを操作、OSDが壊れる ⚫ それぞれ別ファイルをロックしているので排他制御は機能しない 16 OSD Pod A HDD OSD ceph-osd ロック A OSD Pod B ceph-osd Terminating ロック B
検出経緯 1. OSD Podが存在するノードが慢性的なメモリ不足になっていた 17 node プロセス プロセス プロセス HDD
OSD Ceph-osd メモリが足りませんよ
検出経緯 1. OSD Podが存在するノードが慢性的なメモリ不足になっていた 2. 偶然前述の問題の再現試験のような状況になった ⚫ OOM killerによるプロセスの殺戮 ⚫
Kubeletによるプロセスの再生成 ⚫ メモリ不足によるPod eviction 18 node プロセス OOM Killer なかなかメモリが空かないなあ 殺戮 プロセス プロセス Podをスケジュールしなきゃ & 追い出さなきゃ 再生成 kubelet HDD OSD Ceph-osd
検出経緯 1. OSD Podが存在するノードが慢性的なメモリ不足になっていた 2. 偶然前述の問題の再現試験のような状況になった ⚫ OOM killerによるプロセスの殺戮 ⚫
Kubeletによるプロセスの再生成 ⚫ メモリ不足によるPod eviction 3. OSD Podが二重起動。死 19 node プロセス OOM Killer なかなかメモリが空かないなあ 殺戮 プロセス プロセス 再生成 kubelet HDD OSD Ceph-osd Ceph-osd Podをスケジュールしなきゃ & 追い出さなきゃ
検出してから現在までの流れ 1. CephコミュニティとRookコミュニティに報告 ⚫https://tracker.ceph.com/issues/48036 ⚫https://github.com/rook/rook/issues/6530 2. OSDのログから複数ceph-osdの動作を検出 3. Rookで問題が起きうることを確認 4.
現在はRookの修正検討中 20
まとめ ▌StatefulワークロードにはなるべくStatefulSetを使う ▌アプリのコンテナ化ではロックファイルの共有忘れに注意 ⚫ステートレスワークロードでも起こりうる ▌Rookの問題は今後修正予定 ▌OOM killerは優秀なデバッグツール 21