Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
© 2015 Internet Initiative Japan Inc.	
Docker の利用事例紹介
~ 商用サービスの基盤として利用 ~
maebashi @ IIJ
© 2015 Internet Initiative Japan Inc.	
 2
本日の話
「IIJ GIOストレージ&アナリシスサー
ビス」という商用サービスでDocker
を使ってみた
© 2015 Internet Initiative Japan Inc.	
サービス概要
© 2015 Internet Initiative Japan Inc.	
 4
IIJ GIOストレージ&アナリシスサービス
•  http://www.iij.ad.jp/biz/storage/
•  REST API(AWS S3互換)を持つクラ
ウドストレージサービス
•  Hadoop/Hiveを用いたデータ解析機能
(オプション)
+
© 2015 Internet Initiative Japan Inc.	
 5
サービス全体図
storage
API
ストレージ
ノード	
analysis
API
ユーザー
data	
query	
IIJ GIO ストレージ&アナリシスサービス
計算
ノード	
container	
data	
data	
data
© 2015 Internet Initiative Japan Inc.	
 6
計算ノード
•  Hiveを使用
– 複数ノードで分散処理
•  マルチテナント
– 複数物理ホストを複数ユーザで共有
© 2015 Internet Initiative Japan Inc.	
 7
計算ノード(図)
analysis
API
query	
Hive
NN
RM
DN
NM
metastore	
task
storage
API
DN
NM
task
ユーザ毎に用意
NN: Name Node
RM: Resouce Manager
DN: Data Node
NM: Node Manager
ノード
ノード
ノード
© 2015 Internet Initiative Japan Inc.	
 8
計算ノード部分 要件
•  ユーザ毎に実行環境が隔離されてい
ること
•  公平なリソースの共有
•  ノードはユーザにより増減可能なこ
と
© 2015 Internet Initiative Japan Inc.	
 9
サービス検討時の候補
•  Hypervisor型仮想マシンによる隔離
– 隔離という面では一番確実
– 起動が遅い、オーバーヘッドがある
•  コンテナによる隔離
•  アプリケーションレベルでの隔離
– Hiveだけ(UDF禁止)等、やれることを限
定すれば可能
© 2015 Internet Initiative Japan Inc.	
 10
仮想マシン vs コンテナ
Server	
Host OS	
Hypervisor	
Guest OS
Bins/Libs
App A
Guest OS
Bins/Libs
App B
Server	
Host OS	
Docker Engine	
Bins/Libs
App A
Bins/Libs
App B
Hypervisor型仮想マシン Dockerコンテナ
Dockerコンテナは、隔離
された単なるプロセス	
ゲスト毎に任意のOS使用可
高い隔離性
オーバヘッドが少ない
起動が速い
こちらを採用
© 2015 Internet Initiative Japan Inc.	
 11
実際のサービスの制限
•  現時点では、ユーザが任意の
MapReduceプログラムを動かすこと
はできない
– 使えるのはHiveQLのみ
•  Dockerによる隔離は将来への布石
© 2015 Internet Initiative Japan Inc.	
Dockerを商用サービスの基盤に
使うにあたって
© 2015 Internet Initiative Japan Inc.	
 13
Dockerが向いていること
•  単体のホスト上での開発・ビルド・
テスト環境
•  環境のパッケージングと配布
© 2015 Internet Initiative Japan Inc.	
 14
Dockerの課題
•  複数ホスト上の多数のコンテナの管
理(オーケストレーション)
•  複数ホストをまたいだネットワーク
•  ログの管理
•  監視、モニタリング
© 2015 Internet Initiative Japan Inc.	
コンテナの管理
© 2015 Internet Initiative Japan Inc.	
 16
doma(docker manager)とは?
•  独自開発
•  多数のDockerコンテナを管理する
– 複数ホストをリソースプールとする
– analysis APIからの要求によりプールか
ら必要数のコンテナを自動確保し起動
•  類似品
– Mesos, Kubernetes, fleet, Swarm, ...
© 2015 Internet Initiative Japan Inc.	
 17
doma 構成図
Docker daemon	
Container	
slave	
構成情報DB
(MySQL MHA)	
master	
request / response	
Docker
Remote API	
master
API	
docker
ホスト群
使用可能ホスト
リソース空き情報
IPアドレス空き情報
etc
LB(nginx)	
HTTP	
slave
API	
HTTP	
HTTP
over
Unix domain
socket	
analysis
API
© 2015 Internet Initiative Japan Inc.	
 18
master
•  多数のコンテナをクラスタ単位で管
理
– クラスタ = コンテナの集合
•  クラスタ操作
– 予約、アップデート、起動、停止、再
起動、解放(削除)
•  Ruby + Rack + EventMachine
© 2015 Internet Initiative Japan Inc.	
 19
クラスタ
•  互いに通信できるコンテナの集合
– 1つのクラスタは1つのユーザに属する
– 別のクラスタとは通信できない
Docker Daemon Docker Daemon Docker Daemon
空き
Container
Container
Container
Container
Container
Container
Container
Container
クラスタ1	
クラスタ2	
クラスタ3	
Host
© 2015 Internet Initiative Japan Inc.	
 20
コンテナの種類
•  グレード
– 性能を決める(CPUコア数、メモリ量)
•  タイプ
– dockerイメージ名に対応
– アプリケーション毎に複数用意されて
いる
© 2015 Internet Initiative Japan Inc.	
 21
masterが管理するもの
•  ホスト
– dockerが動く物理ホスト
– CPU、メモリ割当て状況
•  IPアドレス
– コンテナは1個ずつ(プライベート)IPア
ドレスを持つ
© 2015 Internet Initiative Japan Inc.	
 22
slave
•  Docker daemonのwrapper (reverse
proxy)
– masterからは、ほぼDocker daemonに
見える
– いくつかAPIを拡張
•  Goで記述
Docker daemon	
slave	
Docker
Remote API	
HTTP	
 HTTP
over
Unix domain
socket	
master
© 2015 Internet Initiative Japan Inc.	
 23
Docker Remote API
•  HTTP、REST、JSONベース
•  dockerコマンドはすべてこのAPIを経
由している
Host	
Docker daemon	
docker pull
docker run
docker ...	
container	
container	
container	
Docker client	
HTTP over
Unix domain socket
または
TCP	
Docker
Remote API
© 2015 Internet Initiative Japan Inc.	
 24
slave追加機能
•  コンテナ起動関連
– サイズ制限されたディスク領域提供
– ネットワーク設定
– iptablesチェイン設定
•  コンテナのメトリクス取得
•  コンテナ内にファイルを送り込む
•  コンテナ非同期削除
© 2015 Internet Initiative Japan Inc.	
コンテナのリソース制限
© 2015 Internet Initiative Japan Inc.	
 26
リソース制限概略
•  主にcgroupを使う
•  CPU
– cpuset
•  メモリ
– memory
•  ディスク使用量
– cgroupではできない
© 2015 Internet Initiative Japan Inc.	
 27
CPU制限
•  (Docker Remote API経由で)cgroupの
cpuset.cpusを使う
– コンテナのプロセスが実行されるCPU
コアの番号を指定
– 例: "CpusetCpus":"0-2,7"
•  各コンテナおよびシステムプロセス
それぞれが使うCPUコアを分離
© 2015 Internet Initiative Japan Inc.	
 28
ディスク使用量制限
•  特定サイズのloopbackデバイス用
ファイルを作って、それをmount
– あらかじめmkfs済sparseイメージ入り
tarファイルを用意
– コンテナ起動時にそれを展開して
mount(0.1∼0.2秒くらい)
– コンテナ解放時はファイルを1個削除す
るだけ
© 2015 Internet Initiative Japan Inc.	
ネットワーク
© 2015 Internet Initiative Japan Inc.	
 30
通常のDockerのネットワーク
docker0	
NIC	
IPマスカレード	
仮想ネットワーク
インターフェース
(veth)
container
network
namespace	
eth0	
vethA	
コンテナA	
eth0	
vethB	
コンテナB	
host
network
namespace	
ホスト	
仮想ブリッジ
© 2015 Internet Initiative Japan Inc.	
 31
通常のDockerのネットワーク
docker0	
NIC	
IPマスカレード	
eth0	
vethA	
コンテナA	
eth0	
vethB	
コンテナB	
ホスト1	
docker0	
NIC	
IPマスカレード	
eth0	
vethC	
コンテナC	
eth0	
vethD	
コンテナD	
ホスト2	
ホストをまたいだコンテナ間通信は困難
(ポートが固定されていればEXPOSEでできるが
Hadoopと相性が悪い)
© 2015 Internet Initiative Japan Inc.	
 32
解決策
•  pipework, weave, flannel 等を使う
•  または独自に頑張る こちらを採用
© 2015 Internet Initiative Japan Inc.	
 33
本サービスのネットワーク
•  dockerのネットワーク設定は使用せ
ず("NetworkDisabled": true)
•  代わりにslaveがコンテナ起動時に
ネットワーク設定をする
© 2015 Internet Initiative Japan Inc.	
 34
NIC	
本サービスのネットワーク
docker0	
NIC	
IPマスカレード	
eth0	
vethA	
bridge0	
host-geth	
host-veth	
ホスト	
通常のdockerの
ネットワーク
container
network
namespace	
コンテナA	
eth0	
vethB	
コンテナB	
eth0	
vethA	
コンテナA	
eth0	
vethB	
コンテナB	
本サービスの
ネットワーク
host
network
namespace	
ホスト
© 2015 Internet Initiative Japan Inc.	
 35
論理的にはこんな感じ
eth0	
コンテナA	
eth0	
コンテナB	
host-geth	
ホスト1	
eth0	
コンテナC	
eth0	
コンテナD	
host-geth	
ホスト2	
(コンテナのIPアドレスはmasterが決定しslaveが設定する)
© 2015 Internet Initiative Japan Inc.	
 36
ネットワークの隔離
•  クラスタ間はiptablesで隔離
– コンテナはCAP_NET_RAWを禁止
© 2015 Internet Initiative Japan Inc.	
その他
© 2015 Internet Initiative Japan Inc.	
 38
Dockerイメージ
•  Docker HUBのイメージは使用せず
– 同じrepository名:tag名でも内容が変
わっていることがある
•  独自にOSイメージ作成
– febootstrap で CentOS 6ベースで作成
•  そのOSイメージからJDK, Hive,
Hadoop入りなどをDockerfileで生成
© 2015 Internet Initiative Japan Inc.	
 39
ログの管理
•  コンテナ内の各種ログは、コンテナ
内の特定ディレクトリに一時保存
•  ホスト上(コンテナ外)のfluentdで外に
飛ばす
•  本サービスのストレージ部分(管理用)
に保存
© 2015 Internet Initiative Japan Inc.	
 40
監視
•  ホストが障害を起こしたらdomaはコ
ンテナ割り当て対象から除外
– 障害コンテナを別ホストに自動移動し
たり再起動はしない
•  コンテナのアプリケーションレイヤ
の監視はanalysis APIが行っている
© 2015 Internet Initiative Japan Inc.	
 41
コンテナのモニタリング
•  slaveに、コンテナ単位のメトリクス
を返す機能追加
•  cgroupの統計情報と、コンテナ内の /
proc/net/dev等からメトリクスを得る
(今なら cAdvisor を使えば良いと思う)
© 2015 Internet Initiative Japan Inc.	
 42
slaveはメトリクスをJSON形式で返す
"memory": {
"failcnt": 0,
"stats": {
"unevictable": 0,
"total_unevictable": 0,
"total_swap": 0,
"total_rss": 380928,
"total_pgpgout": 681084,
"total_pgpgin": 697086,
"total_mapped_file": 1433600,
"total_inactive_file": 38936576,
"mapped_file": 1433600,
"inactive_file": 38936576,
"inactive_anon": 0,
"hierarchical_memsw_limit":
9223372036854776000,
"hierarchical_memory_limit":
9223372036854776000,
"cache": 102838272,
"active_file": 63901696,
"active_anon": 380928,
"pgpgin": 697086,
"pgpgout": 681084,
"rss": 380928,
"swap": 0,
"total_active_anon": 380928,
"total_active_file": 63901696,
"total_cache": 102838272,
"total_inactive_anon": 0
},
"max_usage": 139268096,
"usage": 104189952
},
"interfaces": {
"outpackets.0": 3021223,
"inbytes.0": 8228044607,
"indrop.0": 0,
"inerrs.0": 0,
"inpackets.0": 6429687,
"name.0": "eth0",
"outbytes.0": 199687042,
"outdrop.0": 0,
"outerrs.0": 0
},
"cpuacct": {
"throlling_data": {},
"cpu_usage": {
"usage_in_usermode": 2.668e+10,
"usage_in_kernelmode": 8.181e+10,
"percpu_usage": [
22599918565,
987624379,
65146098,
36705600,
18221767943,
5890326,
22768005795,
4033968,
218211598,
4302652,
5437296326,
23781278563,
18992360915,
18712487134,
55742891,
18522722054
]
}
}
© 2015 Internet Initiative Japan Inc.	
 43
↓CPU Accounting
	
Memory→	
↓Network traffic	
定期的にメトリクスを収集して
Grafanaでグラフ化
© 2015 Internet Initiative Japan Inc.	
 44
まとめ
•  Hadoop/Hiveをマルチテナントで動か
すためにDockerを採用
•  Dockerは多数のコンテナを扱うには
課題がある
– 解決のためいくつかのツール類を開発
– 今ならもっと楽な方法があるはず

More Related Content

Dockerの利用事例

  • 1. © 2015 Internet Initiative Japan Inc. Docker の利用事例紹介 ~ 商用サービスの基盤として利用 ~ maebashi @ IIJ
  • 2. © 2015 Internet Initiative Japan Inc. 2 本日の話 「IIJ GIOストレージ&アナリシスサー ビス」という商用サービスでDocker を使ってみた
  • 3. © 2015 Internet Initiative Japan Inc. サービス概要
  • 4. © 2015 Internet Initiative Japan Inc. 4 IIJ GIOストレージ&アナリシスサービス •  http://www.iij.ad.jp/biz/storage/ •  REST API(AWS S3互換)を持つクラ ウドストレージサービス •  Hadoop/Hiveを用いたデータ解析機能 (オプション) +
  • 5. © 2015 Internet Initiative Japan Inc. 5 サービス全体図 storage API ストレージ ノード analysis API ユーザー data query IIJ GIO ストレージ&アナリシスサービス 計算 ノード container data data data
  • 6. © 2015 Internet Initiative Japan Inc. 6 計算ノード •  Hiveを使用 – 複数ノードで分散処理 •  マルチテナント – 複数物理ホストを複数ユーザで共有
  • 7. © 2015 Internet Initiative Japan Inc. 7 計算ノード(図) analysis API query Hive NN RM DN NM metastore task storage API DN NM task ユーザ毎に用意 NN: Name Node RM: Resouce Manager DN: Data Node NM: Node Manager ノード ノード ノード
  • 8. © 2015 Internet Initiative Japan Inc. 8 計算ノード部分 要件 •  ユーザ毎に実行環境が隔離されてい ること •  公平なリソースの共有 •  ノードはユーザにより増減可能なこ と
  • 9. © 2015 Internet Initiative Japan Inc. 9 サービス検討時の候補 •  Hypervisor型仮想マシンによる隔離 – 隔離という面では一番確実 – 起動が遅い、オーバーヘッドがある •  コンテナによる隔離 •  アプリケーションレベルでの隔離 – Hiveだけ(UDF禁止)等、やれることを限 定すれば可能
  • 10. © 2015 Internet Initiative Japan Inc. 10 仮想マシン vs コンテナ Server Host OS Hypervisor Guest OS Bins/Libs App A Guest OS Bins/Libs App B Server Host OS Docker Engine Bins/Libs App A Bins/Libs App B Hypervisor型仮想マシン Dockerコンテナ Dockerコンテナは、隔離 された単なるプロセス ゲスト毎に任意のOS使用可 高い隔離性 オーバヘッドが少ない 起動が速い こちらを採用
  • 11. © 2015 Internet Initiative Japan Inc. 11 実際のサービスの制限 •  現時点では、ユーザが任意の MapReduceプログラムを動かすこと はできない – 使えるのはHiveQLのみ •  Dockerによる隔離は将来への布石
  • 12. © 2015 Internet Initiative Japan Inc. Dockerを商用サービスの基盤に 使うにあたって
  • 13. © 2015 Internet Initiative Japan Inc. 13 Dockerが向いていること •  単体のホスト上での開発・ビルド・ テスト環境 •  環境のパッケージングと配布
  • 14. © 2015 Internet Initiative Japan Inc. 14 Dockerの課題 •  複数ホスト上の多数のコンテナの管 理(オーケストレーション) •  複数ホストをまたいだネットワーク •  ログの管理 •  監視、モニタリング
  • 15. © 2015 Internet Initiative Japan Inc. コンテナの管理
  • 16. © 2015 Internet Initiative Japan Inc. 16 doma(docker manager)とは? •  独自開発 •  多数のDockerコンテナを管理する – 複数ホストをリソースプールとする – analysis APIからの要求によりプールか ら必要数のコンテナを自動確保し起動 •  類似品 – Mesos, Kubernetes, fleet, Swarm, ...
  • 17. © 2015 Internet Initiative Japan Inc. 17 doma 構成図 Docker daemon Container slave 構成情報DB (MySQL MHA) master request / response Docker Remote API master API docker ホスト群 使用可能ホスト リソース空き情報 IPアドレス空き情報 etc LB(nginx) HTTP slave API HTTP HTTP over Unix domain socket analysis API
  • 18. © 2015 Internet Initiative Japan Inc. 18 master •  多数のコンテナをクラスタ単位で管 理 – クラスタ = コンテナの集合 •  クラスタ操作 – 予約、アップデート、起動、停止、再 起動、解放(削除) •  Ruby + Rack + EventMachine
  • 19. © 2015 Internet Initiative Japan Inc. 19 クラスタ •  互いに通信できるコンテナの集合 – 1つのクラスタは1つのユーザに属する – 別のクラスタとは通信できない Docker Daemon Docker Daemon Docker Daemon 空き Container Container Container Container Container Container Container Container クラスタ1 クラスタ2 クラスタ3 Host
  • 20. © 2015 Internet Initiative Japan Inc. 20 コンテナの種類 •  グレード – 性能を決める(CPUコア数、メモリ量) •  タイプ – dockerイメージ名に対応 – アプリケーション毎に複数用意されて いる
  • 21. © 2015 Internet Initiative Japan Inc. 21 masterが管理するもの •  ホスト – dockerが動く物理ホスト – CPU、メモリ割当て状況 •  IPアドレス – コンテナは1個ずつ(プライベート)IPア ドレスを持つ
  • 22. © 2015 Internet Initiative Japan Inc. 22 slave •  Docker daemonのwrapper (reverse proxy) – masterからは、ほぼDocker daemonに 見える – いくつかAPIを拡張 •  Goで記述 Docker daemon slave Docker Remote API HTTP HTTP over Unix domain socket master
  • 23. © 2015 Internet Initiative Japan Inc. 23 Docker Remote API •  HTTP、REST、JSONベース •  dockerコマンドはすべてこのAPIを経 由している Host Docker daemon docker pull docker run docker ... container container container Docker client HTTP over Unix domain socket または TCP Docker Remote API
  • 24. © 2015 Internet Initiative Japan Inc. 24 slave追加機能 •  コンテナ起動関連 – サイズ制限されたディスク領域提供 – ネットワーク設定 – iptablesチェイン設定 •  コンテナのメトリクス取得 •  コンテナ内にファイルを送り込む •  コンテナ非同期削除
  • 25. © 2015 Internet Initiative Japan Inc. コンテナのリソース制限
  • 26. © 2015 Internet Initiative Japan Inc. 26 リソース制限概略 •  主にcgroupを使う •  CPU – cpuset •  メモリ – memory •  ディスク使用量 – cgroupではできない
  • 27. © 2015 Internet Initiative Japan Inc. 27 CPU制限 •  (Docker Remote API経由で)cgroupの cpuset.cpusを使う – コンテナのプロセスが実行されるCPU コアの番号を指定 – 例: "CpusetCpus":"0-2,7" •  各コンテナおよびシステムプロセス それぞれが使うCPUコアを分離
  • 28. © 2015 Internet Initiative Japan Inc. 28 ディスク使用量制限 •  特定サイズのloopbackデバイス用 ファイルを作って、それをmount – あらかじめmkfs済sparseイメージ入り tarファイルを用意 – コンテナ起動時にそれを展開して mount(0.1∼0.2秒くらい) – コンテナ解放時はファイルを1個削除す るだけ
  • 29. © 2015 Internet Initiative Japan Inc. ネットワーク
  • 30. © 2015 Internet Initiative Japan Inc. 30 通常のDockerのネットワーク docker0 NIC IPマスカレード 仮想ネットワーク インターフェース (veth) container network namespace eth0 vethA コンテナA eth0 vethB コンテナB host network namespace ホスト 仮想ブリッジ
  • 31. © 2015 Internet Initiative Japan Inc. 31 通常のDockerのネットワーク docker0 NIC IPマスカレード eth0 vethA コンテナA eth0 vethB コンテナB ホスト1 docker0 NIC IPマスカレード eth0 vethC コンテナC eth0 vethD コンテナD ホスト2 ホストをまたいだコンテナ間通信は困難 (ポートが固定されていればEXPOSEでできるが Hadoopと相性が悪い)
  • 32. © 2015 Internet Initiative Japan Inc. 32 解決策 •  pipework, weave, flannel 等を使う •  または独自に頑張る こちらを採用
  • 33. © 2015 Internet Initiative Japan Inc. 33 本サービスのネットワーク •  dockerのネットワーク設定は使用せ ず("NetworkDisabled": true) •  代わりにslaveがコンテナ起動時に ネットワーク設定をする
  • 34. © 2015 Internet Initiative Japan Inc. 34 NIC 本サービスのネットワーク docker0 NIC IPマスカレード eth0 vethA bridge0 host-geth host-veth ホスト 通常のdockerの ネットワーク container network namespace コンテナA eth0 vethB コンテナB eth0 vethA コンテナA eth0 vethB コンテナB 本サービスの ネットワーク host network namespace ホスト
  • 35. © 2015 Internet Initiative Japan Inc. 35 論理的にはこんな感じ eth0 コンテナA eth0 コンテナB host-geth ホスト1 eth0 コンテナC eth0 コンテナD host-geth ホスト2 (コンテナのIPアドレスはmasterが決定しslaveが設定する)
  • 36. © 2015 Internet Initiative Japan Inc. 36 ネットワークの隔離 •  クラスタ間はiptablesで隔離 – コンテナはCAP_NET_RAWを禁止
  • 37. © 2015 Internet Initiative Japan Inc. その他
  • 38. © 2015 Internet Initiative Japan Inc. 38 Dockerイメージ •  Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある •  独自にOSイメージ作成 – febootstrap で CentOS 6ベースで作成 •  そのOSイメージからJDK, Hive, Hadoop入りなどをDockerfileで生成
  • 39. © 2015 Internet Initiative Japan Inc. 39 ログの管理 •  コンテナ内の各種ログは、コンテナ 内の特定ディレクトリに一時保存 •  ホスト上(コンテナ外)のfluentdで外に 飛ばす •  本サービスのストレージ部分(管理用) に保存
  • 40. © 2015 Internet Initiative Japan Inc. 40 監視 •  ホストが障害を起こしたらdomaはコ ンテナ割り当て対象から除外 – 障害コンテナを別ホストに自動移動し たり再起動はしない •  コンテナのアプリケーションレイヤ の監視はanalysis APIが行っている
  • 41. © 2015 Internet Initiative Japan Inc. 41 コンテナのモニタリング •  slaveに、コンテナ単位のメトリクス を返す機能追加 •  cgroupの統計情報と、コンテナ内の / proc/net/dev等からメトリクスを得る (今なら cAdvisor を使えば良いと思う)
  • 42. © 2015 Internet Initiative Japan Inc. 42 slaveはメトリクスをJSON形式で返す "memory": { "failcnt": 0, "stats": { "unevictable": 0, "total_unevictable": 0, "total_swap": 0, "total_rss": 380928, "total_pgpgout": 681084, "total_pgpgin": 697086, "total_mapped_file": 1433600, "total_inactive_file": 38936576, "mapped_file": 1433600, "inactive_file": 38936576, "inactive_anon": 0, "hierarchical_memsw_limit": 9223372036854776000, "hierarchical_memory_limit": 9223372036854776000, "cache": 102838272, "active_file": 63901696, "active_anon": 380928, "pgpgin": 697086, "pgpgout": 681084, "rss": 380928, "swap": 0, "total_active_anon": 380928, "total_active_file": 63901696, "total_cache": 102838272, "total_inactive_anon": 0 }, "max_usage": 139268096, "usage": 104189952 }, "interfaces": { "outpackets.0": 3021223, "inbytes.0": 8228044607, "indrop.0": 0, "inerrs.0": 0, "inpackets.0": 6429687, "name.0": "eth0", "outbytes.0": 199687042, "outdrop.0": 0, "outerrs.0": 0 }, "cpuacct": { "throlling_data": {}, "cpu_usage": { "usage_in_usermode": 2.668e+10, "usage_in_kernelmode": 8.181e+10, "percpu_usage": [ 22599918565, 987624379, 65146098, 36705600, 18221767943, 5890326, 22768005795, 4033968, 218211598, 4302652, 5437296326, 23781278563, 18992360915, 18712487134, 55742891, 18522722054 ] } }
  • 43. © 2015 Internet Initiative Japan Inc. 43 ↓CPU Accounting Memory→ ↓Network traffic 定期的にメトリクスを収集して Grafanaでグラフ化
  • 44. © 2015 Internet Initiative Japan Inc. 44 まとめ •  Hadoop/Hiveをマルチテナントで動か すためにDockerを採用 •  Dockerは多数のコンテナを扱うには 課題がある – 解決のためいくつかのツール類を開発 – 今ならもっと楽な方法があるはず