Habitat 考察/introduction-habitat

C84357a21083c81c5ccd5550422abc8d?s=47 Ryo Takaishi
July 25, 2016
1.1k

Habitat 考察/introduction-habitat

C84357a21083c81c5ccd5550422abc8d?s=128

Ryo Takaishi

July 25, 2016
Tweet

Transcript

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

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

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

  4. 2016/07/25 habitat meetup #1

  5. 今日のテーマ  HabitatのInfrastructure as Codeにおける位置付け  Habitatの大きな特徴について紹介・考察 • package format

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

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

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

    • サービスディスカバリ • モニタリング 2016/07/25 habitat meetup #1
  10. package format  独自のパッケージ形式を提供  シンプルなパッケージ定義  パッケージのエクスポート  パッケージのビルド用環境

    2016/07/25 habitat meetup #1
  11. 独自のパッケージ形式  .hart • .tar.xzに固めてデジタル署名 • ed25519(エドワーズ曲線電子署名アルゴリズム)を使用しているらしい  言語非依存 •

    javaでもrubyでも全て.hart形式  OSのパッケージングシステム非依存 • glibcやgccなども用意されている • /hab/pkg下にインストールされる 2016/07/25 habitat meetup #1
  12. シンプルなパッケージ定義  plan.sh • パッケージ共通の設定 • ビルドやインストールの方法 • アプリの実行方法(外部ファイルに書くことも可能) 

    default.toml • アプリ固有の設定についてのデフォルト値を書く 2016/07/25 habitat meetup #1
  13. パッケージのエクスポート  Docker  ACI(Application Container Image)  mesos 

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

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

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

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

    起動しているアプリの設定を変更する • 設定ファイルを書き換えてプロセスを再起動する 2016/07/25 habitat meetup #1
  19. アプリの実行&監視、設定変更 PostgreSQL Rails App Rails App Rails App Nginx 2016/07/25

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

    meetup #1
  22. クラスタを構築し、他のsupervisorと連携  Consulやetcdのようなクラスタを構築し、他ノードと連携する • クラスタ内のRailsアプリが何ノードいるのか • クラスタ内のRailsアプリの全ノードの設定を変更する  起動時の設定生成用パラメタとしてクラスタの情報が使える •

    DBのレプリケーション設定でマスターがどのノードか • ロードバランサの宛先IPアドレスは何か 2016/07/25 habitat meetup #1
  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
  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}}
  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に反映
  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
  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; }
  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 設定更新&反映
  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; } 設定更新&反映
  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}} } 設定更新&反映
  31. supervisor  プロセスの状態とアプリの設定を一括管理できる  スーパーバイザがクラスタリング機能を持っている • クラスタに変化があった時の設定変更が楽にできそう 2016/07/25 habitat meetup

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

  33. PostgreSQL Rails App Rails App Rails App Nginx 2016/07/25 habitat

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

    habitat meetup #1
  36. 2016/07/25 habitat meetup #1