7. 6
COPYRIGHT FUJITSU LIMITED 2014
3. BOSH インストール
3.1. BOSH のインストールと MicroBOSH の実行
3.1.1.BOSH のインストール
以下のコマンドを例に、git を使用して Bosh のインストールを行う。
# git clone https://github.com/cloudfoundry-community/bosh-cloudstack-cpi.git
~/bosh
# cd ~/bosh
3.1.2.依存 gem のインストール
以下のコマンドを例に、依存 gem をインストールする
# gem install bundler
# bundle
3.1.3.stemcell の作成
メモ:
stemcell(用 VM イメージ)は、公開手順では公開済みイメージをダウンロードし使用するように記述されて
いるが、同イメージは使用できないため独自に用意する必要あり。(AWS 向け、Hper-V 向け、Openstak
向け等の stemcell は公開されているものがいくつもあるが、Cloustack 向けは上記手順指定の古いも
の 2 つ以外にはない)
また公開手順にはstemcellの作成コマンドも記述されているが、実際には使えないため、Openstack用
ドキュメントやソース等を参考に以下の手順を作成した。
(1)ベースイメージ作成
Bosh で使用する VM イメージ(stemcell)を作成する。
# bundle exec rake stemcell:build_os_image[ubuntu,precise,/tmp/ubuntu_base_im
age.tgz]
オプション説明:ubuntu … OS 名を指定する。
:precise … OS のバージョンを指定(ubuntu の場合、precise や lucid)
:/tmp/ubuntu_base_image.tgz … 作成ファイル名
(2)ソース(bosh-stemcell)内のカーネルバージョン指定箇所修正
上記コマンドで一時的に作成されるイメージファイル作成用ディレクトリ(/mnt/stemcells/null/null/
ubuntu/work/work/chroot)もしくは作成した圧縮イメージファイル内の「/boot」内に格納されているカ
8. 7
COPYRIGHT FUJITSU LIMITED 2014
ーネルファイル(initrd.img-xxx-virtual、vmlinuz-xxx-virtual)のバージョンを確認し、/root/
bosh/bosh-stemcell/spec/stemcells/ubuntu_precise_spec.rb の 3 行目から 14 行目(desc
ribe ~ end まで)に記載されている各カーネルバージョンを確認したバージョンに合わせて修正する。
# ls /mnt/stemcells/null/null/ubuntu/work/work/chroot/boot
System.map-3.2.0-70-virtual config-3.2.0-70-virtual initrd.img-3.2.0-70-vir
tual
abi-3.2.0-70-virtual grub vmlinuz-3.2.0-70-virtual
※作成した ubuntu のカーネルバージョンが「3.2.0-70」であることを確認
# vi /root/bosh/bosh-stemcell/spec/stemcells/ubuntu_precise_spec.rb
(略)
describe 'Ubuntu 12.04 stemcell', stemcell_image: true do
context 'installed by image_install_grub' do
describe file('/boot/grub/grub.conf') do
it { should be_file }
it { should contain 'default=0' }
it { should contain 'timeout=1' }
it { should contain 'title Ubuntu 12.04.5 LTS (3.2.0-68-virtual)' }
it { should contain ' root (hd0,0)' }
it { should contain ' kernel /boot/vmlinuz-3.2.0-68-virtual ro root=UUI
D=' }
it { should contain ' selinux=0' }
it { should contain ' initrd /boot/initrd.img-3.2.0-68-virtual' }
end
(略)
↓ 以下のように修正
(略)
describe 'Ubuntu 12.04 stemcell', stemcell_image: true do
context 'installed by image_install_grub' do
describe file('/boot/grub/grub.conf') do
it { should be_file }
it { should contain 'default=0' }
it { should contain 'timeout=1' }
it { should contain 'title Ubuntu 12.04.5 LTS (3.2.0-70-virtual)' }
it { should contain ' root (hd0,0)' }
9. 8
COPYRIGHT FUJITSU LIMITED 2014
it { should contain ' kernel /boot/vmlinuz-3.2.0-70-virtual ro root=UUI
D=' }
it { should contain ' selinux=0' }
it { should contain ' initrd /boot/initrd.img-3.2.0-70-virtual' }
end
(略)
(3)stemcell イメージの作成
以下のコマンドを実行し、(1)で作成したベースイメージから stemcell イメージを生成する。
# bundle exec rake stemcell:build_with_local_os_image[cloudstack,ubuntu,preci
se,ruby,/tmp/ubuntu_base_image.tgz]
3.1.4.Proxy サーバの非参照設定
内部のローカルアドレス(インセプションサーバやインセプションサーバから起動される Firstbosh サーバ)を
Proxy サーバなしで参照するように「no_proxy」環境変数を指定する。
# export no_proxy=172.16.10.224,172.16.10.227,172.16.10.228
※管理サーバの IP、ルータ VM の IP とインセプションサーバ自身の IP を除外対象に指定
3.1.5.キーペアファイルの作成
(1)スクリプトファイル作成
Cloudstack の API を使用して SSH キーペアファイルを作成するため、以下のスクリプトファイルを作成す
る。
メモ:
公開手順にあるキーペア作成用スクリプトは正常に動作しなかったため、以下のスクリプトを独自に作成し
てキーペアファイル作成を行っている。
# cat kick_api.sh
-----------------------------------------
#!/bin/bash
#
# kick_api.sh
#
# please set your host
address="http://172.16.10.224:8080" # Cloudstack 管理サーバの URL
# please set your api key (CloudStackGUI であらかじめ作成しておく)
13. 12
COPYRIGHT FUJITSU LIMITED 2014
resources:
persistent_disk: 20512
cloud_properties:
instance_type: m1.large2
# VM タイプ(コンピュータオファリング)
cloud:
plugin: cloudstack
properties:
cloudstack:
endpoint: http://172.16.10.224:8080/client/api
# Cloudstack の管理サーバのアドレスに、/client/api を付与したものを指定
api_key: QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx
4Ok5WaJZNPwY0o1Y_ORP2A
# キーペア作成時に指定したもの
secret_access_key: oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT
2TjwmvBerWLuM9OOdnCEtyVpPy02rOkg
# キーペア作成時に指定したもの
default_key_name: cfmykey
# キーペア作成時に指定したキーペア名
private_key: /root/cfmykey # キーペア作成時に出力内容を保存したキーファイル名
state_timeout: 600
state_timeout_volume: 1200
stemcell_public_visibility: true
default_zone: zone01 # Zone name of your instaption server
# Only for Basic Zone users. Delete these lines on Advanced Zone
default_security_groups: ["default"]
# TCP、UDP での全ての通信が可能なセキュリティグループ名を[""]で括って指定
registry:
endpoint: http://admin:admin@172.16.10.227:25889
# インセプションサーバの IP を指定
user: admin
password: admin
14. 13
COPYRIGHT FUJITSU LIMITED 2014
3.1.7.ソースコードの修正
(1)デバイスアタッチ処理関連
メモ:
デバイス名の仕様の違いから、デフォルトのモジュールではデバイスアタッチ時にエラーが発生するため、
ソースを修正しエラーが発生しないように対応
デバイスアタッチの不具合対応として、以下のソースコードの修正を行っておく。
ファイル名:~/bosh/bosh_cloudstack_cpi/lib/cloud/cloudstack/cloud.rb
コード最下部の以下の部分を修正
-----------------------------------------
def volume_device_name(device_id)
# assumes device name begins with "dev/sd" and volume_name is numeric
cloud_error("Unkown device id given") if device_id.nil?
suffix = ('a'..'z').to_a[device_id]
cloud_error("too many disks attached") if suffix.nil?
"/dev/sd#{suffix}"
end
-----------------------------------------
↓以下に修正
-----------------------------------------
def volume_device_name(device_id)
# assumes device name begins with "dev/sd" and volume_name is numeric
cloud_error("Unkown device id given") if device_id.nil?
suffix = ('a'..'z').to_a[device_id-1]
cloud_error("too many disks attached") if suffix.nil?
"/dev/vd#{suffix}"
end
-----------------------------------------
メモ:
ソースコードは virtio 前提ではないため、virtio でのディスクアタッチに合うようにデバイス名を取得す
る部分で「-1」している
16. 15
COPYRIGHT FUJITSU LIMITED 2014
3.1.8.マイクロボッシュのデプロイ
(1)Proxy サーバの無効化
必要に応じて、デプロイ処理のため、proxy の設定を一度無効にしておく。
# unset http_proxy
# unset https_proxy
(2)Micro BOSH によるデプロイ
以下のコマンドを例に、デプロイを実行する。
# cd ~/deployments
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh micro deployment firstbosh
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh micro deploy /tmp/<3.1.3.(3)
で作成した stemcell ファイル名>
(3)firstbosh のアドレスの確認
デプロイが正常に行われると、デプロイ実行用の最初のインスタンス(firstbosh)が起動される。
インスタンスの IP アドレスを /root/deployments/firstbosh/bosh_micro_deploy.log ファイルの
target への接続ログから確認する。
(4)ターゲットの指定
上記で確認した IP を使用して、新たに起動されたインスタンスをターゲットとして指定する。
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh target https://172.16.10.229:
25555
※ ユーザー名/パスワードは admin/admin
※ ログインし直す場合は、
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh login
でログインする
(5)ステータスの確認
上記でデプロイした bosh 環境の状況を以下のコマンドで確認する。
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh status
-----------------------------------------
Config
/root/.bosh_config
17. 16
COPYRIGHT FUJITSU LIMITED 2014
Director
Name firstbosh
URL https://172.16.10.230:25555
Version 1.2063.0 (release:c8e032de bosh:c8e032de)
User admin
UUID f90c0235-6a22-401a-a0b0-2e619fb8f31a
CPI cloudstack
dns enabled (domain_name: microbosh)
compiled_package_cache disabled
snapshots disabled
Deployment
not set
3.2. BOSH デプロイの準備
3.2.1.Proxy サーバの設定
環境変数へ proxy の再設定を行い、Cloudstack 管理サーバ、インセプションサーバ、
Firstbosh(ターゲット)の各 IP アドレスを no_proxy 環境変数へ追加して設定する。
# export no_proxy=172.16.10.224,172.16.10.227,172.16.10.228,172.16.10.230,17
2.16.10.229,192.168.3.224
3.2.2.不足領域の追加
メモ:
Firstbosh 上では、あらかじめ最終的なパッケージ格納領域として/var/vcap/store については特別
な領域が確保(領域確保用ボリュームのアタッチ)がされているが、当該作業領域は同様の領域が必要
(格納パッケージの一時展開作業用)にもかかわらず、特別な領域の準備はされていないために同処理で
エラーとなってしまう。そのため手動で領域を確保しておかなければならない。
次項の bosh upload release を行う際に、Firstbosh の VM で領域不足エラー「Error 500001: U
ploading release archive failed. Insufficient space on BOSH director in /var/vc
ap/data/tmp/director/release20140910-2239-1mz1yey」が発生するため、FirstboshVM へロ
グインして対象ディレクトリに追加ディスクをマウントして領域の確保を行う。
18. 17
COPYRIGHT FUJITSU LIMITED 2014
(1)追加ストレージの準備
CloudstackGUI で追加用のボリューム(disk20gb)を作成し、FirstboshVM にアタッチしておく
(2)FirstboshVM へのログイン
キーファイルを使用して FirstboshVM へのログインを行う。
# ssh -i cfmyke vcap@172.16.10.xxx
password:c1oudc0w
(3.1.5.で作成したキーペアを指定する)
(3)ストレージ領域の作成とマウント
以下のコマンドを例に、FirstboshVM 内からアタッチしたボリュームのマウントを行う。
○マウント実行例
$ ls /dev/vd*
/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdc
$ sudo mkfs -t ext4 /dev/vdc
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
(略)
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
$ sudo ls /mnt
$ sudo mount /dev/vdc /mnt
$ sudo cp -r /var/vcap/data/tmp/* /mnt
$ ls /mnt
director lost+found
$ ls tmp/
director
$ sudo umount /mnt
$ sudo mount /dev/vdc /var/vcap/data/tmp
$ ls /var/vcap/data/tmp
director lost+found
$ df -h
25. 24
COPYRIGHT FUJITSU LIMITED 2014
networks:
- name: default
type: dynamic
cloud_properties:
# Only for Basic Zone users
security_groups:
## - bosh # Securiy group which opens all TCP and UDP ports
- default # ●default で全 port 開けているのでそのまま指定●
## # Only for Advanced Zone users
## network_name: <network_name> # subnetwork ●無効化●
# Only for Advanced Zone users
# Network with floating IP addresses
- name: floating
type: vip
cloud_properties: {}
compilation:
workers: 6
network: default
reuse_compilation_vms: true
cloud_properties:
instance_type: m1.medium # VM type
ephemeral_volume: Datadisk 40GB # Data disk offering name of additonal disk
update:
canaries: 1
canary_watch_time: 30000-60000
update_watch_time: 30000-60000
max_in_flight: 4
resource_pools:
- name: small
network: default
26. 25
COPYRIGHT FUJITSU LIMITED 2014
size: 8
stemcell:
name: bosh-cloudstack-kvm-ubuntu
version: latest
cloud_properties:
instance_type: m1.small # VM type
ephemeral_volume: Datadisk 40GB # Data disk offering name of additonal dis
k
- name: large
network: default
size: 1
stemcell:
name: bosh-cloudstack-kvm-ubuntu
version: latest
cloud_properties:
instance_type: m1.large # VM type
ephemeral_volume: Datadisk 40GB # Data disk offering name of additional di
sk
jobs:
- name: nats
release: cf
template:
- nats
instances: 1
resource_pool: small
networks:
- name: default
default: [dns, gateway]
- name: syslog_aggregator
release: cf
template:
- syslog_aggregator
instances: 1
resource_pool: small
persistent_disk: 65536