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.4k
Habitat 考察/introduction-habitat
Ryo Takaishi
July 25, 2016
Tweet
Share
More Decks by Ryo Takaishi
See All by Ryo Takaishi
入門!ClusterAPI 〜 k8s クラスターも k8s API で管理したい 〜 / k8s_meetup_31
takaishi
3
3.2k
CloudNativeへの道 リーダーシップとフォロワーシップ / 201911-cndjp13
takaishi
2
680
ClusterAPI v1alpha1 → v1alpha2 / k8s_meetup_23
takaishi
1
1.2k
実録!CloudNativeを 目指した230日 / cloud-native-days-tokyo-2019
takaishi
2
1.9k
Consul Connect and Kubernetes Integration / cloud native meetup tokyo 7
takaishi
2
1.8k
ソフトウェアエンジニア の楽しみ / 2018-pepaboudon
takaishi
0
140
Ansible、Terraform、Packerで作るSelf-Hosted Kubernetes / JKD1812
takaishi
5
3.1k
Knative Serving 入門 / kubernetes meetup 13
takaishi
2
800
大規模ウェブサービスの成長に伴うデプロイ手法の変化から見る技術と文化 / openstackdays2018
takaishi
8
980
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
58
3.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
It's Worth the Effort
3n
172
25k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.2k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.4k
In The Pink: A Labor of Love
frogandcode
131
21k
We Have a Design System, Now What?
morganepeng
35
3k
The Mythical Team-Month
searls
209
39k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
Bash Introduction
62gerente
597
210k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
13k
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