$30 off During Our Annual Pro Sale. View Details »

Habitat 考察/introduction-habitat

Ryo Takaishi
July 25, 2016
1.6k

Habitat 考察/introduction-habitat

Ryo Takaishi

July 25, 2016
Tweet

More Decks by Ryo Takaishi

Transcript

  1. Habitat 考察
    @r_takaishi
    2016-07-25 habitat meetup #1

    View Slide

  2. 自己紹介
     髙石諒(@r_takaishi)
     サーバサイドからインフラあたり
    2016/07/25 habitat meetup #1

    View Slide

  3. 2016/07/25 habitat meetup #1
    ポケモントレーナー
    始めました

    View Slide

  4. 2016/07/25 habitat meetup #1

    View Slide

  5. 今日のテーマ
     HabitatのInfrastructure as Codeにおける位置付け
     Habitatの大きな特徴について紹介・考察
    • package format
    • supervisor
     Demo
    2016/07/25 habitat meetup #1

    View Slide

  6. Habitat?
     2016-06-14に発表されたChef社の新プロダクト
     アプリケーションの実行に特化しているらしい
    • Chef:Datacenter Automation
    • Habitat:Application Automation
     Rustで書かれている!
    2016/07/25 habitat meetup #1

    View Slide

  7. Infrastructure as Codeのカテゴリ
    カテゴリ どういうものか
    Dynamic Infrastrucure Platforms
    • コンピュータリソースをプログラマブルに提供する
    • 例:IaaS(AWS、Azure)、Openstack
    Infrastracture Definition Tools
    • Dynamic Infrastructure Platformsを制御
    • 例:Teraform, Openstack Heat
    Server Configration Tools
    • いわゆるConfiguration Management Tool
    • Puppet, Chef, Ansible
    Infrastructure Services • いわゆるOrchestration(モニタリング、サービスディスカバリ、ソフトウェアデプロイなど)
    • ConsulやFluentd、Docker、Kubernetesなどのツールを組み合わせて実現
    Gosuke Miyashita. Infrastructure as Code のこれまでとこれから. https://speakerdeck.com/mizzy/infrastructure-as-code. 2016
    2016/07/25 habitat meetup #1

    View Slide

  8. Habitatの位置付け
     Infrastructure Servicesを実現する
    • キラーアプリがなかった
    • これまではいろいろなツールを組み合わせて実現
     Habitatはこれをオールインワンで提供しようとしている
    2016/07/25 habitat meetup #1

    View Slide

  9. Habitatの特徴
     package format
    • ソフトウェアデプロイ(アプリのパッケージング)
     supervisor
    • ソフトウェアデプロイ(アプリのデプロイ)
    • サービスディスカバリ
    • モニタリング
    2016/07/25 habitat meetup #1

    View Slide

  10. package format
     独自のパッケージ形式を提供
     シンプルなパッケージ定義
     パッケージのエクスポート
     パッケージのビルド用環境
    2016/07/25 habitat meetup #1

    View Slide

  11. 独自のパッケージ形式
     .hart
    • .tar.xzに固めてデジタル署名
    • ed25519(エドワーズ曲線電子署名アルゴリズム)を使用しているらしい
     言語非依存
    • javaでもrubyでも全て.hart形式
     OSのパッケージングシステム非依存
    • glibcやgccなども用意されている
    • /hab/pkg下にインストールされる
    2016/07/25 habitat meetup #1

    View Slide

  12. シンプルなパッケージ定義
     plan.sh
    • パッケージ共通の設定
    • ビルドやインストールの方法
    • アプリの実行方法(外部ファイルに書くことも可能)
     default.toml
    • アプリ固有の設定についてのデフォルト値を書く
    2016/07/25 habitat meetup #1

    View Slide

  13. パッケージのエクスポート
     Docker
     ACI(Application Container Image)
     mesos
     tar
    2016/07/25 habitat meetup #1

    View Slide

  14. パッケージのビルド環境(studio)
     サンドボックス
    • Linux:chroot
    • macOS:Docker
     ダウンロードしてきたパッケージをキャッシュ
    2016/07/25 habitat meetup #1

    View Slide

  15. 2016/07/25 habitat meetup #1
    depot
    upload
    install
    install
    docker
    image
    export
    supervisor
    app
    start
    studio(chroot)
    .hart
    build
    Docker
    app
    run
    storage
    development production

    View Slide

  16. package format
     独自のパッケージ管理システムを提供
     パッケージはHabitat以外のプラットフォームでも動かせる
    2016/07/25 habitat meetup #1

    View Slide

  17. supervisor
     アプリの実行&監視、設定変更
     クラスタを構築し、他のsupervisorと連携
     HTTP APIを提供
    2016/07/25 habitat meetup #1

    View Slide

  18. アプリの実行&監視、設定変更
     アプリをデーモン化する
     起動時にアプリの設定を生成する
    • default.tomlと起動時に渡す環境変数を使う
    • 設定ファイルはテンプレート化されている(Handlebars)
     起動しているアプリの設定を変更する
    • 設定ファイルを書き換えてプロセスを再起動する
    2016/07/25 habitat meetup #1

    View Slide

  19. アプリの実行&監視、設定変更
    PostgreSQL
    Rails App Rails App Rails App
    Nginx
    2016/07/25 habitat meetup #1

    View Slide

  20. アプリの実行&監視、設定変更
    2016/07/25 habitat meetup #1
    Internet
    node_1
    PostgreSQL
    node_2
    Rails App
    node_3
    Rails App
    node_4
    Rails App
    node_5
    Nginx
    .11 .12 .13 .14 .15
    NATネットワーク
    192.168.33.0/24
    VirtualBox

    View Slide

  21. アプリの実行&監視、設定変更
    PostgreSQL
    $ hab start core/postgresql
    hab-sup
    postmaster
    2016/07/25 habitat meetup #1

    View Slide

  22. クラスタを構築し、他のsupervisorと連携
     Consulやetcdのようなクラスタを構築し、他ノードと連携する
    • クラスタ内のRailsアプリが何ノードいるのか
    • クラスタ内のRailsアプリの全ノードの設定を変更する
     起動時の設定生成用パラメタとしてクラスタの情報が使える
    • DBのレプリケーション設定でマスターがどのノードか
    • ロードバランサの宛先IPアドレスは何か
    2016/07/25 habitat meetup #1

    View Slide

  23. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App
    $ hab start core/ruby-rails-sample --peer 192.168.33.11 ¥
    --bind database:postgresql.default
    bindしたDBに接続
    2016/07/25 habitat meetup #1

    View Slide

  24. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App
    $ hab start core/ruby-rails-sample --peer 192.168.33.11 ¥
    --bind database:postgresql.default
    bindしたDBに接続
    2016/07/25 habitat meetup #1
    database.yml
    production:
    <<: *default
    database: {{cfg.database_name}}
    username: {{cfg.database_username}}
    password: {{cfg.database_password}}
    {{~#if bind.has_database}}
    {{~#each bind.database.members}}
    host: {{ip}}
    port: {{port}}
    {{~/each}}
    {{~else}}
    host: {{cfg.database_host}}
    port: {{cfg.database_port}}
    {{~/if}}

    View Slide

  25. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App
    $ hab config apply --peer 192.168.33.11 ruby-rails-sample.default 2 config.toml
    2016/07/25 habitat meetup #1
    新しい設定をクラスタ内のRails Appに反映

    View Slide

  26. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App
    Nginx
    $ hab start r_takaishi/nginx --peer 192.168.33.11 ¥
    --bind app:ruby-rails-sample.default
    bindしたRails Appにルーティング
    2016/07/25 habitat meetup #1

    View Slide

  27. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App
    Nginx
    $ hab start r_takaishi/nginx --peer 192.168.33.11 ¥
    --bind app:ruby-rails-sample.default
    bindしたRails Appにルーティング
    2016/07/25 habitat meetup #1
    nginx.conf
    upstream app {
    server 192.168.33.12:3000;
    server 192.168.33.13:3000;
    }

    View Slide

  28. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App Rails App
    Nginx
    2016/07/25 habitat meetup #1
    $ hab start core/ruby-rails-sample --peer 192.168.33.11 ¥
    --bind database:postgresql.default
    設定更新&反映

    View Slide

  29. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App Rails App
    Nginx
    2016/07/25 habitat meetup #1
    $ hab start core/ruby-rails-sample --peer 192.168.33.10 ¥
    --bind database:postgresql.default
    nginx.conf
    upstream app {
    server 192.168.33.12:3000;
    server 192.168.33.13:3000;
    server 192.168.33.14:3000;
    }
    設定更新&反映

    View Slide

  30. クラスタを構築し、他のsupervisorと連携
    PostgreSQL
    Rails App Rails App Rails App
    Nginx
    2016/07/25 habitat meetup #1
    $ hab start core/ruby-rails-sample --peer 192.168.33.10 ¥
    --bind database:postgresql.default
    upstream app {
    {{~#if bind.has_app}}
    {{~#each bind.app.members}}
    {{~if alive}}
    server {{ip}}:3000;
    {{~/if}}
    {{~/each}}
    {{~/if}}
    }
    設定更新&反映

    View Slide

  31. supervisor
     プロセスの状態とアプリの設定を一括管理できる
     スーパーバイザがクラスタリング機能を持っている
    • クラスタに変化があった時の設定変更が楽にできそう
    2016/07/25 habitat meetup #1

    View Slide

  32. DEMO
    2016/07/25 habitat meetup #1

    View Slide

  33. PostgreSQL
    Rails App Rails App Rails App
    Nginx
    2016/07/25 habitat meetup #1

    View Slide

  34. 2016/07/25 habitat meetup #1
    Internet
    node_1
    PostgreSQL
    node_2
    Rails App
    node_3
    Rails App
    node_4
    Rails App
    node_5
    Nginx
    .11 .12 .13 .14 .15
    NATネットワーク
    192.168.33.0/24
    VirtualBox

    View Slide

  35. まとめ
     Infrastrusture Services(オーケストレーション)に特化
     独自パッケージ管理システムを持ち、ディストリビューションに
    依存しない
     アプリの実行、監視、クラスタ内の設定変更などを一元管理
    2016/07/25 habitat meetup #1

    View Slide

  36. 2016/07/25 habitat meetup #1

    View Slide