vethA
eth0
vethB
© 2015 Internet Initiative Japan Inc. 35
通常の Docker のネットワーク
ホストをまたいだコンテナ間通信は困難
(
ポートが固定されていればEXPOSE
でできるがHadoop
と相性が悪い)
IPマスカレード
コンテナA コンテナB
ホスト1
docker0
NIC eth0
vethA
eth0 vethB
IPマスカレード
コンテナC コンテナD
ホスト2
docker0
NIC eth0
vethA
eth0
vethB
© 2015 Internet Initiative Japan Inc. 36
解決策
•
例– pipework – weave
– flannel
– libnetwork overlay driver – ...
•
または独自に頑張るこちらを採用
© 2015 Internet Initiative Japan Inc. 37
本サービスのネットワーク
• docker
のネットワーク設定は使用せ ず– ("NetworkDisabled": true)
•
代わりにslave
がコンテナ起動時に ネットワーク設定をする© 2015 Internet Initiative Japan Inc. 38
本サービスのネットワーク
IP
マスカレード 通常のdocker
のネットワーク
container network
namespace
本サービスの ネットワーク
host network
namespace
ホストIPマスカレード
コンテナA コンテナB
ホスト
docker0
NIC eth0
vethA
eth0 vethB
IP
マスカレード ホストコンテナA コンテナB
NIC eth0 vethA
eth0 vethB
host-veth
ホスト
host-geth
bridge0
© 2015 Internet Initiative Japan Inc. 39
論理的にはこんな感じ
eth0
コンテナA
eth0
コンテナB
host-geth
ホスト1
eth0
コンテナC
eth0
コンテナD
host-geth
ホスト2
•
コンテナはホストと同じネットワークに直接つながる•
コンテナのIP
アドレスはmaster
が決定しslave
が設定する© 2015 Internet Initiative Japan Inc. 40
ネットワークの隔離
•
クラスタ間はiptables
で隔離–
コンテナはCAP_NET_RAW
を禁止その他
© 2015 Internet Initiative Japan Inc. 42
Docker イメージ
• Docker HUB
のイメージは使用せず–
同じrepository
名:tag
名でも内容が変 わっていることがある– (docker 1.6
〜はContent Addressable Image Identifiers
により一意に指定可)
•
独自にOS
イメージ作成– febootstrap
でCentOS 6
ベースで作成•
そのOS
イメージからJDK, Hive,
Hadoop
入りなどをDockerfile
で生成© 2015 Internet Initiative Japan Inc. 43
ログの管理
•
コンテナ内の各種ログは、コンテナ 内の特定ディレクトリに一時保存•
ホスト上(
コンテナ外)
のfluentd
で外に 飛ばす•
本サービスのストレージ部分(
管理用)
に保存(
今ならDocker
のlog driver
を使えば良いと思う)
© 2015 Internet Initiative Japan Inc. 44
監視
•
ホストが障害を起こしたらdoma
はコ ンテナ割り当て対象から除外–
障害コンテナを別ホストに自動移動し たり再起動はしない•
コンテナのアプリケーションレイヤ の監視はanalysis API
が行っている© 2015 Internet Initiative Japan Inc. 45
コンテナのモニタリング
• slave
に、コンテナ単位のメトリクス を返す機能追加• cgroup
の統計情報と、コンテナ内の/proc/net/dev
等からメトリクスを得 る(
今ならcAdvisor
を使えば良いと思う)
46
↓
CPU Accounting
Memory
→↓
Network traffic
コンテナのモニタリング
• CentOS 6
を使用中–
だがDocker 1.8
以降、CentOS 6
は対象 外– Red Hat
は、Docker
をRHEL 6
で動かす ことを推奨していない•
コンテナ用OS
– CoreOS, Project Atomic, Snappy, RancherOS
© 2015 Internet Initiative Japan Inc. 47
ホスト OS について
© 2015 Internet Initiative Japan Inc. 48
まとめ
• Hadoop/Hive
をマルチテナントで動か すためにDocker
を採用• Docker
は多数のコンテナを扱うには 課題がある–
解決のためいくつかのツール類を開発–
今ならもっと楽な別のやり方があるはず