すごいBOSHたのしく学ぼう
-
Upload
iyudai -
Category
Technology
-
view
10.745 -
download
0
description
Transcript of すごいBOSHたのしく学ぼう
NTT Software Innovation Center
すごいBOSHたのしく学ぼう
岩嵜 雄大
NTT Software Innovation Center
2012-06-21
NTT Software Innovation Center
もくじ
BOSHとは
BOSHの基礎
BOSH環境の構築
BOSHによるオペレーション
まとめ
2012-06-21 2
NTT Software Innovation Center
もくじ
BOSHとは
BOSHの基礎
BOSH環境の構築
BOSHによるオペレーション
まとめ
2012-06-21 3
NTT Software Innovation Center
BOSHとは
CloudFoundryの環境構築はとても大変
– サーバが増えると何処で何が動いているのか分からなくなる
– 動いてるサービスのバージョン管理も煩雑
BOSHが解決してくれること
– 分散システム全体の構成管理を一元管理
– サービスのバージョンも管理できる
– VMWare謹製なのでCloudFoundryと相性が良い
2012-06-21 4
https://github.com/cloudfoundry/bosh
NTT Software Innovation Center
それ ~ でできるよ
• Puppet
– 細かい作業も出来て素敵
– でもPuppet使って実際に構成管理ツール作るのすごく大変
• Chef
– より新しい
– でもChef使って実際に構成管理ツール作るのすごく大変
• Capistorano
– Capistorano使って実際に構成管理ツール作ったら爆発した!
分散システムの構成管理ツールは前からあるのでは?
車輪の再発名になってませんか?
2012-06-21 5
NTT Software Innovation Center
それ ~ でできるよ
• Puppet
– 大体あってる
– でもPuppet使って実際に構成管理ツール作るのすごく大変
• Chef
– 大体あってる
– でもChef使って実際に構成管理ツール作るのすごく大変
• Capistorano
– Capistorano使って実際に構成管理ツール作ったら爆発した!
分散システムの構成管理システムは前からあるのでは?
車輪の再発名になってませんか?
2012-06-21 6
フレームワーク
Puppet Chef
Capistrano
ロジック
デプロイ 起動・終了
ステータス監視 バージョン管理
問題はココ
NTT Software Innovation Center
それ ~ でできるよ
• Puppet
– 大体あってる
– でもPuppet使って実際に構成管理ツール作るのすごく大変
• Chef
– 大体あってる
– でもChef使って実際に構成管理ツール作るのすごく大変
• Capistorano
– Capistorano使って実際に構成管理ツール作ったら爆発した!
分散システムの構成管理システムは前からあるのでは?
車輪の再発名になってませんか?
2012-06-21 7
フレームワーク
Puppet Chef
Capistrano
ロジック
デプロイ 起動・終了
ステータス監視 バージョン管理
BOSHはロジックを定形化
すぐに使える
NTT Software Innovation Center
それ ~ でできるよ
• Puppet
– 大体あってる
– でもPuppet使って実際に構成管理ツール作るのすごく大変
• Chef
– 大体あってる
– でもChef使って実際に構成管理ツール作るのすごく大変
• Capistorano
– Capistorano使って実際に構成管理ツール作ったら爆発した!
分散システムの構成管理システムは前からあるのでは?
車輪の再発名になってませんか?
2012-06-21 8
フレームワーク
Puppet Chef
Capistrano
ロジック
デプロイ 起動・終了
ステータス監視 バージョン管理
BOSHはロジックを定形化
すぐに使える (環境構築さえ出来れば)
NTT Software Innovation Center
もくじ
BOSHとは
BOSHの基礎
BOSH環境の構築
BOSHによるオペレーション
まとめ
2012-06-21 9
NTT Software Innovation Center
BOSHの基礎
BOSHはそれ自身が複数のシステムからなる分散システム
BOSH DirectorがVMの管理を行う
BOSH CLIを用いてユーザはBOSH Directorに指示を出す
CPIというインターフェース経由でBOSH DirectorはIaaSを操作し、VMの作製や起動を行う (A)
– vShphereとAWSに対応
– OpenStackはPistonが開発中
– CloudStackはCloudBridgeで対応? • https://groups.google.com/a/cloudfoundry.org/group/bosh-dev/browse_thread/thread/5fdec0ace4439d12?pli=1
BOSH AgentはVMにインストールされ、BOSH Directorの指示に従ってサービスなどの操作を行う(B)
2012-06-21 10
https://github.com/cloudfoundry/oss-docs/blob/master/bosh/documentation/documentation.md
NTT Software Innovation Center
Stemcell
StemcellはBOSHが生成するVMの基本イメージ
– 実態はBOSH Agent+etc 入りのUbuntuイメージ
– Stemcell自体は単体では何もサービスを提供できない
– 上にJobをデプロイして使う
– イメージファイルはBlobstoreに保存されている
2012-06-21 11
VM
Stemcell
Job A
Package A
Package B
Package C
Agent
NTT Software Innovation Center
Releases
BOSHが扱うアプリケーションの全体構成
– VMにデプロイする単位=Job
– Jobを構成する各種サービス・プロセス=Package
– バージョンアップごとにReleaseとしてスナップショットを取る • bosh create release するとreleasesディレクトリに保存される
2012-06-21 12
VM
Stemcell
nats (Job)
common (Package)
nats (package)
ruby (package)
Agent
Release
common nats ruby mysql
nats mysql_node
Release
common nats ruby mysql
nats mysql_node
Release
common nats ruby mysql
nats mysql_node
Release 78
common nats ruby mysql
nats mysql_node
Release
NTT Software Innovation Center
Jobs
使用するパッケージとテンプレートの一覧を定義する
– 実態は設定ファイルのみ
– jobsディレクトリを見よ
2012-06-21 13
--- name: acm templates: acm_ctl.erb: bin/acm_ctl acm.yml.erb: config/acm.yml syslog_forwarder.conf.erb: config/syslog_forwarder.conf packages: - libpq - common - ruby - syslog_aggregator - acm
cf-release/jobs/acm/spec
--- <% db = properties.acmdb.databases.find { |db| db.tag == "acm" } %> <% role = properties.acmdb.roles.find { |role| role.tag == "admin" } %> pid: /var/vcap/sys/run/acm/acm.pid name: ACM port: 9090 mbus: nats://<%= properties.nats.user %>:<%= properties.nats.password %>@<%= properties.nats.address %>:<%= properties.nats.port %>/ logging: level: info file: /var/vcap/sys/log/acm/acm.log syslog: vcap.acm db: database: postgres://<%= role.name %>:<%= role.password %>@<%= properties.acmdb.address %>:<%= properties.acmdb.port %>/<%= db.name %> max_connections: 25 pool_timeout: 2000 basic_auth: user: <%= properties.acm.user %> password: <%= properties.acm.password %>
cf-release/jobs/templates/acm.yml.erb
ERB内で Manifestの値が
参照される(後述)
• specファイルにJobが必要とするpackageの一覧を記述する
• templateは設定ファイルなどの生成に利用
NTT Software Innovation Center
Packages
パッケージのコンパイル方法を指定する
– packagesディレクトリを見よ
2012-06-21 14
--- name: acm dependencies: - libpq - ruby files: - acm/Gemfile* - acm/bin/**/* - acm/lib/**/* - acm/db/**/* - acm/vendor/**/* - core/common/**/
cf-release/packages/acm/spec
# abort script on any command that exit with a non zero value set -e cp -a * ${BOSH_INSTALL_TARGET} ( cd ${BOSH_INSTALL_TARGET}/acm bundle_cmd=/var/vcap/packages/ruby/bin/bundle libpq_dir=/var/vcap/packages/libpq $bundle_cmd config build.pg --with-pg-lib=$libpq_dir/lib --with-pg-include=$libpq_dir/include $bundle_cmd install --local --deployment --without development test )
cf-release/packages/acm/packaging
コンパイル時の 依存パッケージ
(運用時ではない)
• packgeはデプロイ時にコンパイルが行われる(キャッシュが無い場合)
• コンパイルはコンパイル用のVMを生成してその上で行われる
• packagingファイルがコンパイルを行うスクリプトとなる
NTT Software Innovation Center
srcとblob
パッケージのソースコードはsrcディレクトリに保存しておく
– gitのサブモジュールでもよい
– 実際はパッチ程度しか置いてない
.tar.gzなどの巨大なファイルはblobsディレクトリに入れる
– releasesが肥大化するのを防ぐ • 他のマシンに環境を構築する場合に便利
– blobs内のファイルはblobstoreにアップロードする • blobstoreの設定は config/final.yml もしくはconfig/private.yml
– ローカル環境にファイルが無い場合、デプロイ時(bosh upload deployment)にblobstoreからダウンロードされる
– cf-releaseではblob.cfblobl.comからファイルがダウンロードされる
2012-06-21 15
--- final_name: appcloud min_cli_version: 0.19.1 blobstore: provider: atmos options: tag: BOSH url: https://blob.cfblob.com uid: bb6a0c89ef4048a8a0f814e25385d1c5/user1 blobstore_options: deprecated
cf-release/config/final.yml
NTT Software Innovation Center
もくじ
BOSHとは
BOSHの基礎
BOSH環境の構築
BOSHによるオペレーション
まとめ
2012-06-21 16
NTT Software Innovation Center
デプロイ作業の流れ
1. ローカルにBOSH CLI環境を構築する
2. ローカル環境にStemcellをダウンロードする
3. リモートのBOSHにStemcellをアップロードする
4. ローカル環境にReleasesを作成(ダウンロード)する
5. リモートのBOSHにReleaseをアップロードする
– 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる
6. 構成を記載したManifestファイルを作る
7. Manifestファイルを使ってデプロイを行う
2012-06-21 17
NTT Software Innovation Center
BOSH CLIのインストール
リモートにあるBOSHを操作するためのコマンドラインインターフェース
– CloudFoundryにおけるVMCのようなもの
– ローカルに環境を作る
インストール方法は公式ドキュメントを見よ – https://github.com/cloudfoundry/oss-docs/blob/master/bosh/documentation/documentation.md
– 「Installing BOSH Command Line Interface」
– Ubuntu10.04で構築するとすんなりインストールできる
2012-06-21 18
# 依存パッケージのインストール
sudo apt-get install git-core build-essential libsqlite3-dev curl ¥
libmysqlclient-dev libxml2-dev libxslt-dev libpq-dev
# 最新版rbenv(Ruby環境構成ツール)の取得
cd ~
git clone git://github.com/sstephenson/rbenv.git .rbenv
# rbenvにパスを通す
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# shimsとautocompletionを有効に
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# ruby1.9.2をダウンロードしてインストール
wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
tar xvfz ruby-1.9.2-p290.tar.gz cd ruby-1.9.2-p290
./configure --prefix=$HOME/.rbenv/versions/1.9.2-p290
make
make install
# dotfileの再読み込み
source ~/.bash_profile
# デフォルトのRubyを1.9.2に設定
rbenv global 1.9.2-p290
# gemとbundlerをアップデート・インストール(rehash忘れずに)
rbenv rehash
gem update –system
gem install bundler
rbenv rehash
# bosh_cliをインストール
gem install bosh_cli
rbenv rehash
# 動いているか確認
bosh --version
NTT Software Innovation Center
デプロイ作業の流れ
1. ローカルにBOSH CLI環境を構築する
2. ローカル環境にStemcellをダウンロードする
3. ローカル環境にReleasesを作成(作成)する
4. リモートのBOSHにStemcellをアップロードする
5. リモートのBOSHにReleaseをアップロードする
– 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる
6. 構成を記載したManifestファイルを作る
7. Manifestファイルを使ってデプロイを行う
2012-06-21 19
あ、BOSH環境作らないと
NTT Software Innovation Center
Micro BOSHとBOSH Deployer
Micro BOSHとは
– BOSH自体が分散システムなので、BOSHのデプロイにはBOSHが必要(無限ループ)
– 単体構成(全部入り)のBOSHであるMicro BOSHでブートストラップする • Micro BOSHで十分使い物になる
BOSH Deployerとは
– Micro BOSHをデプロイするためのBOSH CLIの拡張 • Micro BOSHは少し特殊なので専用の拡張が必要
• 専用のStemcellをデプロイするだけで動作する
– bosh micro コマンドでMicro BOSHを扱う
BOSH Deployerのインストール
– BOSHリポジトリ内のファイルをinstall
2012-06-21 20
git clone https://github.com/cloudfoundry/bosh.git
cd bosh/deployer
bundle install
rake install
NTT Software Innovation Center
デプロイ作業の流れ
1. ローカルにBOSH CLI環境を構築する
2. ローカル環境にStemcellをダウンロードする
3. ローカル環境にReleasesを作成(作成)する
4. リモートのBOSHにStemcellをアップロードする
5. リモートのBOSHにReleaseをアップロードする
– 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる
6. 構成を記載したManifestファイルを作る
7. Manifestファイルを使ってデプロイを行う
2012-06-21 21
ここから先は IaaS が vSphare の場合です
AWSでは設定が異なります
NTT Software Innovation Center
Micro BOSHのデプロイ
設定ファイルを書いてデプロイを実行する
– 設定に沿って自動的にVMが新規作成され、Micro BOSHが起動する
2012-06-21 22
--- name: micro01 (デプロイ名:任意) network: (Micro Boshを動かすネットワークの設定) ip: 192.168.12.132 (Micro BOSHのサーバIP)
netmask: 255.255.252.0 gateway: 192.168.12.1 dns: - 192.168.3.1 cloud_properties: (vCenter上でどのネットワークにつなげるか)
name: VM Network cloud: plugin: vsphere (vSphereを使うという宣言)
properties: agent: ntp: - 192.168.3.1 vcenters: (デプロイ先のvCenterの設定)
- host: 192.168.15.1 user: Administrator password: ****** datacenters: - name: dell1 (データセンター名)
vm_folder: bosh_vm template_folder: bosh_template disk_path: bosh_disk datastore_pattern: netstor2 persistent_datastore_pattern: netstor2 allow_mixed_datastores: true clusters: - BoshTest (オプション)
# Micro BOSHのデプロイ設定用ディレクトリを作る
mkdir ~/deployments; cd ~/deployments mkdir micro01; cd micro01 vi micro_bosh.yml # 専用のStemcellをダウンロードしてくる
mkdir ~/stemcells; cd ~/stemcells bosh download public stemcell ¥ micro-bosh-stemcell-0.1.0.tgz # デプロイを実行(新しいVMが自動で作成される)
cd ~/deployments bosh micro deployment micro01 bosh micro deploy ¥ ~/stemcells/micro-bosh-stemcell-0.1.0.tgz
vCenter上で 設定に合わせてフォルダを作る
NTT Software Innovation Center
Micro BOSHのデプロイ
動いているか確認
以降ではこのMicro BOSH環境を単なるBOSH環境として扱う
– bosh(not bosh micro)コマンドを使う上では両者は同一である
2012-06-21 23
bosh micro status Stemcell CID sc-fa7998fa-6bd0-4c69-bcde-6c7fde5c653c Stemcell name micro-bosh-stemcell-0.1.0 VM CID vm-b2d540a2-59a7-4b83-9476-6bfdcb0a4652 Disk CID 1 Micro BOSH CID bm-82a2b61f-eee4-4d4c-afc4-9021873e50ea Deployment /home/testuser/deployments/micro01/micro_bosh.yml Target micro (http://192.168.12.132:25555) Ver: 0.4 (00000000)
NTT Software Innovation Center
BOSHへのログイン
BOSH CLIに対してリモートのBOSH環境を指定する
2012-06-21 24
# さっき作った(Micro)BOSHをターゲットに設定
bosh target 192.168.12.132:25555 # admin/adminでログイン可能
NTT Software Innovation Center
Stemcellのダウンロードとアップロード
Stemcellは基本的に公式のものをダウンロードして使う
BOSHへアップロード
2012-06-21 25
# 公式stemcell一覧を見てみる
bosh public stemcells +-------------------------------+-------------------------------------------------------+ | Name | Url | +-------------------------------+-------------------------------------------------------+ | bosh-stemcell-0.3.0.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca41e1... | | bosh-stemcell-0.4.4.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca51e1... | | bosh-stemcell-0.4.7.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca21e1... | | bosh-stemcell-0.5.2.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca31e1... | | bosh-stemcell-aws-0.5.1.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca21e1... | | micro-bosh-stemcell-0.1.0.tgz | https://blob.cfblob.com/rest/objects/4e4e78bca51e1... | +-------------------------------+-------------------------------------------------------+ To download use 'bosh download public stemcell <stemcell_name>'.For full url use --full. # stemcellのダウンロード(単なるtgzファイルなので適当なフォルダに置いておく)
bosh download public stemcell bosh-stemcell-0.5.2.tgz
bosh upload stemcell bosh-stemcell-0.5.2.tgz # 確認してみる
bosh stemcells +---------------+---------+-----------------------------------------+ | Name | Version | CID | +---------------+---------+-----------------------------------------+ | bosh-stemcell | 0.5.2 | sc-c7758729-77df-4884-b2e2-c798e6be1a37 | +---------------+---------+-----------------------------------------+ Stemcells total: 1
NTT Software Innovation Center
Releasesの作製とアップロード
今回は独自にReleaseを作らずにcf-releaseを使う • https://github.com/cloudfoundry/cf-release
– 独自にReleaseを作りたい場合は公式ドキュメントが参考になる
2012-06-21 26
# リリースファイルをgithubからクローン
git clone https://github.com/cloudfoundry/cf-release.git cd cf-release # リリース78をBOSHにアップロード
bosh upload release releases/appcloud-78.yml # 確認してみる
bosh releases +----------+----------+ | Name | Versions | +----------+----------+ | appcloud | 78 | +----------+----------+ Releases total: 1
NTT Software Innovation Center
Manifestファイルとデプロイ
Manifestファイルを作り、どのような構成でデプロイを行うかを定義する
– サンプルはこちら:https://github.com/cloudfoundry/oss-docs/blob/master/bosh/samples/cloudfoundry.yml
– ただし、古いので最新リリースでは動かない
非常に長いので要点だけ
2012-06-21 27
--- name: cf01 director_uuid: 2f27ef11-29ea-47b9-b416-979d15b25b6c release: name: appcloud version: 78 compilation: workers: 4 network: default cloud_properties: ram: 4096 disk: 8096 cpu: 2 update: canaries: 1 canary_watch_time: 3000-90000 update_watch_time: 3000-90000 max_in_flight: 2 max_errors: 1
コンパイル用VMの 設定
workers: VM数
bosh status で確認できるUUID
Releaseの 名前とバージョン
アップデート時の 検証用VMの設定
NTT Software Innovation Center
Manifestファイルとデプロイ
2012-06-21 28
networks: - name: default subnets: - reserved: - 192.168.12.2 - 192.168.12.255 - 192.168.13.1 - 192.168.13.255 - 192.168.14.1 - 192.168.14.9 - 192.168.15.1 - 192.168.15.254 static: - 192.168.14.10 - 192.168.14.140 range: 192.168.12.0/22 gateway: 192.168.12.1 dns: - 192.168.3.1 cloud_properties: name: VM Network resource_pools: - name: infrastructure network: default size: 32 stemcell: name: bosh-stemcell version: 0.5.2 cloud_properties: ram: 2048 disk: 8192 cpu: 1 env: bosh: password: ******************** # c1oudc0w - password generated using mkpasswd -m sha-512
- name: deas network: default size: 4 stemcell: name: bosh-stemcell version: 0.5.2 cloud_properties: ram: 2048 disk: 16384 cpu: 2 env: bosh: password: ******************** # c1oudc0w - password generated using mkpasswd -m sha-512
自動的に 払い出さないIP
IPを払い出すレンジ
VMのリソースプール 共通設定
VMのリソースプール DEAだけは別に設定
NTT Software Innovation Center
Manifestファイルとデプロイ
Manifestが書けたらデプロイで実行
2012-06-21 29
jobs: - name: debian_nfs_server template: debian_nfs_server instances: 1 resource_pool: infrastructure persistent_disk: 8192 networks: - name: default static_ips: - 192.168.14.10 - 以下他のJobの設定
… properties: domain: cloudfoundry.test env: {} networks: apps: default management: default nats: user: nats password: aaa3ij3122 address: 192.168.14.11 port: 4222 以下他のpropertyの設定
…
Jobごとに いくつVMを 作るかを指定
共通設定を記述 値はJobのtemplate内で
利用可能
# Manifestを指定
bosh deployment ./cf01.yml # デプロイ
bosh deploy
NTT Software Innovation Center
もくじ
BOSHとは
BOSHの基礎
BOSH環境の構築
BOSHによるオペレーション
まとめ
2012-06-21 30
NTT Software Innovation Center
BOSHによるオペレーション
BOSH CLIからJobやTaskの操作が可能
Manifest変更後に再度bosh deployすると変更が反映される
2012-06-21 31
Job management start <job> [<index>] Start job/instance stop <job> [<index>] Stop job/instance --soft stop process only --hard power off VM restart <job> [<index>] Restart job/instance (soft stop + start) recreate <job> [<index>] Recreate job/instance (hard stop + start) Log management logs <job> <index> Fetch job (default) or agent (if option provided) logs --agent fetch agent logs --only <filter1>[...] only fetch logs that satisfy given filters (defined in job spec) --all fetch all files in the job or agent log directory Task management tasks Show the list of running tasks tasks recent [<number>] Show <number> recent tasks task [<task_id>|last] Show task status and start tracking its output --no-cache don't cache output locally --event|--soap|--debug different log types to track --raw don't beautify log cancel task <id> Cancel task once it reaches the next cancel checkpoint
NTT Software Innovation Center
まとめ
BOSHを使うことでシステム全体の構成管理が楽になる
Manifestファイルを書くのが大変だけど頑張ろう
まだまだ不安定な部分が多いので今後に期待
よくあるトラブル
– デプロイ中にBOSH Agentが応答しなくなる • メモリ不足の可能性あり。VMのメモリは最低4GBにしておく
– bosh upload releaseが失敗する • HDDがいっぱいになっている可能性あり。/tmpにたまってるファイルを消す
– UAADBとCCDB周りでManifestのエラーが出る • テンプレートが変わったので対応する • https://github.com/cloudfoundry/cf-release/commit/3a1abefe7352c22b4fff70dee9ae27c111ba75c8
2012-06-21 32