Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Habitat 考察/introduction-habitat
Ryo Takaishi
July 25, 2016
2
1.2k
Habitat 考察/introduction-habitat
Ryo Takaishi
July 25, 2016
Tweet
Share
More Decks by Ryo Takaishi
See All by Ryo Takaishi
takaishi
2
2.2k
takaishi
2
590
takaishi
1
920
takaishi
2
1.6k
takaishi
2
1.5k
takaishi
0
110
takaishi
5
2.4k
takaishi
2
590
takaishi
8
900
Featured
See All Featured
bryan
100
11k
myddelton
109
11k
denniskardys
220
120k
samanthasiow
56
6.3k
notwaldorf
13
1.5k
addyosmani
494
110k
hatefulcrawdad
257
17k
chriscoyier
684
180k
iamctodd
17
1.8k
matthewcrist
73
7.5k
addyosmani
310
21k
gr2m
83
11k
Transcript
Habitat 考察 @r_takaishi 2016-07-25 habitat meetup #1
自己紹介 髙石諒(@r_takaishi) サーバサイドからインフラあたり 2016/07/25 habitat meetup #1
2016/07/25 habitat meetup #1 ポケモントレーナー 始めました
2016/07/25 habitat meetup #1
今日のテーマ HabitatのInfrastructure as Codeにおける位置付け Habitatの大きな特徴について紹介・考察 • package format
• supervisor Demo 2016/07/25 habitat meetup #1
Habitat? 2016-06-14に発表されたChef社の新プロダクト アプリケーションの実行に特化しているらしい • Chef:Datacenter Automation • Habitat:Application
Automation Rustで書かれている! 2016/07/25 habitat meetup #1
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
Habitatの位置付け Infrastructure Servicesを実現する • キラーアプリがなかった • これまではいろいろなツールを組み合わせて実現 Habitatはこれをオールインワンで提供しようとしている
2016/07/25 habitat meetup #1
Habitatの特徴 package format • ソフトウェアデプロイ(アプリのパッケージング) supervisor • ソフトウェアデプロイ(アプリのデプロイ)
• サービスディスカバリ • モニタリング 2016/07/25 habitat meetup #1
package format 独自のパッケージ形式を提供 シンプルなパッケージ定義 パッケージのエクスポート パッケージのビルド用環境
2016/07/25 habitat meetup #1
独自のパッケージ形式 .hart • .tar.xzに固めてデジタル署名 • ed25519(エドワーズ曲線電子署名アルゴリズム)を使用しているらしい 言語非依存 •
javaでもrubyでも全て.hart形式 OSのパッケージングシステム非依存 • glibcやgccなども用意されている • /hab/pkg下にインストールされる 2016/07/25 habitat meetup #1
シンプルなパッケージ定義 plan.sh • パッケージ共通の設定 • ビルドやインストールの方法 • アプリの実行方法(外部ファイルに書くことも可能)
default.toml • アプリ固有の設定についてのデフォルト値を書く 2016/07/25 habitat meetup #1
パッケージのエクスポート Docker ACI(Application Container Image) mesos
tar 2016/07/25 habitat meetup #1
パッケージのビルド環境(studio) サンドボックス • Linux:chroot • macOS:Docker ダウンロードしてきたパッケージをキャッシュ 2016/07/25
habitat meetup #1
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
package format 独自のパッケージ管理システムを提供 パッケージはHabitat以外のプラットフォームでも動かせる 2016/07/25 habitat meetup #1
supervisor アプリの実行&監視、設定変更 クラスタを構築し、他のsupervisorと連携 HTTP APIを提供 2016/07/25 habitat
meetup #1
アプリの実行&監視、設定変更 アプリをデーモン化する 起動時にアプリの設定を生成する • default.tomlと起動時に渡す環境変数を使う • 設定ファイルはテンプレート化されている(Handlebars)
起動しているアプリの設定を変更する • 設定ファイルを書き換えてプロセスを再起動する 2016/07/25 habitat meetup #1
アプリの実行&監視、設定変更 PostgreSQL Rails App Rails App Rails App Nginx 2016/07/25
habitat meetup #1
アプリの実行&監視、設定変更 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
アプリの実行&監視、設定変更 PostgreSQL $ hab start core/postgresql hab-sup postmaster 2016/07/25 habitat
meetup #1
クラスタを構築し、他のsupervisorと連携 Consulやetcdのようなクラスタを構築し、他ノードと連携する • クラスタ内のRailsアプリが何ノードいるのか • クラスタ内のRailsアプリの全ノードの設定を変更する 起動時の設定生成用パラメタとしてクラスタの情報が使える •
DBのレプリケーション設定でマスターがどのノードか • ロードバランサの宛先IPアドレスは何か 2016/07/25 habitat meetup #1
クラスタを構築し、他の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
クラスタを構築し、他の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}}
クラスタを構築し、他の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に反映
クラスタを構築し、他の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
クラスタを構築し、他の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; }
クラスタを構築し、他の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 設定更新&反映
クラスタを構築し、他の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; } 設定更新&反映
クラスタを構築し、他の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}} } 設定更新&反映
supervisor プロセスの状態とアプリの設定を一括管理できる スーパーバイザがクラスタリング機能を持っている • クラスタに変化があった時の設定変更が楽にできそう 2016/07/25 habitat meetup
#1
DEMO 2016/07/25 habitat meetup #1
PostgreSQL Rails App Rails App Rails App Nginx 2016/07/25 habitat
meetup #1
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
まとめ Infrastrusture Services(オーケストレーション)に特化 独自パッケージ管理システムを持ち、ディストリビューションに 依存しない アプリの実行、監視、クラスタ内の設定変更などを一元管理 2016/07/25
habitat meetup #1
2016/07/25 habitat meetup #1