Post on 15-Jul-2015
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/sou
rces.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 l
ibreadline-dev libssl-dev libcurl4-openssl-dev
(3) stemcell関連のインストール
# apt-get install libsqlite3-dev genisoimage libmysqlclient-dev libpq-dev debo
otstrap kpartx
2.3.4. Ruby インストール
(1) プロキシサーバの設定
git インストールのために以下のコマンドを例にプロキシサーバを gitの configに設定する。
# git config --global http.proxy http://mp067159:8160584683@rep.proxy.nic.fuj
itsu.com:8080/
# git config --global https.proxy http://mp067159:8160584683@rep.proxy.nic.fu
jitsu.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 aut
oconf libncurses5-dev
# git clone http://github.com/sstephenson/rbenv.git .rbenv
# git clone http://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/rub
y-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_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」内に格納されているカ
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)' }
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であらかじめ作成しておく)
9
COPYRIGHT FUJITSU LIMITED 2014
api_key="QBbqiA_mGMp23w8lX1zadH_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKIvmx4Ok5
WaJZNPwY0o1Y_ORP2A"
# please set your secret key(CloudStackGUIであらかじめ作成しておく)
secret_key="oN5z4NafX9OrwknE39f9sT_rhSrfdCa1CRuoCjO3iD214wzM4JGLIT2TjwmvBerWL
uM9OOdnCEtyVpPy02rOkg"
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"&"signat
ure=$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_PCruxaqj55iTtQgCQst5Pd5aJ1TrXKErTX3UKI
vmx4Ok5WaJZNPwY0o1Y_ORP2A&signature=gPmSPYqd2fIaSf5%2BX2K%2FvEdgaD8%3D
<?xml version="1.0" encoding="UTF-8"?><createsshkeypairresponse cloud-stack-v
ersion="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:7
e:4c:21:a9:c9:94</fingerprint></keypair></createsshkeypairresponse>root@ubunt
u14:~#
(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_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
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」している
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,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 へロ
グインして対象ディレクトリに追加ディスクをマウントして領域の確保を行う。
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
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 486M 0% /dev/shm
none 486M 56K 486M 1% /var/run
none 486M 0 486M 0% /var/lock
none 486M 0 486M 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-18
3.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-stem
cell-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 stemcell archive. Done (00:00:22)
Started update stemcell > Verifying stemcell manifest. Done (00:00:00)
Started update stemcell > Checking if this stemcell already exists. Done (00:
00:00)
Started update stemcell > Uploading stemcell bosh-cloudstack-kvm-ubuntu/2063
to the cloud. Done (00:05:18)
Started update stemcell > Save stemcell bosh-cloudstack-kvm-ubuntu/2063 (3a51
4c5b-1c41-471f-95ad-459ac64dfb79). Done (00: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 ffff: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 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
22
COPYRIGHT FUJITSU LIMITED 2014
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0
qdisc ingress ffff: dev vnet7 parent ffff:fff1 ----------------
qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc htb 1: dev vnet9 root refcnt 2 r2q 10 default 1 direct_packets_stat 0
qdisc ingress ffff: dev vnet9 parent ffff:fff1 ----------------
qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0
qdisc ingress ffff: dev vnet10 parent ffff: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 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet1 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet2 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet3 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
23
COPYRIGHT FUJITSU LIMITED 2014
qdisc pfifo_fast 0: dev vnet4 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet5 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet6 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc htb 1: dev vnet7 root refcnt 2 r2q 10 default 1 direct_packets_stat 0
qdisc ingress ffff: dev vnet7 parent ffff:fff1 ----------------
qdisc pfifo_fast 0: dev vnet8 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 1
qdisc htb 1: dev vnet10 root refcnt 2 r2q 10 default 1 direct_packets_stat 0
qdisc ingress ffff: dev vnet10 parent ffff:fff1 ----------------
(5) 解除を確認
# tc -s qdisc | grep vnet9 -A1
qdisc pfifo_fast 0: dev vnet9 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1
1 1 1 1 1 1 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 st
atus 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: <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
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
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 name
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,cloud_controller.write,openid,password.wri
te,cloud_controller.admin,scim.read,scim.write
access-token-validity: 7200
refresh-token-validity: 1209600
scim:
users:
- admin|c1oudc0w|scim.write,scim.read,openid,cloud_controller.admin
- services|c1oudc0w|scim.write,scim.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から de
stroy して 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-cloudstac
k.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 --vita
ls
+-------------------+---------+---------------+---------------+..+------------
+------------+------------+
| Job/index | State | Resource Pool | IPs |..| System | E
phemeral | Persistent |
| | | | |..| Disk Usage | Disk
Usage | Disk Usage |
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% | 1
3% | 28% |
| mysql/1 | running | large | 172.16.10.244 |..| 26% | 1
3% | 28% |
+-------------------+---------+---------------+---------------+..+------------
+------------+------------+
# BUNDLE_GEMFILE=~/bosh/Gemfile bundle exec bosh vms cf-cloudstack-mysql --vita
ls
+-------------------+---------+---------------+---------------+..+------------
+------------+------------+
| Job/index | State | Resource Pool | IPs |..| System | E
phemeral | Persistent |
| | | | |..| Disk Usage | Disk
Usage | Disk Usage |
+-------------------+---------+---------------+---------------+..+------------
+------------+------------+
| 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% | 1
3% | 28% |
| mysql/1 | running | large | 172.16.10.244 |..| 26% | 1
3% | 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