49
1 [email protected] Dockerͷ༻αʔϏεͰͷར༻հ גձΠϯλʔωοτΠχγΞςΟϒ

Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

1

[email protected]

Dockerの商用サービスでの利用事例紹介

株式会社インターネットイニシアティブ

Page 2: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 2

本日の話

前置き サービス概要  Dockerを商用サービスの基盤に使うにあたって  

実装方法 多数のコンテナの管理  コンテナのリソース制限  コンテナ間のネットワーク  その他  

Page 3: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

サービス概要

Page 4: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 4

http://www.iij.ad.jp/biz/storage/

Page 5: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 5

IIJ GIO ストレージ& アナリシスサービス

+

REST API(AWS S3互換)を持つ  クラウドストレージサービス

Hadoop/Hiveを用いた  データ解析機能(オプション)

Page 6: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 6

サービス全体図

storage API

ストレージノード

analysis API

ユーザー

data

query

IIJ GIO ストレージ&アナリシスサービス

計算ノード

container

data data data

Page 7: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 7

計算ノード •  Hadoop + Hiveを使用• マルチテナント

Page 8: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 8

計算ノード(図)

analysis API

query

Hive

NN

RM

DN

NM

metastore

taskstorage

API DN

NM

task

ユーザ毎に用意

NN: Name NodeRM: Resouce ManagerDN: Data NodeNM: Node Manager

ノード

ノード

ノード

Page 9: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 9

計算ノード部分 要件 • ユーザ毎に実行環境が隔離されていること

• 公平なリソースの共有• ノードはユーザにより増減可能なこと

Page 10: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 10

サービス検討時の候補 •  Hypervisor型仮想マシンによる隔離

– 隔離という面では一番確実– 起動が遅い、オーバーヘッドがある

• コンテナによる隔離• アプリケーションレベルでの隔離

– Hiveだけ(UDF禁止)等、やれることを限定すれば可能

Page 11: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

• コンテナ上で動くアプリケーションの実行環境を構築・管理

• オープンソース• コンテナとは?

– 複数のLinux標準機能の組み合わせで実現する隔離環境• Namespaces, Cgroups, Capabilities など

© 2015 Internet Initiative Japan Inc. 11

Dockerとは?

Page 12: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 12

仮想マシン 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コンテナ

ゲスト毎に任意のOS使用可高い隔離性

オーバヘッドが少ない起動が速い

こちらを採用

Dockerコンテナは、隔離された単なるプロセス

Page 13: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 13

実際の本サービスの制限 • 現時点では、ユーザが任意のDockerイメージを動かすことは出来ない– 任意のMapReduceプログラムを動かすこともできない

– 使えるのはHiveQLのみ•  Dockerの利用は将来への布石

Page 14: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

Dockerを商用サービスの基盤に 使うにあたって

Page 15: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

• 単体のホスト上での開発・ビルド・テスト環境

• 環境のパッケージングと配布

© 2015 Internet Initiative Japan Inc. 15

Dockerが向いていること

Page 16: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 16

Dockerの課題 • 複数ホスト上の多数のコンテナの管理(オーケストレーション)

• 複数ホストをまたいだネットワーク• コンテナのログの管理• コンテナの監視、モニタリング

Page 17: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

多数のコンテナの管理

Page 18: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 18

オーケストレーション

Docker

Container Container 空き

Docker

Container Container Container

Docker

Container Container Container

Container Container

Container

コンテナ オーケストレーション

ツール

実行したいコンテナ群

ホスト

Page 19: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

• 例– Docker Swarm– Kubernetes– Apache Mesos– Fleet– Nomad– ...

© 2015 Internet Initiative Japan Inc. 19

オーケストレーションツール

Page 20: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 20

doma(docker manager)とは? • 独自開発• 多数のDockerコンテナを管理する

– 複数ホストをリソースプールとする– analysis APIからの要求によりプールから必要数のコンテナを自動確保し起動

Page 21: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 21

doma 構成図

Docker daemon

Container

slave

構成情報DB(MySQL MHA)

master

request / response

DockerRemote API

masterAPI

dockerホスト群

使用可能ホストリソース空き情報

IPアドレス空き情報etc

LB(nginx) HTTP

slaveAPI

HTTP

HTTPover

Unix domainsocket

analysis API

query

Page 22: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 22

master • 多数のコンテナをクラスタ単位で管理– クラスタ = コンテナの集合

• クラスタ操作– 予約、アップデート、起動、停止、再起動、解放(削除)

•  Ruby + Rack + EventMachine

Page 23: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 23

クラスタ • 互いに通信できるコンテナの集合

– 1つのクラスタは1つのユーザに属する– 別のクラスタとは通信できない

Docker

Container Container 空き

Docker

Container Container Container

Docker

Container Container Container

ホスト

クラスタ1 クラスタ2 クラスタ3

Page 24: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 24

masterが管理するもの • ホスト

– dockerが動く物理ホスト– CPU、メモリ割当て状況

•  IPアドレス– コンテナは1個ずつ(プライベート)IPアドレスを持つ

Page 25: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 25

コンテナの種類 • グレード

– 性能を決める(CPUコア数、メモリ量)• タイプ

– dockerイメージ名に対応– アプリケーション毎に複数用意されている

Page 26: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 26

slave •  Docker daemonのwrapper

– masterからは、ほぼDocker daemonに見える

– いくつかAPIを拡張

•  Goで記述

Docker daemon

slave

DockerRemote API

HTTPover

Unix domainsocket

master

slaveAPI

Page 27: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 27

Docker Remote API •  HTTP、REST、JSONベース•  dockerコマンドはすべてこのAPIを経由している

Host Docker daemon

docker pull docker run docker ... container container container

Docker client HTTP overUnix domain socketまたは TCP

DockerRemote API

Page 28: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 28

slave追加機能 • コンテナ起動関連

– サイズ制限されたディスク領域提供– ネットワーク設定– iptablesチェイン設定

• コンテナのメトリクス取得• コンテナ内にファイルを送り込む• コンテナ非同期削除

Page 29: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

コンテナのリソース制限

Page 30: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 30

リソース制限概略 • 主にcgroupを使う•  CPU

– cpuset• メモリ

– memory• ディスク使用量

– cgroupではできない

Page 31: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 31

CPU制限 •  (Docker Remote API経由で)cgroupの

cpuset.cpusを使う– コンテナのプロセスが実行されるCPUコアの番号を指定

– 例: "CpusetCpus":"0-2,7" • 各コンテナおよびシステムプロセスそれぞれが使うCPUコアを分離

Page 32: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 32

ディスク使用量制限 • 特定サイズのloopbackデバイス用ファイルを作って、それをmount– あらかじめmkfs済sparseイメージ入り

tarファイルを用意– コンテナ起動時にそれを展開して

mount(0.1~0.2秒くらい)– コンテナ解放時はファイルを1個削除するだけ

Page 33: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

コンテナ間のネットワーク

Page 34: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 34

通常のDockerのネットワーク

IPマスカレード

仮想ネットワーク インターフェース (veth)

containernetworknamespace

コンテナA コンテナB

hostnetworknamespace

ホスト

仮想ブリッジ docker0

NIC

eth0

vethA

eth0

vethB

Page 35: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 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

Page 36: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 36

解決策 • 例

– pipework– weave– flannel– libnetwork overlay driver– ...

• または独自に頑張るこちらを採用

Page 37: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 37

本サービスのネットワーク •  dockerのネットワーク設定は使用せず– ("NetworkDisabled": true)

• 代わりにslaveがコンテナ起動時にネットワーク設定をする

Page 38: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 38

本サービスのネットワーク

IPマスカレード

通常のdockerのネットワーク

containernetworknamespace

本サービスのネットワーク

hostnetworknamespace

ホスト

IPマスカレード

コンテナA コンテナB

ホスト

docker0

NIC

eth0

vethA

eth0

vethB

IPマスカレード

ホスト

コンテナA コンテナB

NIC

eth0

vethA

eth0

vethB

host-veth

ホスト host-geth

bridge0

Page 39: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 39

論理的にはこんな感じ

eth0

コンテナA eth0

コンテナB host-geth

ホスト1 eth0

コンテナC eth0

コンテナD host-geth

ホスト2

•  コンテナはホストと同じネットワークに直接つながる•  コンテナのIPアドレスはmasterが決定しslaveが設定する

Page 40: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 40

ネットワークの隔離 • クラスタ間はiptablesで隔離

– コンテナはCAP_NET_RAWを禁止

Page 41: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

その他

Page 42: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 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で生成

Page 43: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 43

ログの管理 • コンテナ内の各種ログは、コンテナ内の特定ディレクトリに一時保存

• ホスト上(コンテナ外)のfluentdで外に飛ばす

• 本サービスのストレージ部分(管理用)に保存

(今ならDockerのlog driverを使えば良いと思う)

Page 44: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 44

監視 • ホストが障害を起こしたらdomaはコンテナ割り当て対象から除外– 障害コンテナを別ホストに自動移動したり再起動はしない

• コンテナのアプリケーションレイヤの監視はanalysis APIが行っている

Page 45: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 45

コンテナのモニタリング •  slaveに、コンテナ単位のメトリクスを返す機能追加

•  cgroupの統計情報と、コンテナ内の /proc/net/dev 等からメトリクスを得る

(今なら cAdvisor を使えば良いと思う)

Page 46: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

46

↓CPU Accounting

Memory→

↓Network traffic

コンテナのモニタリング

Page 47: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

•  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について

Page 48: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 48

まとめ •  Hadoop/Hiveをマルチテナントで動かすためにDockerを採用

•  Dockerは多数のコンテナを扱うには課題がある– 解決のためいくつかのツール類を開発– 今ならもっと楽な別のやり方があるはず

Page 49: Dockerの商用サービスでの利用事例紹介 · Dockerイメージ • Docker HUBのイメージは使用せず – 同じrepository名:tag名でも内容が変 わっていることがある

© 2015 Internet Initiative Japan Inc. 49

別のやり方 項目 本サービス 別のやり方(例) コンテナオーケストレーション

独自 doma(docker manager)

Kubernetes, Swarm, Mesosなど

ネットワーク 独自 libnetwork, flannel, weave など

ロギング 外付けfluentd docker log driver モニタリング 独自 cAdvisor OS CentOS 6 CoreOS, Atomic

Hostなど