i 
COPYRIGHT FUJITSU LIMITED 2014 
※本資料は CloudStack Advent Calendar 2014の 16日目のエントリです。 
CloudFoundry 2 on Apache CloudStack 4.2.1 
Powered by 富士通株式会社 OSS技術センター 
はじめに 
本資料は、Apache CloudStack 4.2.1の上に CloudFoundry 2環境を構築した際の手順メモです。 
本手順は以下の環境を想定しています。 
クラウド基盤 
Cloudstack Ver4.2.1 
VM 
Ubuntu 12.04 
ストレージ領域 
プライマリストレージ:約 350GB 
セカンダリストレージ:約150GB 
また、本手順では、特に指定がない限り管理者(root)を使用しています。
1 
COPYRIGHT FUJITSU LIMITED 2014 
1. 前提 
CloudFoundry環境を動作させる(構築す)環境として、以下あらかじめ準備ておく。 
・CloudStack環境(KVM使用) 
・UbuntuOSイメージ(Ver12.04) 
・以下のコンピュータオファリグ 
○ コンピュータオファリグ コンピュータオファリグ名 CPU メモリ 
m1.small 
1core 
500MB 
m1.medium2 
1core 
2GB 
m1.large 
2core 
2GB 
m1.large2 
2core 
4GB 
○ ディスクオファリング ディスクオファリング名 サイズ 
disk2gb 
2GB 
disk10gb 
10GB 
disk20gb 
20GB
2 
COPYRIGHT FUJITSU LIMITED 2014 
2. インセプションサーバの構築 
CloudFoundryのインストールにあたり、BOSHによるデプロイを行うための最初BOSH(Micro BOSH)サー バ(インセプショサーバ)をCloudstack上にUbuntuVMを起動して構築する。 
2.1. Ubuntuイメージの起動 
あらかじめCloudstack上に準備したUbuntu12のイメージを利用してインセプショサーバとなるUbuntu の VMを起動する。 
※使用コンピュータオファリグ:m1.small 
2.2. インセプションサーバ上での各設定変更 
起動したUbuntuの VM上で、以下の各設定を行う。 
2.2.1. rootログイン設定 
インセプショサーバにrootユーザでのログインとリモトrootログイン許可の設定を行う。 
(1) rootでログインし、パスワードの設定を行う。 
$ sudo su – 
# passwd 
(2) rootでのssh接続を許可する設定 
設定ファイル(sshd_config)を修正。 
# vi /etc/ssh/sshd_config 
PermitRootLogin without-password 
↓ 
PermitRootLogin yes 
----- 
#PasswordAuthentication yes 
↓ 
PasswordAuthentication yes 
(3) 設定更新 
上記修正後プロセス再起動。 
# initctl restart ssh
3 
COPYRIGHT FUJITSU LIMITED 2014 
2.2.2. 内部作業領域のサイズ拡張 
作業時に内部で使用される領域(/tmp)に対して、領域不足ならいようあかじめCloudstack上で ストレージを作成しアタッチ・マウンておく。 
(1)ストレージの作成 
アタッチするストレージ(20GB)をGUIから作成しアタッチする。 
(2)領域のマウント 
作成したストレージを/tmpにマウントする。 
# mount /dev/vdb tmp 
※ アタッチしたボリュームが/dev/vdbの場合 
メモ: 参考インストール手順のセプショサバデフォ設定では、当該作業領域容量不足により内部 処理でエラーが発生していため、上記設定を追加すること対応行っ。 
2.2.3. プロキシサーバの設定 
必要に応じて、以下のコマンドを例に、インセプショサーバの環境変数(http_proxy、https_proxy)へ プロキシサーバを設定する。 
設定例) 
export http_proxy=http://{Proxy Server}:{Port} 
export https_proxy=http:// {Proxy Server}:{Port} 
2.3. インセプションサーバへのインストール 
2.3.1. パッケージリポジトリの追加とupgradeの実行 
apt-get実行用に、Japanese Teamのパッケージリポトを以下コマンド例に追加する。 
# wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add - 
# wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt- key add - 
# wget https://www.ubuntulinux.jp/sources.list.d/precise.list -O /etc/apt/sources.list.d/ubuntu-ja.list 
# apt-get update
4 
COPYRIGHT FUJITSU LIMITED 2014 
パッケージの更新(upgrade)を行う。 
# apt-get upgrade 
2.3.2. acpiphpカーネルモジュールのアクティブ化 
以下のコマンドを例に、acpiphpカーネルモジュのアクティブ化を行う。 
# modprobe acpiphp 
# sh -c "echo acpiphp >> /etc/modules" 
2.3.3. 関連ツールのインストール 
必要となる関連ツール(パッケジ)のインストを以下コマド例に行う。 
(1) gitインストール 
# apt-add-repository ppa:git-core/ppa 
# apt-get update 
# sudo apt-get install git-core 
(2) Ruby、Gems関連の事前インストール 
# apt-get install g++ make libxslt-dev libxml2-dev libsqlite3-dev zlib1g-dev libreadline-dev libssl-dev libcurl4-openssl-dev 
(3) stemcell関連のインストール 
# apt-get install libsqlite3-dev genisoimage libmysqlclient-dev libpq-dev debootstrap kpartx 
2.3.4. Rubyインストール 
(1) プロキシサーバの設定 
gitインストールのために以下コマドを例プロキシサバgitの configに設定する。 
# git config --global http.proxy http://mp067159:8160584683@rep.proxy.nic.fujitsu.com:8080/ 
# git config --global https.proxy http://mp067159:8160584683@rep.proxy.nic.fujitsu.com:8080/
5 
COPYRIGHT FUJITSU LIMITED 2014 
(2) rbenvのインストール 
rbenvおよび関連パッケージを以下のコマンド例にイストルする。 
# apt-get install build-essential bison libreadline6-dev curl git-core zlib1g- dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libncurses5-dev 
# git clone http://github.com/sstephenson/rbenv.git .rbenv 
# git clone http://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build 
(3) profileの設定 
rbenvを 使うために必要な設定~/.bash_profile に記述する。 
$ vi ~/.bash_profile 
export PATH="$HOME/.rbenv/bin:$PATH" 
eval "$(rbenv init -)" 
保存後に反映する。 
$ source ~/.bash_profile 
(4) Rubyインストール 
rbenvを利用し、Rubyのインストールリを表示する。 
# rbenv install --list 
リストされたバージョンを参照してRubyのインストールを行う。 
# rbenv install 1.9.3-p547 
# rbenv global 1.9.3-p547 
# ruby --version 
ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]
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_image.tgz] 
オプション説明:ubuntu … OS名を指定する。 
:precise … OSのバージョンを指定(ubuntuの場合、preciseや lucid) 
:/tmp/ubuntu_base_image.tgz … 作成ファイル名 
(2) ソース(bosh-stemcell)内のカーネルバジョン指定箇所修正 
上記コマンドで一時的に作成されるイメージファル用ディレクトリ(/mnt/stemcells/null/null/ ubuntu/work/chroot)もしくは作成た圧縮イメージファル内の「/boot」内に格納されているカ
7 
COPYRIGHT FUJITSU LIMITED 2014 
ーネルファイ(initrd.img-xxx-virtual、vmlinuz-xxx-virtual)のバージョンを確認し、/root/ bosh/bosh-stemcell/spec/stemcells/ubuntu_precise_spec.rbの 3行目から14行目(describe ~ end まで)に記載されている各カーネルバジョンを確認した合わせ修正す。 
# ls /mnt/stemcells/null/ubuntu/work/chroot/boot 
System.map-3.2.0-70-virtual config-3.2.0-70-virtual initrd.img-3.2.0-70-virtual 
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=UUID=' } 
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)' }
8 
COPYRIGHT FUJITSU LIMITED 2014 
it { should contain ' kernel /boot/vmlinuz-3.2.0-70-virtual ro root=UUID=' } 
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,precise,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であらかじめ作成しておく)
9 
COPYRIGHT FUJITSU LIMITED 2014 
api_key="QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A" 
# please set your secret key(CloudStackGUIであらかじめ作成しておく) 
secret_key="oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT2TjwmvBerWLuM9OOdnCEtyVpPy02rOkg" 
api_path="/client/api?" 
if [ $# -lt 1 ]; then 
echo "usage: $0 command=... paramter=... parameter=..."; exit; 
elif [[ $1 != "command="* ]]; then 
echo "usage: $0 command=... paramter=... parameter=..."; exit; 
elif [ $1 == "command=" ]; then 
echo "usage: $0 command=... paramter=... parameter=..."; exit; 
fi 
data_array=("$@" "apikey=${api_key}") 
temp1=$(echo -n ${data_array[@]} | ¥ 
tr " "¥n" | ¥ sort -fd -t'=' | ¥ 
perl -pe's/([^-_.~A-Za-z0-9=¥s])/sprintf("%%%02X", ord($1))/seg'| ¥ 
tr "A-Z" "a-z" | ¥ tr "¥n" "&" ) 
signature=$(echo -n ${temp1[@]}) 
signature=${signature%&} 
signature=$(echo -n $signature | ¥ 
openssl sha1 -binary -hmac $secret_key | ¥ 
openssl base64 ) 
signature=$(echo -n $signature | ¥ 
perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg') 
url=${address}${api_path}$(echo -n $@ | tr " "&")"&"apikey=$api_key"&"signature=$signature 
echo " SEND URL: $url" 
curl ${url} 
(2) キーペア作成 
上記で作成したスクリプトファイルを以下のコマンドとおりに実行、キーペアを作成する。(name=はキー名 として任意の名前を指定可能) 
コマンド:./kick_api.sh command=createSSHKeyPair name=<キー名> 
例)
10 
COPYRIGHT FUJITSU LIMITED 2014 
# ./kick_api.sh command=createSSHKeyPair name=cfmykey 
SEND URL: http://172.16.10.224:8080/client/api?command=createSSHKeyPair&name=cfmykey&apikey=QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A&signature=gPmSPYqd2fIaSf5%2BX2K%2FvEdgaD8%3D 
<?xml version="1.0" encoding="UTF-8"?><createsshkeypairresponse cloud-stack-version="4.2.1"><keypair><privatekey>-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQCqPLtCyjC3GeLwJODEI9eJLnaanRzxpvU2BWfuUTMem5/s8hwe 
FN2cr7ZC5deW9cR1P394OFtWVarOdvDymHntUsZeJMxGY3ad5WlNL5OBLy1aqSIk 
T7p7S7ZHfFpEZ8Qx6M13E3xc27T9o+DJMPV300vjSL3sJy+vAcrIGyusQQIDAQAB 
AoGAE/mwV3P2J2YINPl+zkUOY3BqRlYtMUXP/BjCSzqH7w1/xIPcPMNiBaKwlkT1 
+Sa5eLCMuoSSYx0GP9fBChZOKBPScMrC/77s03U8lLDSaDPid45st8U9dQy6Id97 
ny1D3+hU2NNvaVPCZYqtvsGhhLhQ3Hj7YnmbqEJN7I8pTUkCQQDRXknbOkjjm1uX 
rqter6jU8r1TS9a3HpJIgbxWD+9qNZmBDJJIb7dB+6NXg3/oljJynB48LRgDlU5Y 
cfwCAGlTAkEA0CdGyBRFNWaqKpLR1wugN0CPDrh4AkwSOCne64ReJiLDaLohcCjr 
ASHF/ShwyQ/lX/fZfo4u/Nld3c5IO9ydmwJBAK024Muq8Nq9kY1wSP9RPNDQ8qmT 
ONTPSh8KlpJtJJouNg16JRwgsPC6C20/sfbvLFV9q9YFSLTONb8ermvJg1kCQCsw 
WxFck1eXK6uVtxBliyKrtIMbZ1siqY0ZsvUvC9Hh2KW8KP/6nXgop8n1QCGXuMIG 
zQvjOICiIUXKbVZuWg0CQEqhaJ1xWZkxd2EuDcPr+JPBJSS/DyOOtdqNQBTpoJLz 
fVkHNwwStJIU4x9/CULbRtvqedyTsIYmnfSKWZtoVJ0= 
-----END RSA PRIVATE KEY----- 
</privatekey><name>cfmykey</name><fingerprint>db:12:1e:5c:79:0c:ba:06:35:51:7e:4c:21:a9:c9:94</fingerprint></keypair></createsshkeypairresponse>root@ubuntu14:~# 
(3) キーファイル保存 
表示された実行結果の「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY- ----」の間内容について、キーファイルを作成して保存する。 
# vi /root/cfmykey 
-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQCqPLtCyjC3GeLwJODEI9eJLnaanRzxpvU2BWfuUTMem5/s8hwe 
FN2cr7ZC5deW9cR1P394OFtWVarOdvDymHntUsZeJMxGY3ad5WlNL5OBLy1aqSIk 
T7p7S7ZHfFpEZ8Qx6M13E3xc27T9o+DJMPV300vjSL3sJy+vAcrIGyusQQIDAQAB 
AoGAE/mwV3P2J2YINPl+zkUOY3BqRlYtMUXP/BjCSzqH7w1/xIPcPMNiBaKwlkT1 
+Sa5eLCMuoSSYx0GP9fBChZOKBPScMrC/77s03U8lLDSaDPid45st8U9dQy6Id97 
ny1D3+hU2NNvaVPCZYqtvsGhhLhQ3Hj7YnmbqEJN7I8pTUkCQQDRXknbOkjjm1uX 
rqter6jU8r1TS9a3HpJIgbxWD+9qNZmBDJJIb7dB+6NXg3/oljJynB48LRgDlU5Y
11 
COPYRIGHT FUJITSU LIMITED 2014 
cfwCAGlTAkEA0CdGyBRFNWaqKpLR1wugN0CPDrh4AkwSOCne64ReJiLDaLohcCjr 
ASHF/ShwyQ/lX/fZfo4u/Nld3c5IO9ydmwJBAK024Muq8Nq9kY1wSP9RPNDQ8qmT 
ONTPSh8KlpJtJJouNg16JRwgsPC6C20/sfbvLFV9q9YFSLTONb8ermvJg1kCQCsw 
WxFck1eXK6uVtxBliyKrtIMbZ1siqY0ZsvUvC9Hh2KW8KP/6nXgop8n1QCGXuMIG 
zQvjOICiIUXKbVZuWg0CQEqhaJ1xWZkxd2EuDcPr+JPBJSS/DyOOtdqNQBTpoJLz 
fVkHNwwStJIU4x9/CULbRtvqedyTsIYmnfSKWZtoVJ0= 
-----END RSA PRIVATE KEY----- 
3.1.6. マニフェストファイルの作成 
インセプショサーバから最初のBOSHサーバ(firstbosh)をデプロイする際に使用するマニフェストァイ ル(micro_bosh.yml)を作成する。 
・micro_bosh.ymlファイルを準備します 
# mkdir -p ~/deployments/firstbosh 
# vi ~/deployments/firstbosh/micro_bosh.yml 
メモ: 以下のマニフェスト作成において、公開手順ではわからなったもや変更を加え部分。 ・networkの ipにインセプショサーバのipを指定 ・endpointの URL指定で/client/api をアドレスに付与して指定 ・default_security_groupsでセキュリティグループ名を[""]で括って指定する。 ・指定するセキュリティグループは、TCP、UDPでの全て通信が可能になっいる必要あり。 ※上記は全てデフォルトで発生したエラーから判断、ソスやOpenstack用マニュアルを参考に確認し たもの 
以下の内容で作成する。 
name: firstbosh 
logging: 
level: DEBUG 
network: 
type: dynamic 
ip: 172.16.10.227 
#インセプショサーバのIPアドレス
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_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A 
# キーペア作成時に指定したもの 
secret_access_key: oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT2TjwmvBerWLuM9OOdnCEtyVpPy02rOkg 
# キーペア作成時に指定したもの 
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 default_security_groups: ["default"] 
# TCP、UDPでの全て通信が可能なセキュリティグループ名を[""]で括って指定 
registry: 
endpoint: http://admin:admin@172.16.10.227:25889 
# インセプショサーバのIPを指定 
user: admin 
password: admin
13 
COPYRIGHT FUJITSU LIMITED 2014 
3.1.7. ソースコードの修正 
(1) デバイスアタッチ処理関連 
メモ: デバイス名の仕様違いから、フォルトモジューではアタッチ時にエラが発生するためソースを修正しエラが発生ないように対応 
デバイスアタッチの不具合対応として、以下ソーコド修正を行っおく。 
ファイル名:~/bosh/bosh_cloudstack_cpi/lib/cloud/cloudstack/cloud.rb 
コード最下部の以分を修正 
----------------------------------------- 
def volume_device_name(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(id) 
# assumes device name begins with "dev/sd" and volume_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」している
14 
COPYRIGHT FUJITSU LIMITED 2014 
(2) stemcellテンプレートVMのイメージサズ変更 
stemcellはクラウドにテンプレート登録する際rsyncされるので、その時点でルートサイズを決められ る。以下のソース修正をすることで、使用するストレージ領域の状況に合わせてstemcellテンプレートのイ メージサイズを調整することが可能。 
■ firstbosh(MicroBOSH)の VMサイズ変更方法 
# vi ~/bosh/bosh_cloudstack_cpi/lib/cloud/cloudstack/cloud.rb 
100行目: 
# disk_size = stemcell_properties["disk"] || (1024 * 10) 
disk_size = stemcell_properties["disk"] || (1024 * 5) 
⇒ bosh micro deploy <path_to_stemcell> 
■ cfのデプロイ時VM(各job用)のサイズ変更方法 
firstboshサーバにログイン 
該当ソースを検索 
# find /var/vcap -name cloud.rb | grep cloudstack 
/var/vcap/data/packages/director/5c21b3ba0f4303ff3a767092b55e6cf446a9b42b/.. 中略../cloudstack/cloud.rb 
上記と同様に100行目付近を編集 
# disk_size = stemcell_properties["disk"] || (1024 * 10) 
disk_size = stemcell_properties["disk"] || (1024 * 5) 
sed で編集するとき 
# sed -i -e "s/(1024 ¥* 10)/(1024 ¥* 5)/g" <cloud.rbのパス> 
⇒ upload stemcell <path_to_stemcell> 
メモ: cloudstackが保持するstemcellのディスクサイズはソーコドに直書きされている。10GBでは大き すぎる(リソースを節約したい)めstemcell登録時にサイズ調整した。
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
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,172.16.10.229,192.168.3.224 
3.2.2. 不足領域の追加 
メモ: Firstbosh上では、あらかじめ最終的なパッケージ格納領域として/var/vcap/store については特別 な領域が確保(用ボリュームのアタッチ)されている、当該作業は同様必要 (格納パッケージの一時展開作業用)にもかわらず、特別な領域準備はされていため同処理で エラーとなってしまう。そのため手動で領域を確保おかければらない。 
次項の bosh upload release を行う際に、Firstboshの VMで領域不足エラー「Error 500001: Uploading release archive failed. Insufficient space on BOSH director in /var/vcap/data/tmp/director/release20140910-2239-1mz1yey」が発生するため、FirstboshVMへロ グインして対象ディレクトリに追加スをマウ領域の確保行う。
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 vda1 vdb vdb1 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
18 
COPYRIGHT FUJITSU LIMITED 2014 
Filesystem Size Used Avail Use% Mounted on 
/ 
dev/vda1 10G 5.1G 4.5G 54% none 480M 168K 480M 1% /dev 
none 486M 0 0% /dev/shm 
none 486M 56K 1% /var/run 
none 486M 0 0% /var/lock 
none 486M 0 0% /lib/init/rw 
/dev/loop0 127M 7.8M 118M 7% /tmp 
/dev/vdb1 30G 621M 28G 3% var/vcap/store 
/dev/vdc 20G 431M 19G 3% var/vcap/data/tmp 
3.2.3. cf-releaseの設定 
(1) cf-releaseのインストール 
以下のコマンドを実行し、cf-releaseのインストールを行う。 
# git clone https://github.com/cloudfoundry/cf-release.git ~/cf-release 
# cd ~/cf-release 
(2) cf-releaseのアップロード 
/root/cf-release/releases内で一番新しいcf-xxx.ymlファイルを確認して、以下のコマンド通り に指定してアップロードを実行する。 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload release releases/cf-183.yml 
※時間がかなりる 
※実行後「Release uploaded」の表示で完了。せず終わった場合には再実行する。 
3.2.4. stemcellのアップロード 
以下のコマンドを例にstemcellのアップロードを行う。 
コマンド:BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload stemcell /tmp/<3.1.3.(3)で作成したstemcellファイル名> 
例) 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload stemcell /tmp/bosh-stemcell-3-cloudstack-kvm-ubuntu-precise.tgz
19 
COPYRIGHT FUJITSU LIMITED 2014 
Verifying stemcell... 
File exists and readable OK 
Verifying tarball... 
Read tarball OK 
Manifest exists OK 
Stemcell image file OK 
Stemcell properties OK 
Stemcell info 
------------- 
Name: bosh-cloudstack-kvm-ubuntu 
Version: 3 
Checking if stemcell already exists... 
No 
Uploading stemcell... 
bosh-stemcell: 100% |ooooooooooooooooooooooooooooooooooooooooooooooooooo| 444.2MB 205.8KB/s Time: 00:36:49 
Director task 3 
Started update stemcell 
Started update stemcell > Extracting archive. Done (00:22) 
Started update stemcell > Verifying manifest. Done (00:00) 
Started update stemcell > Checking if this already exists. Done (00: 00:00) 
Started update stemcell > Uploading bosh-cloudstack-kvm-ubuntu/2063 to the cloud. Done (00:05:18) 
Started update stemcell > Save bosh-cloudstack-kvm-ubuntu/2063 (3a514c5b-1c41-471f-95ad-459ac64dfb79). Done (00:01) 
Done update stemcell (00:05:41) 
Task 3 done 
Started 2014-09-11 01:42:33 UTC 
Finished 2014-09-11 01:48:14 UTC 
Duration 00:05:41
20 
COPYRIGHT FUJITSU LIMITED 2014 
Stemcell uploaded and created.
21 
COPYRIGHT FUJITSU LIMITED 2014 
4. CloudFounryの展開 
4.1. CloudFoundryデプロイの準備 
4.1.1. Cloudstackインスタンスの帯域制限の解除 
起動されたインスタに対してCloudstackで帯域制限が掛けられているため、全のインスタ限を以下のコマンド実行例参考にあらかじめ解除しておく。 
メモ: cfのデプロイ時に多量ダウンードを行うため、帯域制限がかっまではタムアト発生しイが進まない状況に。解決策としてcloudstackが設定している各インスタの帯域制限(tc)を解除。 cloudstack側の設定でも可能だが、必要な帯域幅等情報いためとりあえず全解除。 
(1) kvmホストにログイン 
(2) インスタのネットワークデバ名を確認 
# cat /var/run/libvirt/qemu/i-2-21-VM.xml | grep "<target dev='vnet" 
<target dev='vnet9'/> 
(3) 帯域制限を確認 
# tc -s qdisc | grep vnet9 -A1 
qdisc htb 1: dev vnet9 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
Sent 6095754871 bytes 12742204 pkt (dropped 0, overlimits 3292486 requeues 0) 
-- 
qdisc ingress ffff: dev vnet9 parent fff1 ---------------- 
Sent 19413493186 bytes 19071637 pkt (dropped 3642733, overlimits 0 requeues 0) 
(4) 帯域制限を解除 
解除前の制限一覧: 
# tc qdisc show 
qdisc mq 0: dev eth1 root 
qdisc mq 0: dev eth2 root 
qdisc mq 0: dev eth3 root 
qdisc pfifo_fast 0: dev vnet0 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 2 0 1 
qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 0
22 
COPYRIGHT FUJITSU LIMITED 2014 
1 
qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 0 1 
qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
qdisc ingress ffff: dev vnet7 parent fff1 ---------------- 
qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 0 1 
qdisc htb 1: dev vnet9 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
qdisc ingress ffff: dev vnet9 parent fff1 ---------------- 
qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
qdisc ingress ffff: dev vnet10 parent fff1 ---------------- 
解除: 
# tc qdisc del dev vnet10 root 
# tc qdisc del dev vnet10 ingress 
解除後の制限一覧: 
# tc qdisc show 
qdisc mq 0: dev eth1 root 
qdisc mq 0: dev eth2 root 
qdisc mq 0: dev eth3 root 
qdisc pfifo_fast 0: dev vnet0 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 2 0 1
23 
COPYRIGHT FUJITSU LIMITED 2014 
qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 0 1 
qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 0 1 
qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
qdisc ingress ffff: dev vnet7 parent fff1 ---------------- 
qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 2 0 1 
qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 0 1 
qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 
qdisc ingress ffff: dev vnet10 parent fff1 ---------------- 
(5) 解除を確認 
# tc -s qdisc | grep vnet9 -A1 
qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 0 1 
Sent 66374090 bytes 982435 pkt (dropped 0, overlimits 0 requeues 0) 
4.1.2. デプロイ用マニフェストの作成 
以下の内容でデプロイ用マニフェストファイル(cf.yml)を作成する。 
※以下の内容はデフォルト値。追加修正降に記載 
name: cf 
director_uuid: 884aab78-3b73-494c-aa6f-b7fe9b2d7e1b # UUID shown by the bosh status command ● 
確認して記述releases: 
- name: cf 
version: 147 # Verison number of the uploded release ●現環境で使用しているのは 183 ●
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: <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 update: 
canaries: 1 
canary_watch_time: 30000-60000 
update_watch_time: 30000-60000 
max_in_flight: 4 
resource_pools: 
- name: small 
network: default
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 - 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 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
26 
COPYRIGHT FUJITSU LIMITED 2014 
networks: 
- name: default 
default: [dns, gateway] 
- name: postgres 
release: cf 
template: 
- postgres 
instances: 1 
resource_pool: small 
persistent_disk: 65536 
networks: 
- name: default 
default: [dns, gateway] 
properties: 
db: databases 
- name: nfs_server 
release: cf 
template: 
- debian_nfs_server 
instances: 1 
resource_pool: small 
persistent_disk: 65536 
networks: 
- name: default 
default: [dns, gateway] 
- name: uaa 
release: cf 
template: 
- uaa 
instances: 1 
resource_pool: small 
networks: 
- name: default 
default: [dns, gateway]
27 
COPYRIGHT FUJITSU LIMITED 2014 
- name: cloud_controller 
release: cf 
template: 
- cloud_controller_ng 
instances: 1 
resource_pool: small 
networks: 
- name: default 
default: [dns, gateway] 
properties: 
ccdb: ccdb 
- name: router 
release: cf 
template: 
- gorouter 
instances: 1 
resource_pool: small 
networks: 
- name: default 
default: [dns, gateway] 
# Only for Advanced zone users 
# You can set floating addresses to jobs 
# Acquire Public IP addresses on your Web UI before deploying 
# (Don't remove `default` network above even if floating` is added) 
- name: floating 
static_ips: 
- <IP address for Router> 
- name: health_manager 
release: cf 
template: 
- health_manager_next 
instances: 1 
resource_pool: small 
networks: 
- name: default
28 
COPYRIGHT FUJITSU LIMITED 2014 
default: [dns, gateway] 
- name: dea 
release: cf 
template: dea_next 
instances: 1 
resource_pool: large 
networks: 
- name: default 
default: [dns, gateway] 
properties: 
domain: your.domain.name 
# replace these values with your domain system_domain: your.domain.name 
system_domain_organization: your.domain.name 
app_domains: 
- your.domain.name 
networks: 
apps: default 
management: default 
nats: 
address: 0.nats.default.cf.microbosh 
port: 4222 
user: nats 
password: c1oudc0w 
authorization_timeout: 5 
router: 
port: 8081 
status: 
port: 8080 
user: gorouter 
password: c1oudcow 
dea: &dea
29 
COPYRIGHT FUJITSU LIMITED 2014 
memory_mb: 2048 
disk_mb: 20000 
directory_server_protocol: http 
dea_next: *dea 
syslog_aggregator: 
address: 0.syslog-aggregator.default.cf.microbosh 
port: 54321 
nfs_server: 
address: 0.nfs-server.default.cf.microbosh 
network: "*.cf.microbosh" 
idmapd_domain: your.domain.name 
debian_nfs_server: 
no_root_squash: true 
databases: &databases 
db_scheme: postgres 
address: 0.postgres.default.cf.microbosh 
port: 5524 
roles: 
- tag: admin 
name: ccadmin 
password: c1oudc0w 
- tag: admin 
name: uaaadmin 
password: c1oudc0w 
databases: 
- tag: cc 
name: ccdb 
citext: true 
- tag: uaa 
name: uaadb 
citext: true 
ccdb: &ccdb
30 
COPYRIGHT FUJITSU LIMITED 2014 
db_scheme: postgres 
address: 0.postgres.default.cf.microbosh 
port: 5524 
roles: 
- tag: admin 
name: ccadmin 
password: c1oudc0w 
databases: 
- tag: cc 
name: ccdb 
citext: true 
ccdb_ng: *ccdb 
uaadb: 
db_scheme: postgresql 
address: 0.postgres.default.cf.microbosh 
port: 5524 
roles: 
- tag: admin 
name: uaaadmin 
password: c1oudc0w 
databases: 
- tag: uaa 
name: uaadb 
citext: true 
cc_api_version: v2 
cc: &cc 
logging_level: debug 
external_host: api 
srv_api_uri: http://api.your.domain.name 
cc_partition: default 
db_encryption_key: c1oudc0w 
bootstrap_admin_email: admin@your.domain.name 
bulk_api_password: c1oudc0w 
uaa_resource_id: cloud_controller
31 
COPYRIGHT FUJITSU LIMITED 2014 
staging_upload_user: uploaduser 
staging_upload_password: c1oudc0w 
resource_pool: 
resource_directory_key: cc-resources 
# Local provider when using NFS 
fog_connection: 
provider: Local 
packages: 
app_package_directory_key: cc-packages 
droplets: 
droplet_directory_key: cc-droplets 
default_quota_definition: runaway 
ccng: *cc 
login: 
enabled: false 
uaa: 
url: http://uaa.your.domain.name 
spring_profiles: postgresql 
no_ssl: true 
catalina_opts: -Xmx768m -XX:MaxPermSize=256m 
resource_id: account_manager 
jwt: 
signing_key: | 
-----BEGIN RSA PRIVATE KEY----- 
MIICXAIBAAKBgQDHFr+KICms+tuT1OXJwhCUmR2dKVy7psa8xzElSyzqx7oJyfJ1 
JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMXqHxf+ZH9BL1gk9Y6kCnbM5R6 
0gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBugspULZVNRxq7veq/fzwIDAQAB 
AoGBAJ8dRTQFhIllbHx4GLbpTQsWXJ6w4hZvskJKCLM/o8R4n+0W45pQ1xEiYKdA 
Z/DRcnjltylRImBD8XuLL8iYOQSZXNMb1h3g5/UGbUXLmCgQLOUUlnYt34QOQm+0 
KvUqfMSFBbKMsYBAoQmNdTHBaz3dZa8ON9hh/f5TT8u0OWNRAkEA5opzsIXv+52J 
duc1VGyX3SwlxiE2dStW8wZqGiuLH142n6MKnkLU4ctNLiclw6BZePXFZYIK+AkE 
xQ+k16je5QJBAN0TIKMPWIbbHVr5rkdUqOyezlFFWYOwnMmw/BKa1d3zp54VP/P8 
+5aQ2d4sMoKEOfdWH7UqMe3FszfYFvSu5KMCQFMYeFaaEEP7Jn8rGzfQ5HQd44ek 
lQJqmq6CE2BXbY/i34FuvPcKU70HEEygY6Y9d8J3o6zQ0K9SYNu+pcXt4lkCQA3h 
jJQQe5uEGJTExqed7jllQ0khFJzLMx0K6tj0NeeIzAaGCQz13oo2sCdeGRHO4aDh
32 
COPYRIGHT FUJITSU LIMITED 2014 
HH6Qlq/6UOV5wP8+GAcCQFgRCcB+hrje8hfEEefHcFpyKH+5g1Eu1k0mLrxK2zd+ 
4SlotYRHgPCEubokb2S1zfZDWIXW3HmggnGgM949TlY= 
-----END RSA PRIVATE KEY----- 
verification_key: | 
-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHFr+KICms+tuT1OXJwhCUmR2d 
KVy7psa8xzElSyzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMX 
qHxf+ZH9BL1gk9Y6kCnbM5R60gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBug 
spULZVNRxq7veq/fzwIDAQAB 
-----END PUBLIC KEY----- 
cc: 
client_secret: c1oudc0w 
admin: 
client_secret: c1oudc0w 
batch: 
username: batchuser 
password: c1oudc0w 
client: 
autoapprove: 
- cf 
clients: 
cf: 
override: true 
authorized-grant-types: password,implicit,refresh_token 
authorities: uaa.none 
scope: cloud_controller.read,write,openid,password.cloud_controller.admin,scim.read,write 
access-token-validity: 7200 
refresh-token-validity: 1209600 
scim: 
users: 
- admin|c1oudc0w|scim.write,read,openid,cloud_controller.admin 
- services|c1oudc0w|scim.write,read,openid,cloud_controller.admin
33 
COPYRIGHT FUJITSU LIMITED 2014
34 
COPYRIGHT FUJITSU LIMITED 2014 
4.1.3. マニフェスト内容の修正内容 
上記4.1.2.で作成したマニフェストの内容を修正し保存する。 
----------------------------------------- 
メモ:必要な編集点 ■ヘルスマネージャの名前変更:cfのバージョンアップに対応 health_manager ⇒ hm9000 ■etcdの追加:hm9000その他jobに必要なため ■nfs_serverのアクセス制限 allow_from_entries: の設定 ■ccの quota_definitionsを設定 ■ccの security_group_definitionsの設定 ■ccに buildpackのインストール設定:pushするアプリの動作ため ■項目名 ccdb: ⇒ db: に変更 ■デプロイ時コンパル用のVM台数:compilation.workers デフォルトの6台ではタイムアウト多数発 生のため2台に変更 ■loggregator、trafficcontrollerの追加:cfコマンドユーザへのログ参照機能提供ため ■haproxyの追加:haproxy job動作確認のため など ■VM台数変化、およびcloudstackのリソース状況に合わせてresource_poolsを変更 
4.2. CloudFoundryのデプロイ 
4.2.1. デプロイの実行 
以下のコマンドを例に、ニフェストァイル使用してBOSHデプロイを実行。 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deployment ~/cf.yml 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy 
メモ: deployがマニフェスト設定不足止等でまった場合は、修正後再度deployコマンドで続きを実行 してくれる。jobの起動待ちタイムアウト等で止まった場合は: A. 再度deployコマンドでjob起動待ちから続きが実行される B. 内部ステータの不都合によりデプロイ続き実行が出来ない の2つ場合があり、Bの場合は一度delete deploymentコマンドで初期状態に戻して再度deploy実 行。delete deploymentコマンドが正常終了しない場合は残っているVMを cloudstackの UIからdestroyしてexpangeの必要。
35 
COPYRIGHT FUJITSU LIMITED 2014 
※デプロイされたVMの確認コマンド 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms
36 
COPYRIGHT FUJITSU LIMITED 2014 
5. アプリのプッシュテスト 
5.1. cfコマンドのインストール 
Githubからcf-cliの debファイルをダウンロード 
https://github.com/cloudfoundry/cli#downloads 
「Debian64bit」 
# pkgd -i cf-cli_amd64.deb 
5.2. DNSの登録 
haproxyの jobが動いてるVMの IPアドレスをDNSに登録して、「api」「uaa」「loggregator」およびア プリ名(「dora」はテストアプリ名)を全てそのIPに CNAMEとして登録。 
DNS設定例: 
: 
cf IN A 172.16.10.243 
api IN CNAME cf 
uaa IN CNAME cf 
loggregator IN CNAME cf 
dora IN CNAME cf 
: 
5.3. cfクライアントとしての初期設定 
# cf api http://api.subdomain.domain 
# cf auth admin c1oudc0w 
# cf create-org me 
# cf target -o me 
# cf create-space development 
# cf target -s development 
5.4. テストアプリのプッシュ 
cf-releaseソース内のテト用アプリをッシュして動作確認。 
# cd ~/cf-release/src/acceptance-tests/assets/dora/ 
# cf push 
# curl http://dora.subdomain.domain
37 
COPYRIGHT FUJITSU LIMITED 2014 
6. DBサービス(MySQLサービス)の展開 
以下にDBサービスとしてMySQLサービス(cf-mysql)のデプロイ実行手順を示す。 
6.1. ソースの取得 
# git clone https://github.com/cloudfoundry/cf-mysql-release 
# ./update 
# git checkout v14 
# git submodule update --recursive 
6.2. Upload Releaseの実行 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload release releases/cf-mysql-14.yml 
※実行前に、Proxyサーバの設定(http_proxy環境変数の設定)が必要 
※インセプショサーバのルートディスクに、空き容量が 500MB以上必要 
6.3. マニフェストの作成 
MySQLサービスのデプロイ用にマニフェトァルを作成する。 
# vi ~/cf-mysql-release/cf-mysql-cloudstack.yml 
※natsの ipは bosh vms で調べて記入 
※lifecycle: errand の jobはとりあえずコメントアウト 
※デプロイ前はVMの ipが分からないため mysql/0,1 haproxy の ip設定部分はコメントアウしておく 
コメントアウする部分: 
name: mysql 
networks: 
#dynamic_ips: 
# - 172.16.10.244 
# - 172.16.10.245 
properties: 
#cluster_ips: 
# - 172.16.10.244 
# - 172.16.10.245 
#haproxy_ips: 
# - 172.16.10.243 
name: haproxy 
properties: 
#mysql_ips:
38 
COPYRIGHT FUJITSU LIMITED 2014 
#- 172.16.10.244 
#- 172.16.10.245 
name: cf-mysql-broker 
properties: 
mysql_node: 
#host: 172.16.10.243 <- haproxyの ip 
6.4. MySQLサービスのデプロイ 
(1) 仮デプロイの実行 
以下のコマンドを実行し、MySQLサービスの仮デプロイを行う。 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deployment cf-mysql-cloudstack.yml 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy 
(2) IPアドレスの確認 
上記(1)の実行でVMが作成されたのち、エラー「cluster_ipsが設定されていな」で止まるため、新し い VMの IPアドレスを以下のコマンドで確認する。 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms 
(3) 再デプロイ 
先ほどのコメントアウ部分に正しいIPアドレスを書き込んで再度デプロイを行う。 
# vi ~/cf-mysql-release/cf-mysql-cloudstack.yml 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy 
デプロイ後VMディスク使用量: 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms cf-cloudstack-mysql --vitals 
+-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
| Job/index State Resource Pool IPs |..| System Ephemeral | Persistent | 
| |..| Disk Usage Usage | Disk
39 
COPYRIGHT FUJITSU LIMITED 2014 
+-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
| cf-mysql-broker/0 | running small | 172.16.10.231 |..| 26% 81% | 
n/a | haproxy/0 running small 172.16.10.243 |..| 26% 5% | 
n/a | mysql/0 running large 172.16.10.245 |..| 26% 13% | 
28% | mysql/1 running large 172.16.10.244 |..| 26% 13% | 
28% +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms cf-cloudstack-mysql --vitals 
+-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
| Job/index State Resource Pool IPs |..| System Ephemeral | 
Persistent | |..| Disk Usage Usage | 
Disk +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
| cf-mysql-broker/0 | running | small 172.16.10.231 |..| 26% 81% | 
n/a | haproxy/0 running small 172.16.10.243 |..| 26% 5% | 
n/a | mysql/0 running large 172.16.10.245 |..| 26% | 13% | 
28% | mysql/1 running large 172.16.10.244 |..| 26% 13% | 
28% +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 
6.5. cfサービスの設定 
参照しているDNSサーバに mysql-brokerの IPアドレスを「p-mysql.ssl.osscloud」で登録し、以下 のコマンドを実行してcfサービスの設定を行う。
40 
COPYRIGHT FUJITSU LIMITED 2014 
# cf create-service-broker p-mysql admin password http://p-mysql.ssl.osscloud 
# cf enable-service-access p-mysql 
確認 
# cf service-access

CloudFoundry 2 on Apache CloudStack 4.2.1

  • 1.
    i COPYRIGHT FUJITSULIMITED 2014 ※本資料は CloudStack Advent Calendar 2014の 16日目のエントリです。 CloudFoundry 2 on Apache CloudStack 4.2.1 Powered by 富士通株式会社 OSS技術センター はじめに 本資料は、Apache CloudStack 4.2.1の上に CloudFoundry 2環境を構築した際の手順メモです。 本手順は以下の環境を想定しています。 クラウド基盤 Cloudstack Ver4.2.1 VM Ubuntu 12.04 ストレージ領域 プライマリストレージ:約 350GB セカンダリストレージ:約150GB また、本手順では、特に指定がない限り管理者(root)を使用しています。
  • 2.
    1 COPYRIGHT FUJITSULIMITED 2014 1. 前提 CloudFoundry環境を動作させる(構築す)環境として、以下あらかじめ準備ておく。 ・CloudStack環境(KVM使用) ・UbuntuOSイメージ(Ver12.04) ・以下のコンピュータオファリグ ○ コンピュータオファリグ コンピュータオファリグ名 CPU メモリ m1.small 1core 500MB m1.medium2 1core 2GB m1.large 2core 2GB m1.large2 2core 4GB ○ ディスクオファリング ディスクオファリング名 サイズ disk2gb 2GB disk10gb 10GB disk20gb 20GB
  • 3.
    2 COPYRIGHT FUJITSULIMITED 2014 2. インセプションサーバの構築 CloudFoundryのインストールにあたり、BOSHによるデプロイを行うための最初BOSH(Micro BOSH)サー バ(インセプショサーバ)をCloudstack上にUbuntuVMを起動して構築する。 2.1. Ubuntuイメージの起動 あらかじめCloudstack上に準備したUbuntu12のイメージを利用してインセプショサーバとなるUbuntu の VMを起動する。 ※使用コンピュータオファリグ:m1.small 2.2. インセプションサーバ上での各設定変更 起動したUbuntuの VM上で、以下の各設定を行う。 2.2.1. rootログイン設定 インセプショサーバにrootユーザでのログインとリモトrootログイン許可の設定を行う。 (1) rootでログインし、パスワードの設定を行う。 $ sudo su – # passwd (2) rootでのssh接続を許可する設定 設定ファイル(sshd_config)を修正。 # vi /etc/ssh/sshd_config PermitRootLogin without-password ↓ PermitRootLogin yes ----- #PasswordAuthentication yes ↓ PasswordAuthentication yes (3) 設定更新 上記修正後プロセス再起動。 # initctl restart ssh
  • 4.
    3 COPYRIGHT FUJITSULIMITED 2014 2.2.2. 内部作業領域のサイズ拡張 作業時に内部で使用される領域(/tmp)に対して、領域不足ならいようあかじめCloudstack上で ストレージを作成しアタッチ・マウンておく。 (1)ストレージの作成 アタッチするストレージ(20GB)をGUIから作成しアタッチする。 (2)領域のマウント 作成したストレージを/tmpにマウントする。 # mount /dev/vdb tmp ※ アタッチしたボリュームが/dev/vdbの場合 メモ: 参考インストール手順のセプショサバデフォ設定では、当該作業領域容量不足により内部 処理でエラーが発生していため、上記設定を追加すること対応行っ。 2.2.3. プロキシサーバの設定 必要に応じて、以下のコマンドを例に、インセプショサーバの環境変数(http_proxy、https_proxy)へ プロキシサーバを設定する。 設定例) export http_proxy=http://{Proxy Server}:{Port} export https_proxy=http:// {Proxy Server}:{Port} 2.3. インセプションサーバへのインストール 2.3.1. パッケージリポジトリの追加とupgradeの実行 apt-get実行用に、Japanese Teamのパッケージリポトを以下コマンド例に追加する。 # wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add - # wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt- key add - # wget https://www.ubuntulinux.jp/sources.list.d/precise.list -O /etc/apt/sources.list.d/ubuntu-ja.list # apt-get update
  • 5.
    4 COPYRIGHT FUJITSULIMITED 2014 パッケージの更新(upgrade)を行う。 # apt-get upgrade 2.3.2. acpiphpカーネルモジュールのアクティブ化 以下のコマンドを例に、acpiphpカーネルモジュのアクティブ化を行う。 # modprobe acpiphp # sh -c "echo acpiphp >> /etc/modules" 2.3.3. 関連ツールのインストール 必要となる関連ツール(パッケジ)のインストを以下コマド例に行う。 (1) gitインストール # apt-add-repository ppa:git-core/ppa # apt-get update # sudo apt-get install git-core (2) Ruby、Gems関連の事前インストール # apt-get install g++ make libxslt-dev libxml2-dev libsqlite3-dev zlib1g-dev libreadline-dev libssl-dev libcurl4-openssl-dev (3) stemcell関連のインストール # apt-get install libsqlite3-dev genisoimage libmysqlclient-dev libpq-dev debootstrap kpartx 2.3.4. Rubyインストール (1) プロキシサーバの設定 gitインストールのために以下コマドを例プロキシサバgitの configに設定する。 # git config --global http.proxy http://mp067159:8160584683@rep.proxy.nic.fujitsu.com:8080/ # git config --global https.proxy http://mp067159:8160584683@rep.proxy.nic.fujitsu.com:8080/
  • 6.
    5 COPYRIGHT FUJITSULIMITED 2014 (2) rbenvのインストール rbenvおよび関連パッケージを以下のコマンド例にイストルする。 # apt-get install build-essential bison libreadline6-dev curl git-core zlib1g- dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev autoconf libncurses5-dev # git clone http://github.com/sstephenson/rbenv.git .rbenv # git clone http://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build (3) profileの設定 rbenvを 使うために必要な設定~/.bash_profile に記述する。 $ vi ~/.bash_profile export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" 保存後に反映する。 $ source ~/.bash_profile (4) Rubyインストール rbenvを利用し、Rubyのインストールリを表示する。 # rbenv install --list リストされたバージョンを参照してRubyのインストールを行う。 # rbenv install 1.9.3-p547 # rbenv global 1.9.3-p547 # ruby --version ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]
  • 7.
    6 COPYRIGHT FUJITSULIMITED 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_image.tgz] オプション説明:ubuntu … OS名を指定する。 :precise … OSのバージョンを指定(ubuntuの場合、preciseや lucid) :/tmp/ubuntu_base_image.tgz … 作成ファイル名 (2) ソース(bosh-stemcell)内のカーネルバジョン指定箇所修正 上記コマンドで一時的に作成されるイメージファル用ディレクトリ(/mnt/stemcells/null/null/ ubuntu/work/chroot)もしくは作成た圧縮イメージファル内の「/boot」内に格納されているカ
  • 8.
    7 COPYRIGHT FUJITSULIMITED 2014 ーネルファイ(initrd.img-xxx-virtual、vmlinuz-xxx-virtual)のバージョンを確認し、/root/ bosh/bosh-stemcell/spec/stemcells/ubuntu_precise_spec.rbの 3行目から14行目(describe ~ end まで)に記載されている各カーネルバジョンを確認した合わせ修正す。 # ls /mnt/stemcells/null/ubuntu/work/chroot/boot System.map-3.2.0-70-virtual config-3.2.0-70-virtual initrd.img-3.2.0-70-virtual 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=UUID=' } 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 FUJITSULIMITED 2014 it { should contain ' kernel /boot/vmlinuz-3.2.0-70-virtual ro root=UUID=' } 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,precise,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であらかじめ作成しておく)
  • 10.
    9 COPYRIGHT FUJITSULIMITED 2014 api_key="QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A" # please set your secret key(CloudStackGUIであらかじめ作成しておく) secret_key="oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT2TjwmvBerWLuM9OOdnCEtyVpPy02rOkg" api_path="/client/api?" if [ $# -lt 1 ]; then echo "usage: $0 command=... paramter=... parameter=..."; exit; elif [[ $1 != "command="* ]]; then echo "usage: $0 command=... paramter=... parameter=..."; exit; elif [ $1 == "command=" ]; then echo "usage: $0 command=... paramter=... parameter=..."; exit; fi data_array=("$@" "apikey=${api_key}") temp1=$(echo -n ${data_array[@]} | ¥ tr " "¥n" | ¥ sort -fd -t'=' | ¥ perl -pe's/([^-_.~A-Za-z0-9=¥s])/sprintf("%%%02X", ord($1))/seg'| ¥ tr "A-Z" "a-z" | ¥ tr "¥n" "&" ) signature=$(echo -n ${temp1[@]}) signature=${signature%&} signature=$(echo -n $signature | ¥ openssl sha1 -binary -hmac $secret_key | ¥ openssl base64 ) signature=$(echo -n $signature | ¥ perl -pe's/([^-_.~A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg') url=${address}${api_path}$(echo -n $@ | tr " "&")"&"apikey=$api_key"&"signature=$signature echo " SEND URL: $url" curl ${url} (2) キーペア作成 上記で作成したスクリプトファイルを以下のコマンドとおりに実行、キーペアを作成する。(name=はキー名 として任意の名前を指定可能) コマンド:./kick_api.sh command=createSSHKeyPair name=<キー名> 例)
  • 11.
    10 COPYRIGHT FUJITSULIMITED 2014 # ./kick_api.sh command=createSSHKeyPair name=cfmykey SEND URL: http://172.16.10.224:8080/client/api?command=createSSHKeyPair&name=cfmykey&apikey=QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A&signature=gPmSPYqd2fIaSf5%2BX2K%2FvEdgaD8%3D <?xml version="1.0" encoding="UTF-8"?><createsshkeypairresponse cloud-stack-version="4.2.1"><keypair><privatekey>-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCqPLtCyjC3GeLwJODEI9eJLnaanRzxpvU2BWfuUTMem5/s8hwe FN2cr7ZC5deW9cR1P394OFtWVarOdvDymHntUsZeJMxGY3ad5WlNL5OBLy1aqSIk T7p7S7ZHfFpEZ8Qx6M13E3xc27T9o+DJMPV300vjSL3sJy+vAcrIGyusQQIDAQAB AoGAE/mwV3P2J2YINPl+zkUOY3BqRlYtMUXP/BjCSzqH7w1/xIPcPMNiBaKwlkT1 +Sa5eLCMuoSSYx0GP9fBChZOKBPScMrC/77s03U8lLDSaDPid45st8U9dQy6Id97 ny1D3+hU2NNvaVPCZYqtvsGhhLhQ3Hj7YnmbqEJN7I8pTUkCQQDRXknbOkjjm1uX rqter6jU8r1TS9a3HpJIgbxWD+9qNZmBDJJIb7dB+6NXg3/oljJynB48LRgDlU5Y cfwCAGlTAkEA0CdGyBRFNWaqKpLR1wugN0CPDrh4AkwSOCne64ReJiLDaLohcCjr ASHF/ShwyQ/lX/fZfo4u/Nld3c5IO9ydmwJBAK024Muq8Nq9kY1wSP9RPNDQ8qmT ONTPSh8KlpJtJJouNg16JRwgsPC6C20/sfbvLFV9q9YFSLTONb8ermvJg1kCQCsw WxFck1eXK6uVtxBliyKrtIMbZ1siqY0ZsvUvC9Hh2KW8KP/6nXgop8n1QCGXuMIG zQvjOICiIUXKbVZuWg0CQEqhaJ1xWZkxd2EuDcPr+JPBJSS/DyOOtdqNQBTpoJLz fVkHNwwStJIU4x9/CULbRtvqedyTsIYmnfSKWZtoVJ0= -----END RSA PRIVATE KEY----- </privatekey><name>cfmykey</name><fingerprint>db:12:1e:5c:79:0c:ba:06:35:51:7e:4c:21:a9:c9:94</fingerprint></keypair></createsshkeypairresponse>root@ubuntu14:~# (3) キーファイル保存 表示された実行結果の「-----BEGIN RSA PRIVATE KEY-----」から「-----END RSA PRIVATE KEY- ----」の間内容について、キーファイルを作成して保存する。 # vi /root/cfmykey -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCqPLtCyjC3GeLwJODEI9eJLnaanRzxpvU2BWfuUTMem5/s8hwe FN2cr7ZC5deW9cR1P394OFtWVarOdvDymHntUsZeJMxGY3ad5WlNL5OBLy1aqSIk T7p7S7ZHfFpEZ8Qx6M13E3xc27T9o+DJMPV300vjSL3sJy+vAcrIGyusQQIDAQAB AoGAE/mwV3P2J2YINPl+zkUOY3BqRlYtMUXP/BjCSzqH7w1/xIPcPMNiBaKwlkT1 +Sa5eLCMuoSSYx0GP9fBChZOKBPScMrC/77s03U8lLDSaDPid45st8U9dQy6Id97 ny1D3+hU2NNvaVPCZYqtvsGhhLhQ3Hj7YnmbqEJN7I8pTUkCQQDRXknbOkjjm1uX rqter6jU8r1TS9a3HpJIgbxWD+9qNZmBDJJIb7dB+6NXg3/oljJynB48LRgDlU5Y
  • 12.
    11 COPYRIGHT FUJITSULIMITED 2014 cfwCAGlTAkEA0CdGyBRFNWaqKpLR1wugN0CPDrh4AkwSOCne64ReJiLDaLohcCjr ASHF/ShwyQ/lX/fZfo4u/Nld3c5IO9ydmwJBAK024Muq8Nq9kY1wSP9RPNDQ8qmT ONTPSh8KlpJtJJouNg16JRwgsPC6C20/sfbvLFV9q9YFSLTONb8ermvJg1kCQCsw WxFck1eXK6uVtxBliyKrtIMbZ1siqY0ZsvUvC9Hh2KW8KP/6nXgop8n1QCGXuMIG zQvjOICiIUXKbVZuWg0CQEqhaJ1xWZkxd2EuDcPr+JPBJSS/DyOOtdqNQBTpoJLz fVkHNwwStJIU4x9/CULbRtvqedyTsIYmnfSKWZtoVJ0= -----END RSA PRIVATE KEY----- 3.1.6. マニフェストファイルの作成 インセプショサーバから最初のBOSHサーバ(firstbosh)をデプロイする際に使用するマニフェストァイ ル(micro_bosh.yml)を作成する。 ・micro_bosh.ymlファイルを準備します # mkdir -p ~/deployments/firstbosh # vi ~/deployments/firstbosh/micro_bosh.yml メモ: 以下のマニフェスト作成において、公開手順ではわからなったもや変更を加え部分。 ・networkの ipにインセプショサーバのipを指定 ・endpointの URL指定で/client/api をアドレスに付与して指定 ・default_security_groupsでセキュリティグループ名を[""]で括って指定する。 ・指定するセキュリティグループは、TCP、UDPでの全て通信が可能になっいる必要あり。 ※上記は全てデフォルトで発生したエラーから判断、ソスやOpenstack用マニュアルを参考に確認し たもの 以下の内容で作成する。 name: firstbosh logging: level: DEBUG network: type: dynamic ip: 172.16.10.227 #インセプショサーバのIPアドレス
  • 13.
    12 COPYRIGHT FUJITSULIMITED 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_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5WaJZNPwY0o1Y_ORP2A # キーペア作成時に指定したもの secret_access_key: oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT2TjwmvBerWLuM9OOdnCEtyVpPy02rOkg # キーペア作成時に指定したもの 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 default_security_groups: ["default"] # TCP、UDPでの全て通信が可能なセキュリティグループ名を[""]で括って指定 registry: endpoint: http://admin:admin@172.16.10.227:25889 # インセプショサーバのIPを指定 user: admin password: admin
  • 14.
    13 COPYRIGHT FUJITSULIMITED 2014 3.1.7. ソースコードの修正 (1) デバイスアタッチ処理関連 メモ: デバイス名の仕様違いから、フォルトモジューではアタッチ時にエラが発生するためソースを修正しエラが発生ないように対応 デバイスアタッチの不具合対応として、以下ソーコド修正を行っおく。 ファイル名:~/bosh/bosh_cloudstack_cpi/lib/cloud/cloudstack/cloud.rb コード最下部の以分を修正 ----------------------------------------- def volume_device_name(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(id) # assumes device name begins with "dev/sd" and volume_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」している
  • 15.
    14 COPYRIGHT FUJITSULIMITED 2014 (2) stemcellテンプレートVMのイメージサズ変更 stemcellはクラウドにテンプレート登録する際rsyncされるので、その時点でルートサイズを決められ る。以下のソース修正をすることで、使用するストレージ領域の状況に合わせてstemcellテンプレートのイ メージサイズを調整することが可能。 ■ firstbosh(MicroBOSH)の VMサイズ変更方法 # vi ~/bosh/bosh_cloudstack_cpi/lib/cloud/cloudstack/cloud.rb 100行目: # disk_size = stemcell_properties["disk"] || (1024 * 10) disk_size = stemcell_properties["disk"] || (1024 * 5) ⇒ bosh micro deploy <path_to_stemcell> ■ cfのデプロイ時VM(各job用)のサイズ変更方法 firstboshサーバにログイン 該当ソースを検索 # find /var/vcap -name cloud.rb | grep cloudstack /var/vcap/data/packages/director/5c21b3ba0f4303ff3a767092b55e6cf446a9b42b/.. 中略../cloudstack/cloud.rb 上記と同様に100行目付近を編集 # disk_size = stemcell_properties["disk"] || (1024 * 10) disk_size = stemcell_properties["disk"] || (1024 * 5) sed で編集するとき # sed -i -e "s/(1024 ¥* 10)/(1024 ¥* 5)/g" <cloud.rbのパス> ⇒ upload stemcell <path_to_stemcell> メモ: cloudstackが保持するstemcellのディスクサイズはソーコドに直書きされている。10GBでは大き すぎる(リソースを節約したい)めstemcell登録時にサイズ調整した。
  • 16.
    15 COPYRIGHT FUJITSULIMITED 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 FUJITSULIMITED 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,172.16.10.229,192.168.3.224 3.2.2. 不足領域の追加 メモ: Firstbosh上では、あらかじめ最終的なパッケージ格納領域として/var/vcap/store については特別 な領域が確保(用ボリュームのアタッチ)されている、当該作業は同様必要 (格納パッケージの一時展開作業用)にもかわらず、特別な領域準備はされていため同処理で エラーとなってしまう。そのため手動で領域を確保おかければらない。 次項の bosh upload release を行う際に、Firstboshの VMで領域不足エラー「Error 500001: Uploading release archive failed. Insufficient space on BOSH director in /var/vcap/data/tmp/director/release20140910-2239-1mz1yey」が発生するため、FirstboshVMへロ グインして対象ディレクトリに追加スをマウ領域の確保行う。
  • 18.
    17 COPYRIGHT FUJITSULIMITED 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 vda1 vdb vdb1 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
  • 19.
    18 COPYRIGHT FUJITSULIMITED 2014 Filesystem Size Used Avail Use% Mounted on / dev/vda1 10G 5.1G 4.5G 54% none 480M 168K 480M 1% /dev none 486M 0 0% /dev/shm none 486M 56K 1% /var/run none 486M 0 0% /var/lock none 486M 0 0% /lib/init/rw /dev/loop0 127M 7.8M 118M 7% /tmp /dev/vdb1 30G 621M 28G 3% var/vcap/store /dev/vdc 20G 431M 19G 3% var/vcap/data/tmp 3.2.3. cf-releaseの設定 (1) cf-releaseのインストール 以下のコマンドを実行し、cf-releaseのインストールを行う。 # git clone https://github.com/cloudfoundry/cf-release.git ~/cf-release # cd ~/cf-release (2) cf-releaseのアップロード /root/cf-release/releases内で一番新しいcf-xxx.ymlファイルを確認して、以下のコマンド通り に指定してアップロードを実行する。 # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload release releases/cf-183.yml ※時間がかなりる ※実行後「Release uploaded」の表示で完了。せず終わった場合には再実行する。 3.2.4. stemcellのアップロード 以下のコマンドを例にstemcellのアップロードを行う。 コマンド:BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload stemcell /tmp/<3.1.3.(3)で作成したstemcellファイル名> 例) # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload stemcell /tmp/bosh-stemcell-3-cloudstack-kvm-ubuntu-precise.tgz
  • 20.
    19 COPYRIGHT FUJITSULIMITED 2014 Verifying stemcell... File exists and readable OK Verifying tarball... Read tarball OK Manifest exists OK Stemcell image file OK Stemcell properties OK Stemcell info ------------- Name: bosh-cloudstack-kvm-ubuntu Version: 3 Checking if stemcell already exists... No Uploading stemcell... bosh-stemcell: 100% |ooooooooooooooooooooooooooooooooooooooooooooooooooo| 444.2MB 205.8KB/s Time: 00:36:49 Director task 3 Started update stemcell Started update stemcell > Extracting archive. Done (00:22) Started update stemcell > Verifying manifest. Done (00:00) Started update stemcell > Checking if this already exists. Done (00: 00:00) Started update stemcell > Uploading bosh-cloudstack-kvm-ubuntu/2063 to the cloud. Done (00:05:18) Started update stemcell > Save bosh-cloudstack-kvm-ubuntu/2063 (3a514c5b-1c41-471f-95ad-459ac64dfb79). Done (00:01) Done update stemcell (00:05:41) Task 3 done Started 2014-09-11 01:42:33 UTC Finished 2014-09-11 01:48:14 UTC Duration 00:05:41
  • 21.
    20 COPYRIGHT FUJITSULIMITED 2014 Stemcell uploaded and created.
  • 22.
    21 COPYRIGHT FUJITSULIMITED 2014 4. CloudFounryの展開 4.1. CloudFoundryデプロイの準備 4.1.1. Cloudstackインスタンスの帯域制限の解除 起動されたインスタに対してCloudstackで帯域制限が掛けられているため、全のインスタ限を以下のコマンド実行例参考にあらかじめ解除しておく。 メモ: cfのデプロイ時に多量ダウンードを行うため、帯域制限がかっまではタムアト発生しイが進まない状況に。解決策としてcloudstackが設定している各インスタの帯域制限(tc)を解除。 cloudstack側の設定でも可能だが、必要な帯域幅等情報いためとりあえず全解除。 (1) kvmホストにログイン (2) インスタのネットワークデバ名を確認 # cat /var/run/libvirt/qemu/i-2-21-VM.xml | grep "<target dev='vnet" <target dev='vnet9'/> (3) 帯域制限を確認 # tc -s qdisc | grep vnet9 -A1 qdisc htb 1: dev vnet9 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 Sent 6095754871 bytes 12742204 pkt (dropped 0, overlimits 3292486 requeues 0) -- qdisc ingress ffff: dev vnet9 parent fff1 ---------------- Sent 19413493186 bytes 19071637 pkt (dropped 3642733, overlimits 0 requeues 0) (4) 帯域制限を解除 解除前の制限一覧: # tc qdisc show qdisc mq 0: dev eth1 root qdisc mq 0: dev eth2 root qdisc mq 0: dev eth3 root qdisc pfifo_fast 0: dev vnet0 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 2 0 1 qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 0
  • 23.
    22 COPYRIGHT FUJITSULIMITED 2014 1 qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 0 1 qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc ingress ffff: dev vnet7 parent fff1 ---------------- qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 0 1 qdisc htb 1: dev vnet9 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc ingress ffff: dev vnet9 parent fff1 ---------------- qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc ingress ffff: dev vnet10 parent fff1 ---------------- 解除: # tc qdisc del dev vnet10 root # tc qdisc del dev vnet10 ingress 解除後の制限一覧: # tc qdisc show qdisc mq 0: dev eth1 root qdisc mq 0: dev eth2 root qdisc mq 0: dev eth3 root qdisc pfifo_fast 0: dev vnet0 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 2 0 1
  • 24.
    23 COPYRIGHT FUJITSULIMITED 2014 qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 0 1 qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 0 1 qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc ingress ffff: dev vnet7 parent fff1 ---------------- qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 2 0 1 qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 0 1 qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc ingress ffff: dev vnet10 parent fff1 ---------------- (5) 解除を確認 # tc -s qdisc | grep vnet9 -A1 qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 0 1 Sent 66374090 bytes 982435 pkt (dropped 0, overlimits 0 requeues 0) 4.1.2. デプロイ用マニフェストの作成 以下の内容でデプロイ用マニフェストファイル(cf.yml)を作成する。 ※以下の内容はデフォルト値。追加修正降に記載 name: cf director_uuid: 884aab78-3b73-494c-aa6f-b7fe9b2d7e1b # UUID shown by the bosh status command ● 確認して記述releases: - name: cf version: 147 # Verison number of the uploded release ●現環境で使用しているのは 183 ●
  • 25.
    24 COPYRIGHT FUJITSULIMITED 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: <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 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 FUJITSULIMITED 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 - 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 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
  • 27.
    26 COPYRIGHT FUJITSULIMITED 2014 networks: - name: default default: [dns, gateway] - name: postgres release: cf template: - postgres instances: 1 resource_pool: small persistent_disk: 65536 networks: - name: default default: [dns, gateway] properties: db: databases - name: nfs_server release: cf template: - debian_nfs_server instances: 1 resource_pool: small persistent_disk: 65536 networks: - name: default default: [dns, gateway] - name: uaa release: cf template: - uaa instances: 1 resource_pool: small networks: - name: default default: [dns, gateway]
  • 28.
    27 COPYRIGHT FUJITSULIMITED 2014 - name: cloud_controller release: cf template: - cloud_controller_ng instances: 1 resource_pool: small networks: - name: default default: [dns, gateway] properties: ccdb: ccdb - name: router release: cf template: - gorouter instances: 1 resource_pool: small networks: - name: default default: [dns, gateway] # Only for Advanced zone users # You can set floating addresses to jobs # Acquire Public IP addresses on your Web UI before deploying # (Don't remove `default` network above even if floating` is added) - name: floating static_ips: - <IP address for Router> - name: health_manager release: cf template: - health_manager_next instances: 1 resource_pool: small networks: - name: default
  • 29.
    28 COPYRIGHT FUJITSULIMITED 2014 default: [dns, gateway] - name: dea release: cf template: dea_next instances: 1 resource_pool: large networks: - name: default default: [dns, gateway] properties: domain: your.domain.name # replace these values with your domain system_domain: your.domain.name system_domain_organization: your.domain.name app_domains: - your.domain.name networks: apps: default management: default nats: address: 0.nats.default.cf.microbosh port: 4222 user: nats password: c1oudc0w authorization_timeout: 5 router: port: 8081 status: port: 8080 user: gorouter password: c1oudcow dea: &dea
  • 30.
    29 COPYRIGHT FUJITSULIMITED 2014 memory_mb: 2048 disk_mb: 20000 directory_server_protocol: http dea_next: *dea syslog_aggregator: address: 0.syslog-aggregator.default.cf.microbosh port: 54321 nfs_server: address: 0.nfs-server.default.cf.microbosh network: "*.cf.microbosh" idmapd_domain: your.domain.name debian_nfs_server: no_root_squash: true databases: &databases db_scheme: postgres address: 0.postgres.default.cf.microbosh port: 5524 roles: - tag: admin name: ccadmin password: c1oudc0w - tag: admin name: uaaadmin password: c1oudc0w databases: - tag: cc name: ccdb citext: true - tag: uaa name: uaadb citext: true ccdb: &ccdb
  • 31.
    30 COPYRIGHT FUJITSULIMITED 2014 db_scheme: postgres address: 0.postgres.default.cf.microbosh port: 5524 roles: - tag: admin name: ccadmin password: c1oudc0w databases: - tag: cc name: ccdb citext: true ccdb_ng: *ccdb uaadb: db_scheme: postgresql address: 0.postgres.default.cf.microbosh port: 5524 roles: - tag: admin name: uaaadmin password: c1oudc0w databases: - tag: uaa name: uaadb citext: true cc_api_version: v2 cc: &cc logging_level: debug external_host: api srv_api_uri: http://api.your.domain.name cc_partition: default db_encryption_key: c1oudc0w bootstrap_admin_email: admin@your.domain.name bulk_api_password: c1oudc0w uaa_resource_id: cloud_controller
  • 32.
    31 COPYRIGHT FUJITSULIMITED 2014 staging_upload_user: uploaduser staging_upload_password: c1oudc0w resource_pool: resource_directory_key: cc-resources # Local provider when using NFS fog_connection: provider: Local packages: app_package_directory_key: cc-packages droplets: droplet_directory_key: cc-droplets default_quota_definition: runaway ccng: *cc login: enabled: false uaa: url: http://uaa.your.domain.name spring_profiles: postgresql no_ssl: true catalina_opts: -Xmx768m -XX:MaxPermSize=256m resource_id: account_manager jwt: signing_key: | -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDHFr+KICms+tuT1OXJwhCUmR2dKVy7psa8xzElSyzqx7oJyfJ1 JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMXqHxf+ZH9BL1gk9Y6kCnbM5R6 0gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBugspULZVNRxq7veq/fzwIDAQAB AoGBAJ8dRTQFhIllbHx4GLbpTQsWXJ6w4hZvskJKCLM/o8R4n+0W45pQ1xEiYKdA Z/DRcnjltylRImBD8XuLL8iYOQSZXNMb1h3g5/UGbUXLmCgQLOUUlnYt34QOQm+0 KvUqfMSFBbKMsYBAoQmNdTHBaz3dZa8ON9hh/f5TT8u0OWNRAkEA5opzsIXv+52J duc1VGyX3SwlxiE2dStW8wZqGiuLH142n6MKnkLU4ctNLiclw6BZePXFZYIK+AkE xQ+k16je5QJBAN0TIKMPWIbbHVr5rkdUqOyezlFFWYOwnMmw/BKa1d3zp54VP/P8 +5aQ2d4sMoKEOfdWH7UqMe3FszfYFvSu5KMCQFMYeFaaEEP7Jn8rGzfQ5HQd44ek lQJqmq6CE2BXbY/i34FuvPcKU70HEEygY6Y9d8J3o6zQ0K9SYNu+pcXt4lkCQA3h jJQQe5uEGJTExqed7jllQ0khFJzLMx0K6tj0NeeIzAaGCQz13oo2sCdeGRHO4aDh
  • 33.
    32 COPYRIGHT FUJITSULIMITED 2014 HH6Qlq/6UOV5wP8+GAcCQFgRCcB+hrje8hfEEefHcFpyKH+5g1Eu1k0mLrxK2zd+ 4SlotYRHgPCEubokb2S1zfZDWIXW3HmggnGgM949TlY= -----END RSA PRIVATE KEY----- verification_key: | -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHFr+KICms+tuT1OXJwhCUmR2d KVy7psa8xzElSyzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMX qHxf+ZH9BL1gk9Y6kCnbM5R60gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBug spULZVNRxq7veq/fzwIDAQAB -----END PUBLIC KEY----- cc: client_secret: c1oudc0w admin: client_secret: c1oudc0w batch: username: batchuser password: c1oudc0w client: autoapprove: - cf clients: cf: override: true authorized-grant-types: password,implicit,refresh_token authorities: uaa.none scope: cloud_controller.read,write,openid,password.cloud_controller.admin,scim.read,write access-token-validity: 7200 refresh-token-validity: 1209600 scim: users: - admin|c1oudc0w|scim.write,read,openid,cloud_controller.admin - services|c1oudc0w|scim.write,read,openid,cloud_controller.admin
  • 34.
  • 35.
    34 COPYRIGHT FUJITSULIMITED 2014 4.1.3. マニフェスト内容の修正内容 上記4.1.2.で作成したマニフェストの内容を修正し保存する。 ----------------------------------------- メモ:必要な編集点 ■ヘルスマネージャの名前変更:cfのバージョンアップに対応 health_manager ⇒ hm9000 ■etcdの追加:hm9000その他jobに必要なため ■nfs_serverのアクセス制限 allow_from_entries: の設定 ■ccの quota_definitionsを設定 ■ccの security_group_definitionsの設定 ■ccに buildpackのインストール設定:pushするアプリの動作ため ■項目名 ccdb: ⇒ db: に変更 ■デプロイ時コンパル用のVM台数:compilation.workers デフォルトの6台ではタイムアウト多数発 生のため2台に変更 ■loggregator、trafficcontrollerの追加:cfコマンドユーザへのログ参照機能提供ため ■haproxyの追加:haproxy job動作確認のため など ■VM台数変化、およびcloudstackのリソース状況に合わせてresource_poolsを変更 4.2. CloudFoundryのデプロイ 4.2.1. デプロイの実行 以下のコマンドを例に、ニフェストァイル使用してBOSHデプロイを実行。 # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deployment ~/cf.yml # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy メモ: deployがマニフェスト設定不足止等でまった場合は、修正後再度deployコマンドで続きを実行 してくれる。jobの起動待ちタイムアウト等で止まった場合は: A. 再度deployコマンドでjob起動待ちから続きが実行される B. 内部ステータの不都合によりデプロイ続き実行が出来ない の2つ場合があり、Bの場合は一度delete deploymentコマンドで初期状態に戻して再度deploy実 行。delete deploymentコマンドが正常終了しない場合は残っているVMを cloudstackの UIからdestroyしてexpangeの必要。
  • 36.
    35 COPYRIGHT FUJITSULIMITED 2014 ※デプロイされたVMの確認コマンド # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms
  • 37.
    36 COPYRIGHT FUJITSULIMITED 2014 5. アプリのプッシュテスト 5.1. cfコマンドのインストール Githubからcf-cliの debファイルをダウンロード https://github.com/cloudfoundry/cli#downloads 「Debian64bit」 # pkgd -i cf-cli_amd64.deb 5.2. DNSの登録 haproxyの jobが動いてるVMの IPアドレスをDNSに登録して、「api」「uaa」「loggregator」およびア プリ名(「dora」はテストアプリ名)を全てそのIPに CNAMEとして登録。 DNS設定例: : cf IN A 172.16.10.243 api IN CNAME cf uaa IN CNAME cf loggregator IN CNAME cf dora IN CNAME cf : 5.3. cfクライアントとしての初期設定 # cf api http://api.subdomain.domain # cf auth admin c1oudc0w # cf create-org me # cf target -o me # cf create-space development # cf target -s development 5.4. テストアプリのプッシュ cf-releaseソース内のテト用アプリをッシュして動作確認。 # cd ~/cf-release/src/acceptance-tests/assets/dora/ # cf push # curl http://dora.subdomain.domain
  • 38.
    37 COPYRIGHT FUJITSULIMITED 2014 6. DBサービス(MySQLサービス)の展開 以下にDBサービスとしてMySQLサービス(cf-mysql)のデプロイ実行手順を示す。 6.1. ソースの取得 # git clone https://github.com/cloudfoundry/cf-mysql-release # ./update # git checkout v14 # git submodule update --recursive 6.2. Upload Releaseの実行 # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh upload release releases/cf-mysql-14.yml ※実行前に、Proxyサーバの設定(http_proxy環境変数の設定)が必要 ※インセプショサーバのルートディスクに、空き容量が 500MB以上必要 6.3. マニフェストの作成 MySQLサービスのデプロイ用にマニフェトァルを作成する。 # vi ~/cf-mysql-release/cf-mysql-cloudstack.yml ※natsの ipは bosh vms で調べて記入 ※lifecycle: errand の jobはとりあえずコメントアウト ※デプロイ前はVMの ipが分からないため mysql/0,1 haproxy の ip設定部分はコメントアウしておく コメントアウする部分: name: mysql networks: #dynamic_ips: # - 172.16.10.244 # - 172.16.10.245 properties: #cluster_ips: # - 172.16.10.244 # - 172.16.10.245 #haproxy_ips: # - 172.16.10.243 name: haproxy properties: #mysql_ips:
  • 39.
    38 COPYRIGHT FUJITSULIMITED 2014 #- 172.16.10.244 #- 172.16.10.245 name: cf-mysql-broker properties: mysql_node: #host: 172.16.10.243 <- haproxyの ip 6.4. MySQLサービスのデプロイ (1) 仮デプロイの実行 以下のコマンドを実行し、MySQLサービスの仮デプロイを行う。 # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deployment cf-mysql-cloudstack.yml # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy (2) IPアドレスの確認 上記(1)の実行でVMが作成されたのち、エラー「cluster_ipsが設定されていな」で止まるため、新し い VMの IPアドレスを以下のコマンドで確認する。 # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms (3) 再デプロイ 先ほどのコメントアウ部分に正しいIPアドレスを書き込んで再度デプロイを行う。 # vi ~/cf-mysql-release/cf-mysql-cloudstack.yml # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh deploy デプロイ後VMディスク使用量: # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms cf-cloudstack-mysql --vitals +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ | Job/index State Resource Pool IPs |..| System Ephemeral | Persistent | | |..| Disk Usage Usage | Disk
  • 40.
    39 COPYRIGHT FUJITSULIMITED 2014 +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ | cf-mysql-broker/0 | running small | 172.16.10.231 |..| 26% 81% | n/a | haproxy/0 running small 172.16.10.243 |..| 26% 5% | n/a | mysql/0 running large 172.16.10.245 |..| 26% 13% | 28% | mysql/1 running large 172.16.10.244 |..| 26% 13% | 28% +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ # BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms cf-cloudstack-mysql --vitals +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ | Job/index State Resource Pool IPs |..| System Ephemeral | Persistent | |..| Disk Usage Usage | Disk +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ | cf-mysql-broker/0 | running | small 172.16.10.231 |..| 26% 81% | n/a | haproxy/0 running small 172.16.10.243 |..| 26% 5% | n/a | mysql/0 running large 172.16.10.245 |..| 26% | 13% | 28% | mysql/1 running large 172.16.10.244 |..| 26% 13% | 28% +-------------------+---------+---------------+---------------+..+------------ +------------+------------+ 6.5. cfサービスの設定 参照しているDNSサーバに mysql-brokerの IPアドレスを「p-mysql.ssl.osscloud」で登録し、以下 のコマンドを実行してcfサービスの設定を行う。
  • 41.
    40 COPYRIGHT FUJITSULIMITED 2014 # cf create-service-broker p-mysql admin password http://p-mysql.ssl.osscloud # cf enable-service-access p-mysql 確認 # cf service-access