FiNCにおけるコンテナ活用事例

Ba0cce2241a7133aec62afc8ed15a172?s=47 Kenji Suzuki
September 08, 2016

 FiNCにおけるコンテナ活用事例

Microservices Meetup Vol.3の登壇資料です
http://microservices-meetup.connpass.com/event/38244/

Ba0cce2241a7133aec62afc8ed15a172?s=128

Kenji Suzuki

September 08, 2016
Tweet

Transcript

  1. FiNCにおけるコンテナ活用事例 - Microservices Meetup Vol.3 - @kenjiszk

  2. About Me •  @kenjiszk •  SRE Manager in FiNC – Infrastructure

    (AWS/Azure/GCPもそろそろ?) – 認証基盤 – セキュリティ – 情シス •  Before FiNC – Startup (iOS) – DeNA (Infrastructure)
  3. Microservices Meetup FiNCではMicroservices x ◯◯というテーマで 月イチ程度でMeetupを開催しています Vol.1 Microservices x Frontend

    Vol.2 Microservices x SRE
  4. Microservices Meetup 今回は Microservices x コンテナでやりませんか? というお誘いからテーマが決定 やりたいテーマがある方はお気軽に facebook、twiRerなどでメッセージください。

  5. Microservices Meetup なんでもありです Microservices x Monitoring Microservices x Security Micorservices

    x Serverless Micorservices x 管理画面 Microservices vs モノリシック
  6. Agenda •  Containers(Docker) in FiNC – Development Environment (docker-compose) – Test in

    Docker Container (docker-compose) – Use in Service (docker swarm)
  7. Development Environment

  8. Development Environment •  FiNCで一番最初にDockerを利用検討したコンポーネ ント(2015/06~) •  Microservicesな構成でローカル開発をする場合 – 開発に必要なコンポーネントを全て立ち上げる必 要がある – 一つ一つセットアップするのが大変なので、

    Dockerコンテナで一気に立ち上げ可能にする
  9. Development Environment Prototypeは失敗に終わる…

  10. Development Environment •  失敗要因 – Microserviceが多すぎてメモリが足りない •  最初から計算しておけ、ではなくMicroserviceが増えた – ディベロッパーのdocker学習コスト – docker image作成フロー

    – VM on Macのパフォーマンス
  11. Development Environment •  現在 – サーバー上に環境を構築する方向に修正 •  個人が気軽に1セットを立ち上げ、検証が終わったら捨 てる、みたいな環境を目指す •  引き続き、docker-composeで構築

    – docker imageの作成フロー •  Testがsuccessしたらそのコードをそのままdocker imageにする
  12. Test

  13. Test •  Mo\va\on – 管理された環境でTestを走らせたい – 毎回同じ環境でTestしたい – Test環境を一瞬で構築したい •  image化 – Test用のbaseイメージ立ち上げ – 特定branchのコードを配布

    – Test実行、Successならそのままimage化
  14. Test

  15. Use in Service

  16. Use in Service •  サービス環境でも利用検討 – Docker Engine 1.12 Swarm mode

    •  Cluster management •  Scaling •  Overlay network •  Load balancing •  Rolling updates – 触ってみた感じ、相当簡単に利用開始出来る
  17. Use in Service •  最終目標 – 全てのサービス環境をコンテナ運用(データストア などは除く) •  ミドルウェアの更新の容易さ • 

    デプロイ(カナリア、blue-green) •  開発、Test、QA、Produc\onまで同じイメージで •  スケーリング •  まず最初に – 1コンポーネントを試してみる
  18. Use in Service •  対象:フロントエンドサーバー –  現在開発中のオーケスト レーション層 –  新コンポーネントなので試

    しにswarm使ってみる事 に •  マイクロサービスの利点 –  DBが無いコンポーネント –  全てのトラフィックを受け るのでスケーリングの簡 単さに期待
  19. Use in Service •  service作成 – hRps://docs.docker.com/engine/swarm/ •  docker swarm init

    –  managerを作成 •  docker swarm join –  nodeで実行、クラスタに参加 •  docker service create –  サービス作成
  20. Use in Service docker service create --replicas 2 --name fes

    -p 8000:8000 finc/fes:v1 node app.js
  21. Use in Service •  運用上必要な最低限のコンポーネント – Scaling – Deploy – Log収集 – Monitoring

  22. Use in Service(Scale) docker service scale fes=3

  23. Use in Service(Scale) •  nodeの個数が変わらないうちはスケールは 自由 •  nodeのScalingは別管理が必要

  24. Use in Service(Deploy) •  Rolling Updates – 立ち上がっているコンテナの一つをshutdown – 新しいバージョンのコンテナを起動 – 一つ一つ更新していく(間隔、並列数などのオプ ション指定可能)

    – 新しいバージョンが立ち上がらない場合には処理 が止まる docker service update --image finc/fes:v2 fes
  25. Use in Service(Log収集) docker service create \ --name logger \

    -p 24224:24224 \ fluent/fluentd docker service create \ --replicas 2 \ -p 80:80 \ --log-driver=fluentd \ --log-opt=fluentd-address=localhost:24224 \ --name fes \ finc/fes:v2 •  fluentdのserviceを事前に上げておく •  log-dirverとlog-optをfluentdに向ける
  26. Use in Service(Log収集) •  各コンテナは、localhost:24224に向けてlogをはく •  lngress load balancingにより、上図の場合は、node2のfluentdに ログが集約される

    •  fluentdを複数コンテナ立てれば、ロードバランシングされる
  27. Use in Service(Monitoring) docker service create \ --name dd-agent \

    --mode global \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/ docker.sock,readonly=false \ --mount type=bind,source=/proc/,target=/host/proc/,readonly=true \ --mount type=bind,source=/sys/fs/cgroup/,target=/host/sys/fs/ cgroup,readonly=true \ -e API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx \ datadog/docker-dd-agent •  コンテナ毎のリソースモニタリングを行うためDatadogを使用した •  各nodeにagentを立ち上げたいため、global modeを利用
  28. Use in Service(Monitoring) 各コンテナのリソースを取得可能 リソースのまとめ方も選択可能

  29. Use in Service(Monitoring)

  30. Summary

  31. Summary •  Containers(Docker) in FiNC – Development Environment (docker-compose) – Test in

    Docker Container (docker-compose) – Use in Service (docker swarm)
  32. We are hiring! Dockerのエキスパートの方、Dockerを積極利用したい方、ぜひお声がけください!