すごいBOSHたのしく学ぼう

  • 9,529 views
Uploaded on

VMWareが開発を行っているOSSの分散システム構成管理ツールBOSHの紹介。環境構築からCloudFoundryのデプロイまで。 …

VMWareが開発を行っているOSSの分散システム構成管理ツールBOSHの紹介。環境構築からCloudFoundryのデプロイまで。

「第7回CloudFoundry輪読会」で発表を行いました: http://atnd.org/events/29652

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
9,529
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
113
Comments
0
Likes
14

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. すごいBOSHたのしく学ぼう岩嵜 雄大NTT Software Innovation Center2012-06-21 NTT Software Innovation Center
  • 2. もくじ  BOSHとは  BOSHの基礎  BOSH環境の構築  BOSHによるオペレーション  まとめ2012-06-21 NTT Software Innovation Center 2
  • 3. もくじ  BOSHとは  BOSHの基礎  BOSH環境の構築  BOSHによるオペレーション  まとめ2012-06-21 NTT Software Innovation Center 3
  • 4. BOSHとは  CloudFoundryの環境構築はとても大変 – サーバが増えると何処で何が動いているのか分からなくなる – 動いてるサービスのバージョン管理も煩雑  BOSHが解決してくれること – 分散システム全体の構成管理を一元管理 – サービスのバージョンも管理できる – VMWare謹製なのでCloudFoundryと相性が良い https://github.com/cloudfoundry/bosh2012-06-21 NTT Software Innovation Center 4
  • 5. それ ~ でできるよ  分散システムの構成管理ツールは前からあるのでは?  車輪の再発名になってませんか? • Puppet – 細かい作業も出来て素敵 – でもPuppet使って実際に構成管理ツール作るのすごく大変 • Chef – より新しい – でもChef使って実際に構成管理ツール作るのすごく大変 • Capistorano – Capistorano使って実際に構成管理ツール作ったら爆発した!2012-06-21 NTT Software Innovation Center 5
  • 6. それ ~ でできるよ  分散システムの構成管理システムは前からあるのでは?  車輪の再発名になってませんか? • Puppet – 大体あってる ロジック – でもPuppet使って実際に構成管理ツール作るのすごく大変 問題はココ デプロイ 起動・終了 • Chef ステータス監視 – 大体あってる バージョン管理 – でもChef使って実際に構成管理ツール作るのすごく大変 • Capistorano フレームワーク – Capistorano使って実際に構成管理ツール作ったら爆発した! Puppet Chef Capistrano2012-06-21 NTT Software Innovation Center 6
  • 7. それ ~ でできるよ  分散システムの構成管理システムは前からあるのでは?  車輪の再発名になってませんか? • Puppet – 大体あってる ロジック – でもPuppet使って実際に構成管理ツール作るのすごく大変 デプロイ BOSHはロジックを定形化 起動・終了 • Chef ステータス監視 – 大体あってる バージョン管理 – でもChef使って実際に構成管理ツール作るのすごく大変 すぐに使える • Capistorano フレームワーク – Capistorano使って実際に構成管理ツール作ったら爆発した! Puppet Chef Capistrano2012-06-21 NTT Software Innovation Center 7
  • 8. それ ~ でできるよ  分散システムの構成管理システムは前からあるのでは?  車輪の再発名になってませんか? • Puppet – 大体あってる ロジック – でもPuppet使って実際に構成管理ツール作るのすごく大変 デプロイ BOSHはロジックを定形化 起動・終了 • Chef ステータス監視 – 大体あってる バージョン管理 – でもChef使って実際に構成管理ツール作るのすごく大変 すぐに使える • Capistorano (環境構築さえ出来れば) フレームワーク – Capistorano使って実際に構成管理ツール作ったら爆発した! Puppet Chef Capistrano2012-06-21 NTT Software Innovation Center 8
  • 9. もくじ  BOSHとは  BOSHの基礎  BOSH環境の構築  BOSHによるオペレーション  まとめ2012-06-21 NTT Software Innovation Center 9
  • 10. 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の指示に従っ https://github.com/cloudfoundry/oss-docs/blob/master/bosh/documentation/documentation.md てサービスなどの操作を行う(B)2012-06-21 NTT Software Innovation Center 10
  • 11. Stemcell Package Package Package A B C Job A Agent Stemcell VM  StemcellはBOSHが生成するVMの基本イメージ – 実態はBOSH Agent+etc 入りのUbuntuイメージ – Stemcell自体は単体では何もサービスを提供できない – 上にJobをデプロイして使う – イメージファイルはBlobstoreに保存されている2012-06-21 NTT Software Innovation Center 11
  • 12. Releases common nats ruby (Package) (package) (package) common nats ruby mysql nats (Job) common nats ruby mysql Agent common nats ruby mysql Stemcell common nats ruby mysql VM nats mysql_node nats mysql_node nats mysql_node nats mysql_node Release Release Release Release Release 78  BOSHが扱うアプリケーションの全体構成 – VMにデプロイする単位=Job – Jobを構成する各種サービス・プロセス=Package – バージョンアップごとにReleaseとしてスナップショットを取る • bosh create release するとreleasesディレクトリに保存される2012-06-21 NTT Software Innovation Center 12
  • 13. Jobs  使用するパッケージとテンプレートの一覧を定義する – 実態は設定ファイルのみ – jobsディレクトリを見よ cf-release/jobs/acm/spec specファイルにJobが必要と --- name: acm • するpackageの一覧を記述す templates: acm_ctl.erb: bin/acm_ctl る acm.yml.erb: config/acm.yml syslog_forwarder.conf.erb: config/syslog_forwarder.conf packages: - libpq templateは設定ファイルなど - common - ruby • の生成に利用 - syslog_aggregator - acm --- cf-release/jobs/templates/acm.yml.erb <% 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: ERB内で user: <%= properties.acm.user %> Manifestの値が password: <%= properties.acm.password %> 参照される(後述)2012-06-21 NTT Software Innovation Center 13
  • 14. Packages  パッケージのコンパイル方法を指定する – packagesディレクトリを見よ cf-release/packages/acm/spec --- name: acm • packgeはデプロイ時にコンパ dependencies: - libpq イルが行われる(キャッシュ コンパイル時の - ruby が無い場合) files: 依存パッケージ - acm/Gemfile* - acm/bin/**/* (運用時ではない) • コンパイルはコンパイル用の - acm/lib/**/* - acm/db/**/* VMを生成してその上で行われ - acm/vendor/**/* - core/common/**/ る cf-release/packages/acm/packaging • packagingファイル がコンパイルを行う # 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 )2012-06-21 NTT Software Innovation Center 14
  • 15. 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からファイルがダウンロードされる --- cf-release/config/final.yml 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: deprecated2012-06-21 NTT Software Innovation Center 15
  • 16. もくじ  BOSHとは  BOSHの基礎  BOSH環境の構築  BOSHによるオペレーション  まとめ2012-06-21 NTT Software Innovation Center 16
  • 17. デプロイ作業の流れ 1. ローカルにBOSH CLI環境を構築する 2. ローカル環境にStemcellをダウンロードする 3. リモートのBOSHにStemcellをアップロードする 4. ローカル環境にReleasesを作成(ダウンロード)する 5. リモートのBOSHにReleaseをアップロードする – 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる 6. 構成を記載したManifestファイルを作る 7. Manifestファイルを使ってデプロイを行う2012-06-21 NTT Software Innovation Center 17
  • 18. BOSH CLIのインストール  リモートにあるBOSHを操作するためのコマンドラインインターフェース – CloudFoundryにおけるVMCのようなもの – ローカルに環境を作る  インストール方法は公式ドキュメントを見よ – https://github.com/cloudfoundry/oss-docs/blob/master/bosh/documentation/documentation.md – 「Installing BOSH Command Line Interface」 – Ubuntu10.04で構築するとすんなりインストールできる # 依存パッケージのインストール # dotfileの再読み込み sudo apt-get install git-core build-essential libsqlite3-dev curl ¥ source ~/.bash_profile libmysqlclient-dev libxml2-dev libxslt-dev libpq-dev # デフォルトのRubyを1.9.2に設定 # 最新版rbenv(Ruby環境構成ツール)の取得 rbenv global 1.9.2-p290 cd ~ # gemとbundlerをアップデート・インストール(rehash忘れずに) git clone git://github.com/sstephenson/rbenv.git .rbenv rbenv rehash # rbenvにパスを通す gem update –system echo export PATH="$HOME/.rbenv/bin:$PATH" >> ~/.bash_profile gem install bundler # shimsとautocompletionを有効に rbenv rehash echo eval "$(rbenv init -)" >> ~/.bash_profile # bosh_cliをインストール # ruby1.9.2をダウンロードしてインストール gem install bosh_cli wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz rbenv rehash tar xvfz ruby-1.9.2-p290.tar.gz cd ruby-1.9.2-p290 # 動いているか確認 ./configure --prefix=$HOME/.rbenv/versions/1.9.2-p290 bosh --version make make install2012-06-21 NTT Software Innovation Center 18
  • 19. デプロイ作業の流れ 1. ローカルにBOSH CLI環境を構築する 2. ローカル環境にStemcellをダウンロードする 3. ローカル環境にReleasesを作成(作成)する 4. リモートのBOSHにStemcellをアップロードする 5. リモートのBOSHにReleaseをアップロードする あ、BOSH環境作らないと – 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる 6. 構成を記載したManifestファイルを作る 7. Manifestファイルを使ってデプロイを行う2012-06-21 NTT Software Innovation Center 19
  • 20. 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 git clone https://github.com/cloudfoundry/bosh.git cd bosh/deployer bundle install rake install2012-06-21 NTT Software Innovation Center 20
  • 21. デプロイ作業の流れ 1. ローカルにBOSH CLI環境を構築する 2. ローカル環境にStemcellをダウンロードする 3. ローカル環境にReleasesを作成(作成)する 4. リモートのBOSHにStemcellをアップロードする 5. リモートのBOSHにReleaseをアップロードする ここから先は IaaS が vSphare の場合です – 足りないファイルはblobstoreからローカルにダウンロードされた後にアップロードされる AWSでは設定が異なります 6. 構成を記載したManifestファイルを作る 7. Manifestファイルを使ってデプロイを行う2012-06-21 NTT Software Innovation Center 21
  • 22. Micro BOSHのデプロイ  設定ファイルを書いてデプロイを実行する – 設定に沿って自動的にVMが新規作成され、Micro BOSHが起動する # Micro BOSHのデプロイ設定用ディレクトリを作る mkdir ~/deployments; cd ~/deployments mkdir micro01; cd micro01 vi micro_bosh.yml --- name: micro01 (デプロイ名:任意) # 専用のStemcellをダウンロードしてくる network: (Micro Boshを動かすネットワークの設定) ip: 192.168.12.132 (Micro BOSHのサーバIP) mkdir ~/stemcells; cd ~/stemcells netmask: 255.255.252.0 bosh download public stemcell ¥ gateway: 192.168.12.1 micro-bosh-stemcell-0.1.0.tgz dns: - 192.168.3.1 # デプロイを実行(新しいVMが自動で作成される) cloud_properties: (vCenter上でどのネットワークにつなげるか) cd ~/deployments name: VM Network bosh micro deployment micro01 cloud: bosh micro deploy ¥ plugin: vsphere (vSphereを使うという宣言) ~/stemcells/micro-bosh-stemcell-0.1.0.tgz 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 vCenter上で clusters: - BoshTest (オプション) 設定に合わせてフォルダを作る2012-06-21 NTT Software Innovation Center 22
  • 23. Micro BOSHのデプロイ  動いているか確認 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)  以降ではこのMicro BOSH環境を単なるBOSH環境として扱う – bosh(not bosh micro)コマンドを使う上では両者は同一である2012-06-21 NTT Software Innovation Center 23
  • 24. BOSHへのログイン  BOSH CLIに対してリモートのBOSH環境を指定する # さっき作った(Micro)BOSHをターゲットに設定 bosh target 192.168.12.132:25555 # admin/adminでログイン可能2012-06-21 NTT Software Innovation Center 24
  • 25. Stemcellのダウンロードとアップロード  Stemcellは基本的に公式のものをダウンロードして使う # 公式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へアップロード 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: 12012-06-21 NTT Software Innovation Center 25
  • 26. Releasesの作製とアップロード  今回は独自にReleaseを作らずにcf-releaseを使う • https://github.com/cloudfoundry/cf-release – 独自にReleaseを作りたい場合は公式ドキュメントが参考になる # リリースファイルを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: 12012-06-21 NTT Software Innovation Center 26
  • 27. Manifestファイルとデプロイ  Manifestファイルを作り、どのような構成でデプロイを行うかを定義する – サンプルはこちら:https://github.com/cloudfoundry/oss-docs/blob/master/bosh/samples/cloudfoundry.yml – ただし、古いので最新リリースでは動かない  非常に長いので要点だけ bosh status で確認できるUUID --- name: cf01 director_uuid: 2f27ef11-29ea-47b9-b416-979d15b25b6c release: name: appcloud version: 78 Releaseの 名前とバージョン compilation: workers: 4 コンパイル用VMの network: default 設定 cloud_properties: ram: 4096 workers: VM数 disk: 8096 cpu: 2 update: canaries: 1 canary_watch_time: 3000-90000 アップデート時の update_watch_time: 3000-90000 検証用VMの設定 max_in_flight: 2 max_errors: 12012-06-21 NTT Software Innovation Center 27
  • 28. Manifestファイルとデプロイ networks: 自動的に 払い出さないIP - name: deas - name: default network: default subnets: size: 4 VMのリソースプール - reserved: - 192.168.12.2 - 192.168.12.255 stemcell: name: bosh-stemcell DEAだけは別に設定 - 192.168.13.1 - 192.168.13.255 version: 0.5.2 - 192.168.14.1 - 192.168.14.9 cloud_properties: - 192.168.15.1 - 192.168.15.254 ram: 2048 static: disk: 16384 - 192.168.14.10 - 192.168.14.140 cpu: 2 range: 192.168.12.0/22 env: gateway: 192.168.12.1 bosh: dns: password: ******************** - 192.168.3.1 IPを払い出すレンジ # c1oudc0w - password generated using mkpasswd -m sha- cloud_properties: 512 name: VM Network resource_pools: - name: infrastructure network: default size: 32 VMのリソースプール 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-5122012-06-21 NTT Software Innovation Center 28
  • 29. Manifestファイルとデプロイ jobs:  Manifestが書けたらデプロイで実行 - name: debian_nfs_server template: debian_nfs_server # Manifestを指定 instances: 1 bosh deployment ./cf01.yml resource_pool: infrastructure persistent_disk: 8192 # デプロイ networks: bosh deploy Jobごとに - name: default static_ips: - 192.168.14.10 いくつVMを - 以下他のJobの設定 作るかを指定 … properties: domain: cloudfoundry.test env: {} networks: apps: default 共通設定を記述 management: default 値はJobのtemplate内で nats: 利用可能 user: nats password: aaa3ij3122 address: 192.168.14.11 port: 4222 以下他のpropertyの設定 …2012-06-21 NTT Software Innovation Center 29
  • 30. もくじ  BOSHとは  BOSHの基礎  BOSH環境の構築  BOSHによるオペレーション  まとめ2012-06-21 NTT Software Innovation Center 30
  • 31. BOSHによるオペレーション  BOSH CLIからJobやTaskの操作が可能 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 dont cache output locally --event|--soap|--debug different log types to track --raw dont beautify log cancel task <id> Cancel task once it reaches the next cancel checkpoint  Manifest変更後に再度bosh deployすると変更が反映される2012-06-21 NTT Software Innovation Center 31
  • 32. まとめ  BOSHを使うことでシステム全体の構成管理が楽になる  Manifestファイルを書くのが大変だけど頑張ろう  まだまだ不安定な部分が多いので今後に期待  よくあるトラブル – デプロイ中にBOSH Agentが応答しなくなる • メモリ不足の可能性あり。VMのメモリは最低4GBにしておく – bosh upload releaseが失敗する • HDDがいっぱいになっている可能性あり。/tmpにたまってるファイルを消す – UAADBとCCDB周りでManifestのエラーが出る • テンプレートが変わったので対応する • https://github.com/cloudfoundry/cf-release/commit/3a1abefe7352c22b4fff70dee9ae27c111ba75c82012-06-21 NTT Software Innovation Center 32