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 5GVMを動かしてみる。(メモリ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 :0OpenvSwitchとつなげるとか。
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 件のコメント:
コメントを投稿