ようへいの日々精進XP

よかろうもん

xenserver-automater と knife-xenserver と chef-zero で提供する仮想マシン構築自動化(1)

概要

目標

以下の二点を実現する環境を構築する。

  • 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 は本当に有難い。

事前にやっておくべきこと

以下は既に出来るという前提で進める。

  • chef-zero が利用出来ること(構築に関してはこちら
  • knife xenserver が利用出来ること(設定に関してはこちら

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 と言わず、引き続き、色々と弄ってみたい