2012年3月23日金曜日

KVMとOpen vSwitchをシンプルに使う(CentOS6.2)

KVMとOpen vSwitchをシンプルに使うメモ


普通にVMを使う環境として、KVMとOpenvSwitch1.4.1を、CentOS6.2上で動かします。いろんな管理ツールとか難しくてわからないので、とりあえず、シンプルに使おうと。(あ、別にVMが好きなわけじゃなけど、テストでサーバーを複数使うときに、物理サーバーを用意するのは大変なので。)

ホスト側としてCentOSを入れ(1)、KVMを入れ(2)、Open vSwitchを入れ(3)、KVMをOpen vSwitchを使う(4)、という感じの話です。あ、あと、ここでの記述は、全部rootでの作業ってことで。

1. CentOS6(64bit)を入れてアップデート

・いまどきの物理サーバーにCentOS6.2(64bit)を簡単に入れておいて

・アップデートして
yum -y update

・リブートでも、しておきます。
reboot 

2. KVMを入れる

・インストール
yum -y install qemu-kvm qemu-kvm-tools

・ネットワークなしで使ってみる
とりあず、/var/tmpあたりで、
cd /var/tmp
仮想ディスク(5G)を作って、
qemu-img create TESTDISK.img 5G
VMを動かしてみる。(メモリ512MB、ディスク5G、ネットワークはデフォルト(外には出て行けるはず))
/usr/libexec/qemu-kvm -m 512 -drive file=/var/tmp/TESTDISK.img,boot=on -vnc :0
ここで、vncviwer(このサーバからでも外部からでも)で、「このKVMホストのサーバー:5900」にアクセスすると、VMの画面が見えて操作できます。(ここではOS入れてないので何もできませんが。あと、vncviewerは、WindowsならRealVNCのサイトにフリーのviewerが、CentOSならyumで。)

これでは"動かしただけ"なので、CD(iso)からブートさせるなら、たとえば、isoファイルを/var/tmp/CentOS-6.2-x86_64-bin-DVD1.isoとしておいたとして、
/usr/libexec/qemu-kvm -m 1024 -drive file=/var/tmp/TESTDISK.img,boot=on -boot order=d -cdrom /var/tmp/CentOS-6.2-x86_64-bin-DVD1.iso -vnc :0

で、インストール後のVMに、sshで入って使いたいなら、たとえばこうするのもあり(ホストのポート9022をVMのポート22に)
/usr/libexec/qemu-kvm -m 1024 -drive file=/var/tmp/TESTDISK.img,boot=on -boot -redir tcp:9022::22 -vnc :0
して、
ssh -p 9022 localhost

3. Open vSwitch(1.4.1)を入れる

本家サイトのrpmはちょっと古そうだったので、コンパイルしてrpmにして、インストールします。rpmにしちゃえば、アンインストールが楽とか、複数の似たサーバーに入れるのが楽とか。

本家のサイトを見ましょう。

3-1. autoconf-2.69を入れる(yumで入るautoconfは、なんか古いから)

・準備
yum -y install make gcc

・コンパイルしてインストール
mkdir /var/tmp/compile
cd /var/tmp/compile
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
tar xJf autoconf-2.69.tar.xz
cd autoconf-2.69
./configure
make install

3-2.openvswitch-1.4.1のrpmを作る

・準備
yum -y install kernel-headers kernel-devel openssl-devel automake rpm-build redhat-rpm-config

・rpmを作る
mkdir -p ~/rpmbuild/SOURCES
cd ~/rpmbuild/SOURCES
wget http://openvswitch.org/releases/openvswitch-1.4.1.tar.gz

cd /var/tmp
tar xzf ~/rpmbuild/SOURCES/openvswitch-1.4.1.tar.gz

rpmbuild -bb -D `uname -r` openvswitch-1.4.1/rhel/openvswitch.spec
rpmbuild -bb -D `uname -r` openvswitch-1.4.1/rhel/openvswitch-kmod-rhel6.spec

・結果、ここ↓にrpmが3つくらいできます。
~/rpmbuild/RPMS/x86_64

例えば、
kmod-openvswitch-1.4.1-1.el6.x86_64.rpm,openvswitch-1.4.1-1.x86_64.rpm,openvswitch-debuginfo-1.4.1-1.x86_64.rpm

3-3. openvswitch-1.4.1をインストールする

・準備
rmmod bridge

・3-2で作ったrpmでインストールする。
cd  ~/rpmbuild/RPMS/x86_64
rpm -ivh *rpm

確認は、たとえば、
chkconfig --list | grep openvswitch
で、それっぽい一行が表示されて、それなりにonになっていること。例えば、
openvswitch     0:off 1:off 2:on 3:on 4:on 5:on 6:off


・動かす
service openvswitch start

確認は、たとえば、
service openvswitch status
で、たとえば以下の感じの二行がでること。
ovsdb-server is running with pid 2458
ovs-vswitchd is running with pid 2467
他には、
lsmod | grep openvswitch
で、それっぽい一行が表示されること。例えば、
openvswitch_mod        82997  0

4. KVMとOpen vSwitchを使う

4-1. スクリプトを2つ準備(/etc/ovs-ifupと/etc/ovs-ifdown)

・/etc/ovs-ifupとして、
#!/bin/sh

switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1

・/etc/ovs-ifdownとして、
#!/bin/sh

switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1

・実行できるようにしておく
chmod +x /etc/ovs-ifup
chmod +x /etc/ovs-ifdown

4-2. 物理インタフェースとOpen vSwitchの設定

ここで、
サーバーには2つの物理インタフェースeth0, eth1があるとして、
eth0を普段使い、eth1をopenvswitch用にします。
(こちらの環境が、eth0は普通にIPアドレスが振ってあって使っていて、eth1がなんとなくあいてたから、ただしOpen vSwitchのCookbookは逆かも。)

ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth1

確認
ovs-vsctl show
で、br0やeth1のことが表示されます。

あ、あと、eth1をつないで、
ifconfig eth1 up
しておけば、他と普通に通信できます。

4-3. Open vSwitchのネットワークでKVMを動かす

とりあず、/var/tmpあたりで、
cd /var/tmp

仮想ディスク(5G)を作って、
qemu-img create TESTDISK2.img 5G

VMを動かしてみる。(メモリ512MB、ディスク5G、ネットワークはMACアドレスab:bc:cd:de:ef:01)↓長いけど一行です
/usr/libexec/qemu-kvm -m 512 -net nic,macaddr=ab:bc:cd:de:ef:01 -net 
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown -drive 
file=/var/tmp/TESTDISK2.img,boot=on  -vnc :0
ここで、vncviwer(このサーバからでも外部からでも)で、「このKVMホストのサーバー:5900」にアクセスすると、VMの画面が見えて操作できます。(ここではOS入れてないので何もできませんが)

VMを、CD(isoファイル)ブートで、動かしてみるなら。 (メモリ1024MB、ディスク5G、ネットワークはMACアドレスab:bc:cd:de:ef:01、CDドライブブート、CDドライブはisoファイルを/var/tmp/CentOS-6.2-x86_64-bin-DVD1.isoとしておいたとして)↓長いけど一行です
/usr/libexec/qemu-kvm -m 1024 -net nic,macaddr=ab:bc:cd:de:ef:01 -net 
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown -drive 
file=/var/tmp/TESTDISK2.img,boot=on -boot order=d -cdrom 
/var/tmp/CentOS-6.2-x86_64-bin-DVD1.iso -vnc :0

ここで、Open vSwitchの動きの確認ですが、
ovs-vsctl show
で、br0やeth1以外に、tap0, tap1, ...(動かしたVMの数にあわせて)が見えます。

4-4. あとは、たとえば、

2台のホストを用意して、Configuration cookbookのVLANとかで遊ぶとか(すいません、このブログとcookbookとはeth0とeth1が逆です)。
http://openvswitch.org/support/config-cookbooks/vlan-configuration-cookbook/ 

OpenFlow的に使うなら、OpenFlow Controller(POX/PythonやTrema/Rubyなど)使って遊ぶとか。
たとえば、上記(2)で作ったVM上で、OpenFlow Controller動かして(ホストのポート7733をVMのポート6633に)、
/usr/libexec/qemu-kvm -m 1024 -drive file=/var/tmp/TESTDISK.img,boot=on -boot -redir tcp:7733::6633 -redir tcp:9022::22 -vnc :0
OpenvSwitchとつなげるとか。
ovs-vsctl set-controller br0 tcp:0.0.0.0:7733

以下、関連コマンド。
ovs-vsctl set-controller br0 tcp:コントローラのIPアドレス
ovs-vsctl del-controller br0
ovs-vsctl get-controller br0

--
以上

0 件のコメント:

コメントを投稿