概要
目標
以下の二点を実現する環境を構築する。
- knife-xenserver と xenserver-automater を使って IP アドレスを指定した仮想マシンをコマンド一発で構築する
- 仮想マシンが起動した後、chef client を実行して初期構築を実行する
将来的には
- 構築が完了した仮想マシンに対して serverspec でテストを実行する
この一連の流れをコマンド一発で行えるようにする。今回は最初の二点について実装してみる。
xenserver-automater とは
- github ではこちら
- xenstore に登録された IP アドレス等の設定パラメータを
xenstore-readを利用して DomU から取得して DomU 自体に設定するツール - DomU とはここでは仮想マシンのこと
準備
登場人物
登場人物がちょっと多いので一覧で整理してみる。
| コンポーネント | プロダクト | 情報 |
|---|---|---|
| ハイパーバイザー | XenServer | http://www.citrix.co.jp/ |
| chef server | chef-zero | https://github.com/jkeiser/chef-zero |
| chef client の操作、XenServer 操作 | knife-xenserver | https://github.com/bvox/knife-xenserver |
| IP アドレスの設定 | xenserver-automater | https://github.com/krobertson/xenserver-automater |
| 仮想ホスト | Debian 6.0.7(Squeeze) | http://www.debian.or.jp/ |
chef server としては chef-zero を利用する。毎回の事ながら手軽に扱える chef-zero は本当に有難い。
事前にやっておくべきこと
以下は既に出来るという前提で進める。
OS のテンプレート作成
テンプレートの対象となる仮想ホストにて xenserver-automater を git clone する。
cd /tmp/ git clone https://github.com/krobertson/xenserver-automater.git
xenserver-automater を README.md に従い所定の位置に配置、権限の設定を行う。
そのままでは動作しなかったので /etc/init/ 以下にコピーした xe-automator.conf のファイル名と権限及び内容を修正する。
mv /etc/init/xe-automator.conf /etc/init.d/xe-automator chmod 755 /etc/init.d/xe-automator
ファイル名を変更した /etc/init.d/xe-automator を修正する。
vim /etc/init.d/xe-automator
仮想ホストの起動時に /usr/sbin/xe-set-network と /usr/sbin/xe-set-hostname が実行されるようにする。
#!/bin/bash echo "XenServer Guest Configuration Automator" /usr/sbin/xe-set-network /usr/sbin/xe-set-hostname exit 0
※上記方法ではなく README.md 通りに行ってもいけるかもしれないので引き続き、検証を行う。
xenserver-automater の設定が終わった後は仮想ホストを以下のコマンドで仮想マシンを手軽にテンプレート化する。
xe vm-param-set uuid=${仮想ホスト UUID} is-a-template=true
cookbook を chef server にアップロードする
おなじみの knife cookbook upload にて chef-zero の chef server に cookbook をアップロードする。
knife cookbook upload setup -o ./
アップロードした cookbook を念の為確認してみる。
knife cookbook list
hoge_cookbook 0.1.2 0.1.1 redis_2_cookbook 0.2.0 setup 0.1.0
構築してみる
knife-xenserver を実行
knife-xensever の実行に必要にパラメータを整理してみる。
| オプション | パラメータ | 内容 |
|---|---|---|
| --vm-template | ${仮想マシンテンプレート UUID} | 仮想マシンテンプレートの元になるテンプレートの UUID を指定する |
| -x | root | 仮想マシンをセットアップする際にログインするユーザー名を指定する(通常は root を指定) |
| -P | ${パスワード} | -x で指定したユーザーのパスワードをし知恵する |
| --vm-name | my-hostname | 仮想マシンのホスト名を指定する |
| --vm-ip | 192.168.1.10 | 構築する仮想マシンの IP を指定する |
| --vm-netmask | 255.255.255.0 | 構築する仮想マシンの netmask を指定する |
| --vm-gateway | 192.168.1.254 | 構築する仮想マシンの netmask を指定する |
| --vm-dns | 192.168.1.254 | 構築する仮想マシンが利用する DNS サーバーを指定する |
| --vm-domain | inokara.com | 構築する仮想マシンのホスト名を指定する |
| -r | "recipe[setup]" | 仮想マシン構築後に適用する cookbook を指定する |
その他にも -d chef-full 等も場合によっては指定する必要がある。
knife xenserver create vm --vm-template ${仮想マシンテンプレート UUID} -x root -p ${パスワード}
--vm-name my-hostname \
--vm-ip 192.168.1.10 --vm-netmask 255.255.255.0 --vm-gateway 192.168.1.254 --vm-dns 192.168.1.254 \
--vm-domain inokara.com -r "recipe[setup]"
実行後、テンプレートから仮想マシンが構築され、その後 chef server から cookbook を取得して cookbook に基づいて仮想マシンの構築が行われる。
xenserver-automater のやったこと
github のソースコードを見ると解るが xenstore-read という xenstore に登録された、上記の IP アドレス等を取得して /etc/network/interface や /etc/hosts /etc/hostname を生成している。
/etc/network/interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 192.168.1.254
dns-search inokara.com
/etc/hosts
127.0.0.1 localhost 192.168.1.10 my-hostname.inokara.com my-hostname
/etc/hostname
my-hostname.inokara.com
上記を設定した後で /etc/init.d/networking restart を実行して IP アドレス等がアクティブになっている。
まとめ
- knife-xenserver と chef-zero を使うことで IP アドレスの設定以外を自動化することが出来ていたが、今回の xenserver-automaterを使うことで IP アドレスの設定までも自動化することが出来た
- 今後、実際の運用で利用する具体的な手順等についても考えてみたい
- xenserver-automater を実現している
xenstoreについては、そもそも何なのかが理解不足... - いまさら XenServer と言わず、引き続き、色々と弄ってみたい