Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

2016/07/25 habitat meetup #1

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

アプリの実行&監視、設定変更 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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

クラスタを構築し、他の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

Slide 24

Slide 24 text

クラスタを構築し、他の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}}

Slide 25

Slide 25 text

クラスタを構築し、他の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に反映

Slide 26

Slide 26 text

クラスタを構築し、他の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

Slide 27

Slide 27 text

クラスタを構築し、他の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; }

Slide 28

Slide 28 text

クラスタを構築し、他の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 設定更新&反映

Slide 29

Slide 29 text

クラスタを構築し、他の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; } 設定更新&反映

Slide 30

Slide 30 text

クラスタを構築し、他の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}} } 設定更新&反映

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

DEMO 2016/07/25 habitat meetup #1

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

2016/07/25 habitat meetup #1