Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Habitat 考察/introduction-habitat
Search
Ryo Takaishi
July 25, 2016
2.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Habitat 考察/introduction-habitat
Ryo Takaishi
July 25, 2016
More Decks by Ryo Takaishi
See All by Ryo Takaishi
通知再考 ~ 最高のアラート通知を今改めて考える ~
takaishi
0
510
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
takaishi
0
460
スロークエリとの戦いの軌跡2024 / ゆるSRE勉強会 #10
takaishi
1
900
AWSを使ったカンファレンスの 配信アーキテクチャ - 吉祥寺.pm37
takaishi
2
630
どうやればインシデント対応能力を鍛えられるのか? / SRE Kaigi 2025
takaishi
13
13k
Podcastを3年半続ける技術と得た物 / ya8-2024
takaishi
5
2.1k
入門!ClusterAPI 〜 k8s クラスターも k8s API で管理したい 〜 / k8s_meetup_31
takaishi
3
4.8k
CloudNativeへの道 リーダーシップとフォロワーシップ / 201911-cndjp13
takaishi
2
1k
ClusterAPI v1alpha1 → v1alpha2 / k8s_meetup_23
takaishi
1
1.7k
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Marketing to machines
jonoalderson
1
5.5k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
New Earth Scene 8
popppiees
3
2.4k
Between Models and Reality
mayunak
4
350
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Producing Creativity
orderedlist
PRO
348
40k
A designer walks into a library…
pauljervisheath
211
24k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
620
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