More Related Content
Similar to 毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話 (20)
More from Koichiro Sumi (20)
毎日2000個のコンテナをstartする鯖が突然死して僕が驚愕した話
- 2. © 2015 Actcat, Inc.
@sumyapp
n Koichiro Sumi
n コードレビューの
ためのCIサービス、
SideCI を運営
n 1歳の息子
カワ(・ ・)イイ!!
2
- 3. © 2015 Actcat, Inc.
DockerのSideCIでの使い方
n ユーザからのGitHub Push(pull_request)毎に
解析ツールの数分のコンテナを起動
n 起動したコンテナ内でコードをclone, 解析
n 解析結果をSideCIの画面とGitHubに送信
3
- 4. © 2015 Actcat, Inc.
これが1日数百件 * 解析種毎で計2000回弱
n GitHub
⇒ SideCI API
⇒ SideCI DockerHost
⇒ Docker Container
⇒ git clone; analyze…; send;
4
- 5. © 2015 Actcat, Inc.
アジェンダ:
鯖突然死で驚愕パターン
n 「さぁ帰ろうっと」と思った頃に飛んで来
る「No disk space left」
l やばい!
n たまにやってくる「Docker disk out of
space」
n 突然のカーネルパニックが数十分おきに
サーバ各台に発生して冗長化とか無駄状態
5
- 7. © 2015 Actcat, Inc.
「さぁ帰ろうっと」と思った頃に飛んで来
る「No disk space left」
n アプリケーションで`docker start`と`docker
kill; dockr rm;`かをたくさんしている
n アプリケーションにバグ(rmされないパ
ターン)があったのでそれが累積して、
ディスクがゼロに
n バグ直したらほぼ軽減した
7
- 8. © 2015 Actcat, Inc.
定期クリーンアップも追加
n 稀に処理中にアプリケーションプロセス
が落ちたりするとやっぱコンテナ残る
n 数時間以上起動しっぱなしのコンテナと
かは全部定期的にcronで吹っ飛ばすことに
した
n docker psをgrepしてxargsしてrmする感じ
8
- 10. © 2015 Actcat, Inc.
たまにやってくる
「Docker disk out of space」
n Devicemapper使ってたらたまに起こった
ディスクの空き容量自体はあった(気がする)
l コンテナ残ってるとかじゃない
l ローカルじゃほぼ再現しない。
毎日コンテナ立てまくり消しまくりで起きる
n `docker rm; docker rmi;`じゃ直らない。
`/mnt/docker/devicemapper`を全削除で直る
n わりとすぐ再発するのでaufsに変更。起きなく
なった
l でもaufsって古くない?誰か教えて!(ΦωΦ)
10
- 12. © 2015 Actcat, Inc.
突然のカーネルパニックが数十分おきに
サーバ各台に発生して冗長化とか無駄状態
n IVS CTO Night&Day っていう宮崎県のシー
ガイアっていうところのイベントに3日間
参加中に起きた
n Au電波なくて(3G1本)、会場のwifi死んでて、
という状態でサーバが次々にカーネルパ
ニック
n => サービスダウン
12
- 13. © 2015 Actcat, Inc.
とりあえずしたこと
n 携帯でGoogle Compute EngineのConsoleか
ら死んだやつをリブートを定期的に
n その間にパネルディスカッションとか聞き
ながらデバッグ
n マジ無理
13
- 14. © 2015 Actcat, Inc.
デバッグでしたこと
n 発生ケースを特定
l CPUのロードアベレージが8になった瞬間当
たりでカーネルパニックする(8コア)
l ロードアベレージが1とか2とかだとまった
く起きない
l (なのでデプロイ前気づかなかった…)
n 一旦1台当たりの処理量を制限してロードア
ベレージが8までいかないように変更…
n でも瞬発的にいくことはあるので
必死デバッグ
14
- 15. © 2015 Actcat, Inc.
発生原因と対策
n Docker HostをAWSからGCPに移行した時に発
生した。AWSのホストの時は問題なく動いて
いた。(GCPをめっちゃ疑った)。
n ソフトウェアレベルの差異はなし。Dockerの
バージョンやファイルシステム(aufs)とかも差
異なし
n あらゆる差異を探した結果、Linux Kernelの
バージョンが新ホストの方が新しかった
15
- 16. © 2015 Actcat, Inc.
Kernel Versionがちょっと新しい!
AWS host
Storage Driver: aufs
Root Dir: /mnt/docker/aufs
Backing Filesystem: extfs
Execution Driver: native-0.2
Kernel Version: 3.13.0-48-
generic
Operating System: Ubuntu
14.04.2 LTS
Docker version 1.6.2, build
7c8fca2
GCP Host
Storage Driver: aufs
Root Dir: /mnt/docker/aufs
Backing Filesystem: extfs
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-38-
generic
Operating System: Ubuntu
14.04.2 LTS
Docker version 1.6.2, build
7c8fca2
16
- 17. © 2015 Actcat, Inc.
対策
n Kennelを3.16から3.13にダウングレード
n カーネルパニック起きなくなった!
全てノーマルな状態に
n 以降怖くてカーネルのアップデート出来な
い…(誰かおしえて…
17
- 19. © 2015 Actcat, Inc.
まとめというか僕の内心
n Docker触るの怖い
n 少しでもupdateしたら動かなくなるんじゃ
ないか…
l そしてそれは長期負荷試験やらないかぎ
り事前検知出来ないんじゃないか…
n みんなどうしてるの?(ΦωΦ)
もうぼくdocker.freezeしておきたいです…
19