SlideShare a Scribd company logo
SaaS開発における	
  
Dockerインフラ活用と課題	
IIJ	
  
丹羽 絢也
自己紹介	
•  丹羽 絢也(にわ じゅんや)	
  
– 3年目	
  
•  業務	
  
– IIJ	
  GIO	
  ストレージ&アナリシスサービス	
  
– アナリシス部分の開発・運用	
  
•  APIサーバ	
  
•  クラスタ管理サーバ	
  
•  コンテナ内で動作するアプリケーション	
  
–  Hive	
  +	
  Hadoop	
  
•  DB(MySQL	
  +	
  MHA)	
  
Dockerインフラの活用	
•  Dockerって何?	
  
•  Linux	
  Container	
  
•  Linux	
  Namespace	
  
•  Cgroup	
  
•  オーケストレーション	
  
Dockerインフラの活用	
•  Dockerって何?	
  
•  Linux	
  Container	
  
•  Linux	
  Namespace	
  
•  Cgroup	
  
•  オーケストレーション	
  
Dockerインフラを使った
サービス開発のお話	
Dockerインフラの事は	
  
hFp://www.slideshare.net/maebashi/dockeriij	
  
目次	
•  IIJ	
  GIO	
  ストレージ&アナリシスサービス	
  
•  Dockerインフラ	
  
•  Dockerインフラ活用における課題	
  
– ライフサイクル管理	
  
– 運用	
  
目次	
•  IIJ	
  GIO	
  ストレージ&アナリシスサービス	
  
•  Dockerインフラ	
  
•  Dockerインフラ活用における課題	
  
– ライフサイクル管理	
  
– 運用	
  
storage
API
ストレージ!
ノード	
analysis
API
ユーザー
data	
query	
 計算!
ノード	
data	
data	
data	
IIJ	
  GIOストレージ&アナリシスサービス	
container
IIJ	
  GIOストレージ&アナリシスサービス	
•  顧客の分離方式	
  
–  Hive	
  +	
  Hadoopは複数ホストで分散処理	
  
–  複数ホストを複数のユーザで共有	
  
–  単一クラスタの共有	
  
•  セキュリティ	
  
–  顧客毎にクラスタ化	
  
•  KVM?	
  
–  オーバースペック	
  
–  オーバーヘッド	
  
•   	
  
–  シンプル	
  
–  プロセスなので、オーバーヘッドが小さい	
  
目次	
•  IIJ	
  GIO	
  ストレージ&アナリシスサービス	
  
•  Dockerインフラ	
  
•  Dockerインフラ活用における課題	
  
– ライフサイクル管理	
  
– 運用	
  
Dockerインフラ	
•  HadoopクラスタをDockerで構成したい	
  
–  Dockerコンテナオーケストレーション	
  
•  複数ホストで多数のコンテナを管理	
  
•  複数ホストをまたいだネットワークの構成	
  
•  クラスタに属するコンテナ数の増減を素早く実施	
  
–  Docker	
  Swarm	
  
–  Kubernetes	
  
–  Nomad(?)	
  
	
  
•  Dockerコンテナオーケストレーションツール	
  
–  doma(docker	
  manager)	
  
–  独自開発	
  
Dockerインフラ	
•  doma	
  
–  master/slave型	
  
•  HTTP	
  REST	
  API	
  
–  クラスタリソース確保	
  
–  設定ファイルの投入	
  
–  ネットワークの設定(通信の許可)	
  
–  起動	
  
–  停止	
  
–  更新(増減)	
  
–  リソース解放	
  
–  情報取得	
  
slave	
slave	
 slave	
master	
container	
 container	
container	
 container	
 container	
container	
 container	
 container	
クラスタ1	
クラスタ2	
クラスタ3	
空き	
slave	
slave	
 slave	
master	
container	
 container	
container	
 container	
 container	
container	
 container	
 container	
物理ホスト
•  クラスタ管理	
  
–  作成	
  
–  コンテナの増減	
  
–  破棄	
  
–  情報	
  
•  ホスト名等	
  
–  監視	
  
•  アプリレイヤ	
  
全体の構成(絵)	
slave	
slave	
 slave	
master	
container	
 container	
container	
 container	
 container	
container	
 container	
 container	
Analysis	
  API	
物理ホスト	
操
作	
空き	
DB	
クラスタ1	
クラスタ2	
クラスタ3	
クエリ	
クラスタ管理	
ク
エ
リ	
  
監
視	
DB
目次	
•  IIJ	
  GIO	
  ストレージ&アナリシスサービス	
  
•  Dockerインフラ	
  
•  Dockerインフラ活用における課題	
  
– ライフサイクル管理	
  
– 運用	
  
Dockerインフラ活用における課題	
•  ライフサイクル管理	
  
– 設定	
  
•  環境依存の設定やクラスタ毎に変化する設定	
  
– 起動/監視	
  
•  コンテナが起動	
  !=	
  アプリから見て利用可能	
  
•  故障検知	
  
•  運用	
– アプリケーションの更新	
  
Dockerインフラ活用における課題	
•  ライフサイクル管理	
  
– 設定	
  
•  環境依存の設定やクラスタ毎に変化する設定	
  
– 起動/監視	
  
•  コンテナが起動	
  !=	
  アプリから見て利用可能	
  
•  故障検知	
  
•  運用	
– アプリケーションの更新	
  
ライフサイクル管理:設定	
•  コンテナ内の設定	
  
–  環境毎に変化(APIサーバのURL)	
  
–  クラスタ毎に変化(コンテナのホスト名/アドレス等)	
  
	
  
	
  
image	
api.dev.example.com	
 api.prd.example.com	
開発環境	
 本番環境	
Container(192.0.2.2)	
 Container(10.0.0.2)	
Container(192.0.2.1)	
 Container(10.0.0.1)
ライフサイクル管理:設定	
•  課題	
  
–  環境やクラスタによって変化する設定をどう反映するか?	
  
–  外から全てのアプリ設定ファイルをテンプレートから作成?	
  
•  コンテナ内の改修によってクラスタ管理サーバのテンプレート編集が必要に	
  
•  現在	
  
–  変化する項目のみをJSONでコンテナに設置	
  
–  Dockerイメージ内でアプリ固有の設定ファイルを作成	
  
•  Ruby製スクリプト(chef-­‐soloみたいなやつ)	
  
•  コンテナ起動時に自動呼出	
  
–  JSON例	
  
	
  
•  アプリ設定の追加/変更はDockerイメージの更新で行う事が可能に	
  
•  変化項目が増える場合はJSONに追加していけばOK	
  
{	
  
	
  	
  "storage":	
  {"endpoint":	
  "storage.dev.example.com"},	
  
	
  	
  "cluster":	
  {"hosts":	
  [	
  "c1cluster1",	
  "c2cluster1"]},	
  
	
  	
  "instance":	
  {	
  "memory":	
  8,	
  "logical_cores":	
  4}	
  
}
Dockerインフラ活用における課題	
•  ライフサイクル管理	
  
– 設定	
  
•  環境依存の設定やクラスタ毎に変化する設定	
  
– 起動/監視	
  
•  コンテナが起動	
  !=	
  アプリから見て利用可能	
  
•  故障検知	
  
•  運用	
– アプリケーションの更新	
  
ライフサイクル管理:起動/監視	
•  起動時間	
  
– コンテナの起動は数秒	
  
– アプリケーション	
  
•  Hive/Hadoop	
  =	
  Java	
  
•  JVMの起動に1分	
  
•  コンテナの起動	
  !=	
  利用可能	
  
– 利用可能になったかどうかを監視する必要	
  
ライフサイクル管理:起動/監視	
•  監視	
  
– 多数のクラスタ/動的に構成が変わる	
  
– アプリ影響の有るDockerインフラ側の故障	
  
アプリレイヤ	
   Docker	
  
インフラレイヤ	
  
サービス影響の有る故障の監視	
slave故障等	
  OOM/過負荷等	
コンテナの故障等
ライフサイクル管理:起動/監視	
•  監視ワーカー(Java)	
  
–  Executorフレームワーク	
  
•  マルチスレッド	
  
•  定期実行	
  
–  Hive	
  /	
  Hadoopの機能を利用して監視	
  
•  クラスタの状態	
  
–  10状態	
  
–  総遷移数	
  46	
  
–  初期化	
  -­‐>	
  起動/異常	
  
–  起動	
  -­‐>	
  正常/異常	
  
–  正常	
  -­‐>	
  異常/起動/停止	
  
–  …	
  
ライフサイクル管理:起動/監視	
•  状態一覧	
  
–  初期化 	
  	
  	
  	
  クラスタの情報をDBに保存	
  
–  停止 domaに対する設定が完了   	
  
–  起動 アプリの起動中	
  
–  正常	
  
–  異常 アプリの故障	
  
–  一部異常 処理継続可能なアプリの故障	
  
–  再起動 再起動処理の排他用	
  
–  解放中 非同期な解放処理のための状態	
  
–  解放済	
  
–  メンテナンス	
  
•  複雑化	
  
–  APIを介したクラスタ管理を提供すると複雑に	
  
•  同時に叩かれた場合への対応	
  
•  レスポンス時間の短縮	
  
–  力技	
  
Dockerインフラ活用における課題	
•  ライフサイクル管理	
  
– 設定	
  
•  環境依存の設定やクラスタ毎に変化する設定	
  
– 起動/監視	
  
•  コンテナが起動	
  !=	
  アプリから見て利用可能	
  
•  故障検知	
  
•  運用	
– アプリケーションの更新	
  
運用	
•  コンテナ内アプリケーションの更新	
  
– 必要な作業	
  
1.  Dockerfileでイメージを更新	
  
2.  イメージの配布	
  
3.  コンテナの停止	
  
4.  新イメージを用いた起動	
  
•  現状 	
  	
  
– クエリが無い時に手動実行	
  
•  処理の有無を気にせず更新するには?	
  
–  同じ性能のクラスタを新イメージで立てる	
  
1.  新規クエリは全て新クラスタに向ける	
  
2.  実行中の処理が終わったら旧クラスタを落とす	
  
–  Graceful	
  Shutdown	
  /	
  Blue-­‐Green	
  Deployment	
  
–  安定するなら自動化も可能	
  
•  ジレンマ	
  
–  状態が増える	
  
–  リソース消費が2倍	
  
運用	
旧イメージ	
新イメージ	
メンテナンス開始	
 新規クエリ	
 クエリ完了を検知、	
  
旧クラスタ解放	
クエリ	
時間
まとめ	
•  Dockerインフラを活用してサービスを開発した	
  
–  アプリケーション実行環境のコード化	
  
•  Githubでのインフラ管理	
  
–  環境が異なっても同じコンテナイメージを利用可能	
  
•  結果として環境依存を排除	
  
•  immutable	
  container	
  
–  データは外部に持たせる	
  
–  ログはfluentdで外に蓄積	
  
	
  
•  使ってみて思った事	
  
–  アプリレイヤでの監視運用ベストプラクティス化が必要	
  
•  複雑化	
  
–  専用フレームワークがあっても良いのでは?	
  
•  Consul、Kubernetes、Nomad	
  
•  良い所を取り入れていきたい	
  
サービス開発サイクル	
•  Dockerイメージの作成	
  
–  initスクリプトの作成	
  
•  コンテナ起動時に呼び出される	
  
•  必要なサービスを起動	
  
–  Dockerfile	
  
•  initスクリプトの設置	
  
•  パッケージのインストール	
  
•  イメージの配布	
  
–  起動を高速化するため予め全ホストに配布	
  
•  Dockerインフラに起動を依頼(APIサーバ)	
  
–  リソースの予約	
  
–  設定ファイルの配布	
  
–  通信の許可(ストレージ	
  API、metastore)	
  
–  起動	
  
IIJ	
  GIOストレージ&アナリシスサービス	
•  クラスタ	
  
– 複数(ユーザ指定)のDockerコンテナで構成	
  
– Hiveクエリを発行する事で分散処理を実行	
  
– 増減する事で処理性能を変化	
  
ユーザA	
クラスタ1	
クラスタ2	
ユーザB	
クラスタ3

More Related Content

PDF
ROMA のアーキテクチャと社内事例
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PDF
MySQL負荷分散の方法
PDF
OpenStack 101
PPTX
Mod lua
PDF
WALをバックアップとレプリケーションに使う方法
PDF
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
PDF
HBase at LINE
ROMA のアーキテクチャと社内事例
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
MySQL負荷分散の方法
OpenStack 101
Mod lua
WALをバックアップとレプリケーションに使う方法
第2回 松本勉強会 2012 05 25 - apache2.4とmod_lua
HBase at LINE

What's hot (20)

KEY
1台から500台までのMySQL運用(YAPC::Asia編)
PDF
MHA for MySQLとDeNAのオープンソースの話
PPT
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
PDF
WalBの紹介
PDF
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
PDF
QCon北京2015 sina jpool-微博平台自动化运维实践
PDF
MySQL Casual な生活
PDF
fluentd を利用した大規模ウェブサービスのロギング
PPTX
MySQL 冗長化モデル
PPTX
Zabbix による ms sql監視 ~データベースモニタリング~ odbc
PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」
PDF
Introducing MySQL MHA (JP/LT)
PDF
Mod mrubyについて
PDF
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
PDF
Sql server 2016 always on 可用性グループ new features
PDF
Always on 可用性グループ 構築時のポイント
PPTX
20140518 JJUG MySQL Clsuter as NoSQL
PDF
MaxScaleを触ってみた
PDF
MySQL カジュアル 福岡 03
PDF
DeltaCubeにおけるユニークユーザー集計高速化(実践編)
1台から500台までのMySQL運用(YAPC::Asia編)
MHA for MySQLとDeNAのオープンソースの話
20170329 D3 DBAが夜間メンテをしなくなった日 発表資料
WalBの紹介
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
QCon北京2015 sina jpool-微博平台自动化运维实践
MySQL Casual な生活
fluentd を利用した大規模ウェブサービスのロギング
MySQL 冗長化モデル
Zabbix による ms sql監視 ~データベースモニタリング~ odbc
Seastar in 歌舞伎座.tech#8「C++初心者会」
Introducing MySQL MHA (JP/LT)
Mod mrubyについて
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
Sql server 2016 always on 可用性グループ new features
Always on 可用性グループ 構築時のポイント
20140518 JJUG MySQL Clsuter as NoSQL
MaxScaleを触ってみた
MySQL カジュアル 福岡 03
DeltaCubeにおけるユニークユーザー集計高速化(実践編)
Ad

Viewers also liked (12)

PPTX
日本におけるSaasの現状
PDF
Amazon EC2 を使ったSaaS運用事例(LT) - Tokyo Cloud Developers Meetup (20090409)
PDF
MongoDB インサイド SaaS型業務アプリケーション
PDF
おにいぽんでもわかるContainer
PDF
20160916 ビッグデータシンポジウム オラクル公開資料
PDF
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
PPTX
Rancher select
PDF
Amazon EC2を使った実践SaaS運用事例
PPTX
CI/CD with Rancher CLI + Jenkins
PDF
Rancher で Docker 利用!
PPTX
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
PDF
インフラエンジニアのためのRancherを使ったDocker運用入門
日本におけるSaasの現状
Amazon EC2 を使ったSaaS運用事例(LT) - Tokyo Cloud Developers Meetup (20090409)
MongoDB インサイド SaaS型業務アプリケーション
おにいぽんでもわかるContainer
20160916 ビッグデータシンポジウム オラクル公開資料
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
Rancher select
Amazon EC2を使った実践SaaS運用事例
CI/CD with Rancher CLI + Jenkins
Rancher で Docker 利用!
【第11回 クラウドごった煮(コンテナ勉強会)】Docker networking tools
インフラエンジニアのためのRancherを使ったDocker運用入門
Ad

Similar to Using docker infrastructure (20)

PDF
コンテナ時代にインフラエンジニアは何をするのか
PDF
Dockerの利用事例
PDF
DOO-013_Docker 最新動向と Azure Container Service 入門
PDF
捕鯨!詳解docker
PDF
VMware が考えるコンテナと Kubernetes の世界
PDF
Acm2.1 short public
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
PPTX
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
PDF
Tech Dojo 02/09 IBM Japan CSM
PDF
Dockerの仕組みとIIJ社内での利用例
PDF
運用に自動化を求めるのは間違っているだろうか
PDF
クラウド運用のためのストリームマイニング
PDF
Docker国内外本番環境サービス事例のご紹介
PPTX
作られては消えていく泡のように儚いクラスタの運用話
PPTX
Let's Use OKE
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
Architecting on Alibaba Cloud - Fundamentals - 2018
PDF
Docker Swarm モード にゅうもん
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
PDF
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
コンテナ時代にインフラエンジニアは何をするのか
Dockerの利用事例
DOO-013_Docker 最新動向と Azure Container Service 入門
捕鯨!詳解docker
VMware が考えるコンテナと Kubernetes の世界
Acm2.1 short public
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
Tech Dojo 02/09 IBM Japan CSM
Dockerの仕組みとIIJ社内での利用例
運用に自動化を求めるのは間違っているだろうか
クラウド運用のためのストリームマイニング
Docker国内外本番環境サービス事例のご紹介
作られては消えていく泡のように儚いクラスタの運用話
Let's Use OKE
コンテナ未経験新人が学ぶコンテナ技術入門
Architecting on Alibaba Cloud - Fundamentals - 2018
Docker Swarm モード にゅうもん
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏

Using docker infrastructure

  • 2. 自己紹介 •  丹羽 絢也(にわ じゅんや)   – 3年目   •  業務   – IIJ  GIO  ストレージ&アナリシスサービス   – アナリシス部分の開発・運用   •  APIサーバ   •  クラスタ管理サーバ   •  コンテナ内で動作するアプリケーション   –  Hive  +  Hadoop   •  DB(MySQL  +  MHA)  
  • 3. Dockerインフラの活用 •  Dockerって何?   •  Linux  Container   •  Linux  Namespace   •  Cgroup   •  オーケストレーション  
  • 4. Dockerインフラの活用 •  Dockerって何?   •  Linux  Container   •  Linux  Namespace   •  Cgroup   •  オーケストレーション   Dockerインフラを使った サービス開発のお話 Dockerインフラの事は   hFp://www.slideshare.net/maebashi/dockeriij  
  • 5. 目次 •  IIJ  GIO  ストレージ&アナリシスサービス   •  Dockerインフラ   •  Dockerインフラ活用における課題   – ライフサイクル管理   – 運用  
  • 6. 目次 •  IIJ  GIO  ストレージ&アナリシスサービス   •  Dockerインフラ   •  Dockerインフラ活用における課題   – ライフサイクル管理   – 運用  
  • 8. IIJ  GIOストレージ&アナリシスサービス •  顧客の分離方式   –  Hive  +  Hadoopは複数ホストで分散処理   –  複数ホストを複数のユーザで共有   –  単一クラスタの共有   •  セキュリティ   –  顧客毎にクラスタ化   •  KVM?   –  オーバースペック   –  オーバーヘッド   •      –  シンプル   –  プロセスなので、オーバーヘッドが小さい  
  • 9. 目次 •  IIJ  GIO  ストレージ&アナリシスサービス   •  Dockerインフラ   •  Dockerインフラ活用における課題   – ライフサイクル管理   – 運用  
  • 10. Dockerインフラ •  HadoopクラスタをDockerで構成したい   –  Dockerコンテナオーケストレーション   •  複数ホストで多数のコンテナを管理   •  複数ホストをまたいだネットワークの構成   •  クラスタに属するコンテナ数の増減を素早く実施   –  Docker  Swarm   –  Kubernetes   –  Nomad(?)     •  Dockerコンテナオーケストレーションツール   –  doma(docker  manager)   –  独自開発  
  • 11. Dockerインフラ •  doma   –  master/slave型   •  HTTP  REST  API   –  クラスタリソース確保   –  設定ファイルの投入   –  ネットワークの設定(通信の許可)   –  起動   –  停止   –  更新(増減)   –  リソース解放   –  情報取得   slave slave slave master container container container container container container container container クラスタ1 クラスタ2 クラスタ3 空き slave slave slave master container container container container container container container container 物理ホスト
  • 12. •  クラスタ管理   –  作成   –  コンテナの増減   –  破棄   –  情報   •  ホスト名等   –  監視   •  アプリレイヤ   全体の構成(絵) slave slave slave master container container container container container container container container Analysis  API 物理ホスト 操 作 空き DB クラスタ1 クラスタ2 クラスタ3 クエリ クラスタ管理 ク エ リ   監 視 DB
  • 13. 目次 •  IIJ  GIO  ストレージ&アナリシスサービス   •  Dockerインフラ   •  Dockerインフラ活用における課題   – ライフサイクル管理   – 運用  
  • 14. Dockerインフラ活用における課題 •  ライフサイクル管理   – 設定   •  環境依存の設定やクラスタ毎に変化する設定   – 起動/監視   •  コンテナが起動  !=  アプリから見て利用可能   •  故障検知   •  運用 – アプリケーションの更新  
  • 15. Dockerインフラ活用における課題 •  ライフサイクル管理   – 設定   •  環境依存の設定やクラスタ毎に変化する設定   – 起動/監視   •  コンテナが起動  !=  アプリから見て利用可能   •  故障検知   •  運用 – アプリケーションの更新  
  • 16. ライフサイクル管理:設定 •  コンテナ内の設定   –  環境毎に変化(APIサーバのURL)   –  クラスタ毎に変化(コンテナのホスト名/アドレス等)       image api.dev.example.com api.prd.example.com 開発環境 本番環境 Container(192.0.2.2) Container(10.0.0.2) Container(192.0.2.1) Container(10.0.0.1)
  • 17. ライフサイクル管理:設定 •  課題   –  環境やクラスタによって変化する設定をどう反映するか?   –  外から全てのアプリ設定ファイルをテンプレートから作成?   •  コンテナ内の改修によってクラスタ管理サーバのテンプレート編集が必要に   •  現在   –  変化する項目のみをJSONでコンテナに設置   –  Dockerイメージ内でアプリ固有の設定ファイルを作成   •  Ruby製スクリプト(chef-­‐soloみたいなやつ)   •  コンテナ起動時に自動呼出   –  JSON例     •  アプリ設定の追加/変更はDockerイメージの更新で行う事が可能に   •  変化項目が増える場合はJSONに追加していけばOK   {      "storage":  {"endpoint":  "storage.dev.example.com"},      "cluster":  {"hosts":  [  "c1cluster1",  "c2cluster1"]},      "instance":  {  "memory":  8,  "logical_cores":  4}   }
  • 18. Dockerインフラ活用における課題 •  ライフサイクル管理   – 設定   •  環境依存の設定やクラスタ毎に変化する設定   – 起動/監視   •  コンテナが起動  !=  アプリから見て利用可能   •  故障検知   •  運用 – アプリケーションの更新  
  • 19. ライフサイクル管理:起動/監視 •  起動時間   – コンテナの起動は数秒   – アプリケーション   •  Hive/Hadoop  =  Java   •  JVMの起動に1分   •  コンテナの起動  !=  利用可能   – 利用可能になったかどうかを監視する必要  
  • 20. ライフサイクル管理:起動/監視 •  監視   – 多数のクラスタ/動的に構成が変わる   – アプリ影響の有るDockerインフラ側の故障   アプリレイヤ   Docker   インフラレイヤ   サービス影響の有る故障の監視 slave故障等  OOM/過負荷等 コンテナの故障等
  • 21. ライフサイクル管理:起動/監視 •  監視ワーカー(Java)   –  Executorフレームワーク   •  マルチスレッド   •  定期実行   –  Hive  /  Hadoopの機能を利用して監視   •  クラスタの状態   –  10状態   –  総遷移数  46   –  初期化  -­‐>  起動/異常   –  起動  -­‐>  正常/異常   –  正常  -­‐>  異常/起動/停止   –  …  
  • 22. ライフサイクル管理:起動/監視 •  状態一覧   –  初期化         クラスタの情報をDBに保存   –  停止 domaに対する設定が完了      –  起動 アプリの起動中   –  正常   –  異常 アプリの故障   –  一部異常 処理継続可能なアプリの故障   –  再起動 再起動処理の排他用   –  解放中 非同期な解放処理のための状態   –  解放済   –  メンテナンス   •  複雑化   –  APIを介したクラスタ管理を提供すると複雑に   •  同時に叩かれた場合への対応   •  レスポンス時間の短縮   –  力技  
  • 23. Dockerインフラ活用における課題 •  ライフサイクル管理   – 設定   •  環境依存の設定やクラスタ毎に変化する設定   – 起動/監視   •  コンテナが起動  !=  アプリから見て利用可能   •  故障検知   •  運用 – アプリケーションの更新  
  • 24. 運用 •  コンテナ内アプリケーションの更新   – 必要な作業   1.  Dockerfileでイメージを更新   2.  イメージの配布   3.  コンテナの停止   4.  新イメージを用いた起動   •  現状     – クエリが無い時に手動実行  
  • 25. •  処理の有無を気にせず更新するには?   –  同じ性能のクラスタを新イメージで立てる   1.  新規クエリは全て新クラスタに向ける   2.  実行中の処理が終わったら旧クラスタを落とす   –  Graceful  Shutdown  /  Blue-­‐Green  Deployment   –  安定するなら自動化も可能   •  ジレンマ   –  状態が増える   –  リソース消費が2倍   運用 旧イメージ 新イメージ メンテナンス開始 新規クエリ クエリ完了を検知、   旧クラスタ解放 クエリ 時間
  • 26. まとめ •  Dockerインフラを活用してサービスを開発した   –  アプリケーション実行環境のコード化   •  Githubでのインフラ管理   –  環境が異なっても同じコンテナイメージを利用可能   •  結果として環境依存を排除   •  immutable  container   –  データは外部に持たせる   –  ログはfluentdで外に蓄積     •  使ってみて思った事   –  アプリレイヤでの監視運用ベストプラクティス化が必要   •  複雑化   –  専用フレームワークがあっても良いのでは?   •  Consul、Kubernetes、Nomad   •  良い所を取り入れていきたい  
  • 27. サービス開発サイクル •  Dockerイメージの作成   –  initスクリプトの作成   •  コンテナ起動時に呼び出される   •  必要なサービスを起動   –  Dockerfile   •  initスクリプトの設置   •  パッケージのインストール   •  イメージの配布   –  起動を高速化するため予め全ホストに配布   •  Dockerインフラに起動を依頼(APIサーバ)   –  リソースの予約   –  設定ファイルの配布   –  通信の許可(ストレージ  API、metastore)   –  起動  
  • 28. IIJ  GIOストレージ&アナリシスサービス •  クラスタ   – 複数(ユーザ指定)のDockerコンテナで構成   – Hiveクエリを発行する事で分散処理を実行   – 増減する事で処理性能を変化   ユーザA クラスタ1 クラスタ2 ユーザB クラスタ3