Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mesosを使ったImmutable Infra 管理システムを作ってみた

tatsuru
March 25, 2014

Mesosを使ったImmutable Infra 管理システムを作ってみた

Immutable Infrastracture Conference #1 で発表した資料です
http://atnd.org/events/47786

tatsuru

March 25, 2014
Tweet

More Decks by tatsuru

Other Decks in Technology

Transcript

  1. Mesos
    Mesosを使った
    を使ったImmutable Infra
    Immutable Infra
    管理システムを作ってみた
    管理システムを作ってみた
    Tatsuru WATANABE
    2014/03/25 Immutable Infrastracture Conference

    View full-size slide

  2. 自己紹介
    ● Tatsuru WATANABE
    ● id:wtatsuru @tatsuru
    ● サーバ運用@はてな
    ● 最近 AWS 6割くらい

    View full-size slide

  3. Outline
    ● Immutable Infrastracture
    ● 作ってみた
    ● 中身のこと
    – Cluster Management
    – Log Aggregation
    – Metrics/Monitoring

    View full-size slide

  4. Immutable Infrastracture

    View full-size slide

  5. 実際、今どこまでできるんだろう

    View full-size slide

  6. ● Git push
    ● Docker Build
    ● Test
    ● Deploy-ready
    ● Deploy
    作ってみた

    View full-size slide

  7. 詳しくはブログで
    サービス開発合宿を開催しました
    http://developer.hatenastaff.com/entry/2013/12/24/182329

    View full-size slide

  8. 中身
    ● Docker
    ● Mesos
    ● Jenkins
    ● Fluentd
    ● Graphite
    ● Sensu
    ● Dashboard

    View full-size slide

  9. 中身
    ● Docker
    ● Mesos
    ● Jenkins
    ● Fluentd
    ● Graphite
    ● Sensu
    ● Dashboard
    VM
    VM
    Cluster
    Cluster
    Test
    Test
    Log
    Log
    Visualize
    Visualize
    Monitoring
    Monitoring
    Orchestration
    Orchestration

    View full-size slide

  10. 中身
    ● Docker
    ● Mesos
    ● Jenkins
    ● Fluentd
    ● Graphite
    ● Sensu
    ● Dashboard
    VM
    VM
    Cluster
    Cluster
    Test
    Test
    Log
    Log
    Visualize
    Visualize
    Monitoring
    Monitoring
    Orchestration
    Orchestration

    View full-size slide

  11. 詳細略
    ● 仮想化
    – Docker
    – AWS
    – KVM
    ● Test & Deploy
    – Jenkins
    – 差分ビルド
    – serverspec

    View full-size slide

  12. Cluster Management
    Server
    app1
    tcp/8000

    View full-size slide

  13. Cluster Management
    Server
    app1
    tcp/8000
    Server
    app2
    tcp/8001
    app2
    tcp/8001

    View full-size slide

  14. Server
    Cluster Management
    Server
    Server
    Server
    Server Server
    Server
    Server
    Server

    View full-size slide

  15. Cluster Management
    ● 自前
    – 1 Active VM/Host
    – Serf
    ● 全部入り
    – OpenStack
    – Coud Foundry
    ● リソース管理システム
    – Apache Mesos
    – Omega (Google)

    View full-size slide

  16. Cluster Management
    ● Apache Mesos
    – Master/Slave
    – Framework
    – Executor
    ● リソースの提供だけ
    Hindman, Benjamin, et al. "Mesos: A platform for fine-grained resource sharing in the data center."
    Proceedings of the 8th USENIX conference on Networked systems design and implementation. 2011.
    http://mesos.apache.org/documentation/latest/mesos-architecture/

    View full-size slide

  17. Cluster Management
    ● Apache Mesos
    – Master/Slave
    – Framework: Marathon
    – Executor: Mesos-Docker
    Marathon
    POST /v1/apps/start
    { “executor”: “/opt/mesos-docker”,
    “instances”: 2, “cpus”: 1, “mem”: 128,... }
    Server1: 4CPU 4GB
    Server2: 2CPU 8GB
    Server3: 8CPU 7GB
    Task1: Server1 1CPU 128MB
    Server2 1CPU 128MB
    1
    2
    3

    View full-size slide

  18. Cluster Management
    ● 最近の Mesos/Marathon
    – API v2: Docker 対応
    – Deimos: Docker の仕組みを組み込む
    ● 実際どうなの
    – 仕組みは悪くはない。中身見える

    View full-size slide

  19. Log Aggregation
    ● Log Aggregation
    – Fluentd
    – rsyslog, Flume, Kafka,
    ● コンテナ内で Fluentd
    – Supervisor 経由
    docker-+-lxc-start---supervisord-+-fluentd
    |
    |-ruby (sensu_server)
    |-run---/opt/App/start_server
    `-sshd
    Server
    Container
    Application
    Fluentd sshd
    Sensu

    View full-size slide

  20. Log Aggregation
    Docker Log Management Using Fluentd
    http://jasonwilder.com/blog/2014/03/17/docker-log-management-using-fluentd/

    View full-size slide

  21. Log Aggregation
    ● Collection Inside Container
    ● Collection Outside Container
    ● Collection In Separate Container
    Server
    Container Fluentd
    Container Fluentd
    Server
    Container
    Container
    Log
    Volume
    Fluentd
    App
    App
    App
    App
    Server
    Container
    Container
    App
    App
    Container
    Log
    Volume
    Fluentd
    Inside Outside In Separate

    View full-size slide

  22. Metrics
    ● サーバメトリクス
    – サーバが頻繁に入れ替わる:サーバ単位ではダメ
    ● サービスメトリクス
    ● いい感じに集めたい
    – アプリケーションごと
    – デプロイごと

    View full-size slide

  23. Metrics
    ● サーバメトリクス
    – ホストから: cgroup, netstat
    – 他はヘルプにあります http://docs.docker.io/en/latest/articles/runmetrics/
    ● いい感じに集めたい
    – Sensu/Fluentd で送る
    – Graphite: glob + 名前空間
    $ cat /sys/fs/cgroup/lxc/718e*/cpuacct.stat
    user 28707710
    system 6369370
    docker.$host.$app-$rev.$seq.memory
    -> docker.*.$app-*.memory
    -> docker.*.$app-$rev.*.memory

    View full-size slide

  24. Metrics
    ● ログベース解析
    – Latency, Error Ratio
    ● 従来通り
    – フローで解析: Fluentd (fluent-plugin-datacounter etc.)
    – バッチ解析: MongoDBに貯める
    – Kibana, 外部サービスに流す, etc.

    View full-size slide

  25. Metrics
    ● サーバメトリクス:ホスト単位だと運用が難しい
    – Munin, Zabbix
    ● Agent型もあり
    – 台数課金なサービスはつらい: NewRelic
    ● Aggregation が課題

    View full-size slide

  26. Monitoring
    ● 監視
    ● エージェント型
    – Sensu
    – Zabbix
    – NewRelic
    ● 外部監視:いけそう
    – Nagios: Docker API から公開されているポートを取得して監視
    https://github.com/tatsuru/nagios-plugin/blob/master/check_docker_container_exported_port.pl

    View full-size slide

  27. Visualization/Monitoring
    ● エージェント型
    ● ログと同じパターンで運用できそう
    Server
    Container Sensu
    Container Sensu
    Server
    Container
    Container
    App
    App
    App
    App
    Server
    Container
    Container
    App
    App
    Container Sensu
    Sensu

    View full-size slide

  28. Helper Containers?
    ● Ambassador Container よりもう少し高機能
    – http://docs.docker.io/en/latest/use/ambassador_pattern_linking/
    ● 監視、ログ収集 etc.
    Server
    Container Application
    Container Application
    Container Application
    Container Sensu
    Container Fluentd

    View full-size slide

  29. Orchestration
    ● ダッシュボード
    ● マスターデータ
    – サービスとリポジトリの対応
    – リソース状況
    – デプロイ状態

    View full-size slide

  30. Orchestration
    ● アプリのリポジトリ
    ● クラスタにもたせる
    – Serf
    ● 中央で管理する何か
    – AWS Elatic Beanstalk
    – NewRelicでがんばる
    – 自作

    View full-size slide

  31. まとめ
    ● Immutable 環境作ってみた
    ● 課題いろいろ
    – Cluster Management
    – Log Aggregation
    – Metrics/monitoring
    ● どんどん作っていきましょう
    – 教えてください

    View full-size slide

  32. 以上です
    はてなでは、こういうのを一緒に作ってくれる人を募集してます

    View full-size slide