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
520
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
takaishi
0
470
スロークエリとの戦いの軌跡2024 / ゆるSRE勉強会 #10
takaishi
1
910
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
Technical Leadership for Architectural Decision Making
baasie
3
440
Scaling GitHub
holman
464
140k
Practical Orchestrator
shlominoach
191
11k
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Statistics for Hackers
jakevdp
799
230k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
57k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Paper Plane (Part 1)
katiecoart
PRO
1
9.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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