boshで始めるimmutable infrastructure

42
BOSHで始める Immutable Infrastructure 岩嵜 雄大 @ i_yudai NTT Laboratory Software Innovation Center 2013-11-29

Upload: iyudai

Post on 15-Jan-2015

2.814 views

Category:

Technology


6 download

DESCRIPTION

分散環境の構築に特化した環境構成ツールBOSHをつかってImmutable Infrastructureを実践するには。

TRANSCRIPT

Page 1: BOSHで始めるImmutable Infrastructure

BOSHで始める

Immutable Infrastructure

岩嵜 雄大 @ i_yudai

NTT Laboratory

Software Innovation Center

2013-11-29

Page 2: BOSHで始めるImmutable Infrastructure

Twitter: https://twitter.com/i_yudai

Cloud Foundryの運用面を主に担当

– Nise BOSH – cf_nise_installer – cf_aio_installer – 現在はBOSHのCloudStack対応を主に担当

自己紹介

Page 3: BOSHで始めるImmutable Infrastructure

Immutable Infrastructureの概要

– BlueGreen Deployment

BOSHが可能にしてくれること

Cloud Foundryとの違い

BOSHの課題

発表の内容

3

Page 4: BOSHで始めるImmutable Infrastructure

Immutable Infrastructureの概要

動いている環境はそのままに 新しい環境に切り替えよう

Page 5: BOSHで始めるImmutable Infrastructure

既存環境

既存の環境を

壊さないように

新機能はそっと乗せる

昔の更新作業

既存の機能

新しい機能

差分更新と新規構築で別手順が必要 環境ごとに必死にテストをして最後はお祈り

Page 6: BOSHで始めるImmutable Infrastructure

継ぎ足し継ぎ足し作られた秘伝の環境はしばしば爆発する

Page 7: BOSHで始めるImmutable Infrastructure

既存環境

既存環境を壊さないように

環境構成ツールが気を使っ

てくれるようになった

最近の更新作業

既存の機能

新しい機能

構築手順も一本化された Chef、Puppet、etc.

Page 8: BOSHで始めるImmutable Infrastructure

Photo by State Farm (http://www.flickr.com/photos/statefarm/10994875346/)

Page 9: BOSHで始めるImmutable Infrastructure

既存環境

Immutable Infrastructureでの更新作業

既存の機能

新規環境

既存の機能

新しい機能 そのまま

常に新しい環境を構築する(強制)

Page 10: BOSHで始めるImmutable Infrastructure

Photo by Chika Watanabe (http://www.flickr.com/photos/chikawatanabe/192112067/)

Page 11: BOSHで始めるImmutable Infrastructure

BlueGreen Deployment

既存環境

既存の機能

新規環境

既存の機能

新しい機能 さわらない

ルーター ロードバランサー

切り替え

Page 12: BOSHで始めるImmutable Infrastructure

新環境がダメそうな場合も切り戻しがしやすい

Photo by 松林 L(http://www.flickr.com/photos/axio/5577620081/)

Page 13: BOSHで始めるImmutable Infrastructure

でも大変じゃないの?

Photo by Tsahi Levent-Levi (http://www.flickr.com/photos/axio/5577620081/)

Page 14: BOSHで始めるImmutable Infrastructure

BOSHが可能にしてくれること

環境のライフサイクルマネージメント

Page 15: BOSHで始めるImmutable Infrastructure

分散環境構成ツール

–最初はCloud Foundryの構成用に作られた

–ほかの分散システム構築にも使える

環境構築に必要な作業を全てCLIで制御

– VMのライフサイクルマネジメント

•作成・削除・監視・etc.

–ソースコードの保存・コンパイル・配布

–環境の追加・更新・削除

BOSHとはなにか

15

Page 16: BOSHで始めるImmutable Infrastructure

BOSHの簡単な仕組み

AWS、OpenStack、Linux コンテナ (CloudStack、Google Cloud Platform)

BOSH

ソースコード 構成情報

環境C

CLI

環境B

環境A

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM生成 バイナリ配布 設定適用

構成情報をコピーするだけで 別環境をゼロから構築できる

Page 17: BOSHで始めるImmutable Infrastructure

BOSHの簡単な仕組み

AWS、OpenStack、Linux コンテナ (CloudStack、Google Cloud Platform)

BOSH

ソースコード 構成情報

環境C

CLI

環境B

環境A

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM VM VM VM

VM生成 バイナリ配布 設定適用

構成情報をコピーするだけで 別環境をゼロから構築できる

IaaSの力を借りて

BlueGreen Deployment

Page 18: BOSHで始めるImmutable Infrastructure

Stemcell

– ベースとなるVMイメージ

Release

– ソースコードをまとめたGitレポジトリ

Deployment

– 個別の環境の構成情報

• Manifestファイル

3つの概念

VM

Stemcell

Job A

Package A

Package B

Package C

Agent

Release

Page 19: BOSHで始めるImmutable Infrastructure

最低限のライブラリとツールが

入ったVMイメージ

– Stemcell は幹細胞という意味

– Ubuntuベース(CentOSも開発中) • 後述の理由によりディストリビューションはあまり関係ない

BOSH Agentも含まれている

– 設定適用などを行うプログラム

– Monitも同梱

ファイルとして配布されている

– AWSではAMI

Stemcell

VM

Stemcell

Job A

Package A

Package B

Package C

Agent

Release

Page 20: BOSHで始めるImmutable Infrastructure

ソースコードをまとめたリポジトリ

– Gitで管理すること前提

– リリース番号管理も可能

Package:

– ソースコードのファイルリスト

– パッケージングスクリプト

Job:

– Packageのリスト

– 設定ファイルのテンプレート(ERB)

• Deploy時にManifestの値が代入される

– 起動スクリプト

• MonitがStartするスクリプト

Release

VM

Stemcell

Job A

Package A

Package B

Package C

Agent

Release

Page 21: BOSHで始めるImmutable Infrastructure

個別の環境と構成情報

– Deployment Manifestと紐付いている

Deployment単位で操作する

– 構築・削除・更新

複数Releaseの混載も可能

設定項目の例:

– 環境名

– 使用するReleaseとStemcellのバージョン

– Jobごとのリリース量(VMサイズ、数)

– ネットワーク設定(セキュリティグループ、Floating IP)

– Jobのテンプレートファイルに代入する値

Deployment

環境A

VM VM VM VM

VM VM VM VM

VM VM VM VM

Manifest B

環境B

VM VM VM VM

VM VM VM VM

VM VM VM VM

Manifest A

Page 22: BOSHで始めるImmutable Infrastructure

Getting deployment properties from director... Unable to get properties list from director, trying without it... Compiling deployment manifest... Cannot get current deployment information from director, possibly a new deployment Please review all changes carefully Deploying `blue.yml' to `firstbosh' (type 'yes' to continue): yes Director task 6 Preparing deployment binding deployment (00:00:00) binding releases (00:00:00) binding existing deployment (00:00:00) binding resource pools (00:00:00) binding stemcells (00:00:00) binding templates (00:00:00) binding properties (00:00:00) binding unallocated VMs (00:00:00) binding instance networks (00:00:00) Done 9/9 00:00:00 Preparing package compilation Preparing DNS binding DNS (00:00:00) Done 1/1 00:00:00 Creating bound missing VMs common/3 (00:00:47) common/1 (00:00:52) common/0 (00:00:56) common/2 (00:01:02) Done 4/4 00:01:02 Binding instance VMs mysql/0 (00:00:01) nginx/0 (00:00:01) nfs/0 (00:00:01) wordpress/0 (00:00:01) Done 4/4 00:00:01 Preparing configuration binding configuration (00:00:00) Done 1/1 00:00:00 Updating job mysql mysql/0 (canary) (00:01:19) Done 1/1 00:01:19 Updating job nfs nfs/0 (canary) (00:00:38) Done 1/1 00:00:38 Updating job wordpress wordpress/0 (canary) (00:01:42) Done 1/1 00:01:42 Updating job nginx nginx/0 (canary) (00:00:25) Done 1/1 00:00:25 Task 6 done Started 2013-11-28 17:32:55 UTC Finished 2013-11-28 17:38:02 UTC Duration 00:05:07 Deployed `blue.yml' to `firstbosh'

環境構築のライフサイクル

# Stemcell をアップロードしておく

bosh upload stemcell bosh-stemcell-3-cloudstack-kvm-ubuntu.tgz # ソースコードが準備出来たらリリース番号を振る # リリース番号を振るとリリース情報ファイルが作られる

bosh create release --final # ソースコードをアップロード # リリース情報ファイルを与えると対応するソースコードがアップロードされる

bosh upload release releases/wordpress-3.yml # 使用するマニフェストを指定して環境切り替え # 適宜マニフェストファイルを環境に合わせて編集しておく

bosh deployment ~/deployments/blue.yml # 環境を構成

bosh deploy

開発

デプロイ

Page 23: BOSHで始めるImmutable Infrastructure

新しい環境を増やす

# マニフェストをコピーして編集

cp ~/deployments/{blue,green}.yml vi ~/deployments/green.yml # 環境切り替え

bosh deployment ~/deployments/green.yml # 環境を構成

bosh deploy

--- name: green director_uuid: 12de20b6-56e1-40d1-3939 release: name: wordpress version: latest

Page 24: BOSHで始めるImmutable Infrastructure

配備済みの環境を確認

bosh deployments +-------+-------------+------------------------------+ | Name | Release(s) | Stemcell(s) | +-------+-------------+------------------------------+ | blue | wordpress/3 | bosh-cloudstack-kvm-ubuntu/3 | +-------+-------------+------------------------------+ | green | wordpress/3 | bosh-cloudstack-kvm-ubuntu/3 | +-------+-------------+------------------------------+ Deployments total: 2

Page 25: BOSHで始めるImmutable Infrastructure

配備済みの環境を削除

bosh delete deployment blue

Page 26: BOSHで始めるImmutable Infrastructure

Photo by Jessica Merz (http://www.flickr.com/photos/94953676@N00/61994800/)

簡単

Page 27: BOSHで始めるImmutable Infrastructure

MariaDB

– https://github.com/cloudfoundry-community/mariadb-boshrelease

ZooKeeper

– https://github.com/cloudfoundry-community/zookeeper-boshrelease

SkyDNS

– https://github.com/cloudfoundry-community/skydns-boshrelease

Redis

– https://github.com/cloudfoundry-community/redis-boshrelease

Riak

– https://github.com/BrianMMcClain/riak-release

参考)一般公開されているリリース

Page 28: BOSHで始めるImmutable Infrastructure

Cloud Foundryとの違い

どこまで自分で管理するか

Page 29: BOSHで始めるImmutable Infrastructure

PaaSはミドルウェア層までがマネージド

カスタマイズ性と管理コスト

29

PaaS

IaaS

仮想マシン 仮想マシン

物理マシン

ハイパーバイザ

データベース

仮想マシン 仮想マシン

物理マシン

ハイパーバイザ

ウェブサーバ

フレームワーク

ロードバランサ

アプリケーション・サービス

フレームワーク

ウェブサーバ

OS OS OS OS

※Cloud FoundryでもBlueGreen Deploymnetが可能

Page 30: BOSHで始めるImmutable Infrastructure

BOSH

BOSHほとんど何も提供しない

カスタマイズ性と管理コスト

30

IaaS

仮想マシン 仮想マシン

物理マシン

ハイパーバイザ

データベース

仮想マシン 仮想マシン

物理マシン

ハイパーバイザ

ウェブサーバ

フレームワーク

ロードバランサ

アプリケーション・サービス

フレームワーク

ウェブサーバ

OS OS OS OS

Page 31: BOSHで始めるImmutable Infrastructure

利点

–フルカスタマイズ出来る自由度

欠点

–フルカスタマイズしないといけない

利点と欠点

Page 32: BOSHで始めるImmutable Infrastructure

BOSHの課題

BlueGreen Deploymentは銀の弾丸か

Page 33: BOSHで始めるImmutable Infrastructure

ステートフルな環境は不揮発データのコ

ピーが必要になってしまう

–例)分散データベース、分散ストレージ

対応策

–ステートフルな部分とそれ以外を切り分ける

• Application層とDB層を分けて構成する

–ステートフル環境はMutableを受け入れる

ステートフルな環境のBGDは難しい

33

Page 34: BOSHで始めるImmutable Infrastructure

例)DBスキーマ変更を伴うApp層の更新

– GreenとBlueが共存できないケース

対応策

–一時的にMuttableな更新を受け入れる?

ステートフルな部分に引きずられる

Page 35: BOSHで始めるImmutable Infrastructure

Deploymentのアップデートも可能

– 擬似的なImmutable更新

– ルールを守らないと爆発する

ルール自体は難しくない

– /var/vcapディレクトリ内で完結させる

• ステートフルなデータは全て /var/vcap/store に保存

• OSが提供するパッケージ管理システムは使用しない

BOSHはMutableな更新も出来る

Page 36: BOSHで始めるImmutable Infrastructure

BOSH自体の構成ノウハウが必要

– Full BOSHはそれ自体が分散システム

– BOSH-liteの登場で光明が差す

• Vagrantで1VM BOSHを簡単に作れる

リリース管理に慣れる必要あり

全体的にヘビー

情報が少ない

BOSH自体がまだまだ進化中

Page 37: BOSHで始めるImmutable Infrastructure

Immutable Infrastructureで安心感アップ

– BlueGreen Deploymentが大事

–でもいますぐ全てをImmutableにするのは無理

BOSHはそのためのお手伝いをしてくれる

–環境のライフサイクル管理が比較的簡単

–フルカスタマイズ派におすすめ

まとめ

Page 38: BOSHで始めるImmutable Infrastructure

補足資料

Page 39: BOSHで始めるImmutable Infrastructure

Packageの展開先

– /var/vcap/packages/:package_name

– 複数Jobで共有される

Jobの展開先

– /var/vcap/jobs/:job_name

揮発性データの保存

– /var/vcap/data

不揮発(ステートフル)データの保存

– /var/vcap/store

– 更新時にVM再生成が行われた場合も引き継がれる

ディレクトリルール

39

更新時には 新しいバージョンで 置き換えられる (擬似Immutable)

Page 40: BOSHで始めるImmutable Infrastructure

BOSHはソースコードのコンパイルも自動で行う

– 複数VMで並列コンパイル

– Bundleなどの処理もここで行う事ができる

パッケージングスクリプトはただのシェルスクリプト

初回のみ実行され結果がキャッシュされる

– パッケージに変更があると自動で再実行される

各VMに配布されるのはパッケージング済みのファイル

– パッケージ名に対応したディレクトリに展開されるだけ

– OS環境が汚れない

パッケージング

Page 41: BOSHで始めるImmutable Infrastructure

Monitが起動スクリプトを実行

–単なるシェルスクリプト

–大抵はパッケージのバイナリを実行する

設定ファイル

– ERBテンプレートから自動生成される

•代入値はDeployment Manifestに書く

• VMごとの固有値などは自動で与えられる

–ジョブ名に対応した位置に保存されている

•起動スクリプト内でバイナリ実行時に渡すのが普通

ジョブの起動

Page 42: BOSHで始めるImmutable Infrastructure

BOSHではOSの提供するパッケージは使用しない

– aptやyumを使用すると更新時に爆発する

全て自分でPackageとして管理する

– 勝手にバージョンが更新されないので安全ではある

– セキュリティフィックスも自分で行う

– Cloud FoundryはPostgresやRubyも独自に管理している

完全自前主義