KVM + QEMUを利用してCentOS 6.2とUbuntu Server 12.04のインストールとゲスト環境の複製までやってみます。
ホスト環境はこれまでセットアップしてきたUbuntu Server 12.04を利用します。
ハードウェアの前提確認
まずKVMを導入するにはCPUが仮想化に対応しているかホスト環境で確認します。IntelのCPUの場合は、次のようにvmxが含まれれば対応しています。
・Intel VTの場合
grep vmx /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
・AMD-Vの場合grep svm /proc/cpuinfo
OSのダウンロード
インストールに使用するCentOS 6.2 と Ubuntu Server 12.04をダウンロードします。cd /usr/local/src curl -LO http://mirror.symnds.com/distributions/CentOS-vault/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso curl -LO http://ftp.iij.ad.jp/pub/linux/ubuntu/releases/precise/ubuntu-12.04.3-server-amd64.iso
ネットワークの設定(ブリッジ接続)
・参考https://help.ubuntu.com/12.04/serverguide/network-configuration.html#bridging
http://www.linux-kvm.org/page/Networking
・bridge-utilsのインストール
sudo apt-get install bridge-utils・設定ファイルの修正
vi /etc/network/interfaces 次のように修正して保存する
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto br0 iface br0 inet static address 192.168.1.100 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 8.8.8.8 dns-search example.local
・ネットワークを再起動
sudo /etc/init.d/networking restart
・ネットワークの設定確認(br0の追加)
ifconfig -aの内容
br0 Link encap:Ethernet HWaddr **:**:**:**:**:** inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 以下省略
ネットワークの設定(iptables)
・/etc/sysctl.confの修正vi /etc/sysctl.conf
次の内容を追記して保存する
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 net.ipv4.ip_forward = 1・設定を読み込み
sysctl -p /etc/sysctl.conf
KVM + QEMU のインストール
sudo apt-get install qemu-kvm virt-manager virt-viewer
イメージファイル作成
適宜容量は変更してください。qemu-img create -f qcow2 /var/lib/libvirt/images/centos6.img 160G qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu1204.img 160G参考
qcow2形式なので、作成されるイメージファイルが160GB使用するわけではありません。
以下の手順で最小構成インストール直後のファイルサイズは3.3GB(centos6)と2.6GB(ubuntu1204) でした。またvirt-cloneで作成したファイルはそれ以下のサイズとなりました。
ゲストOSのインストール
・CentOS 6.2virt-install --connect qemu:///system \ --name=centos6 \ --connect=qemu:///system \ --ram=2048 \ --vcpu=2 \ --os-type=linux \ --hvm \ --os-variant=virtio26 \ --disk path=/var/lib/libvirt/images/centos6.img,size=160,format=qcow2 \ --cdrom=/usr/local/src/CentOS-6.2-x86_64-minimal.iso \ --network bridge=br0 \ --graphics vnc,port=5900,password=foobar,listen=0.0.0.0,keymap=ja・Ubuntu Server 12.04
virt-install --connect qemu:///system \ --name=ubuntu1204 \ --connect=qemu:///system \ --ram=2048 \ --vcpu=2 \ --os-type=linux \ --hvm \ --os-variant=ubuntuprecise \ --disk path=/var/lib/libvirt/images/ubuntu1204.img,size=160,format=qcow2 \ --cdrom=/usr/local/src/ubuntu-12.04-server-amd64.iso \ --network bridge=br0 \ --graphics vnc,port=5901,password=foobar,listen=0.0.0.0,keymap=ja
VNC接続
・VNCで使用するポートを開ける環境に合わせて適宜変更してください。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900:5901・VNCクライアントで接続して各ゲストOSをインストールする
各OSのインストールは省略いたしますが、ホスト名、IPアドレス、VNCのポート番号などは
マスター作成用に普段使用しないものを割り当てた方がよいかと思います。
セットアップが完了した仮想環境は複製して使い回せるため1台のサーバに複数の環境を導入する場合や、
複数のサーバに展開する場合を考慮してあらかじめ設計するとよいでしょう。
インストール完了後に再起動していない模様
OSインストールが環境してvirshコマンドでゲスト環境を確認したところいずれも状態がシャットオフで起動していませんでした。
virsh list --all Id Name State ---------------------------------- - centos6 shut off - ubuntu1204 shut off・virshコマンドでゲストOSを起動します
virsh start centos6 virsh start ubuntu1204・確認
virsh list --all Id Name State ---------------------------------- 1 centos6 running 2 ubuntu1204 running
virshでゲストOSの再起動やシャットダウンができない
ホスト環境からvirsh shutdownコマンドを実行してもゲスト環境(centos6)がシャットダウンせず実行中のままでした。この問題は、acpidをインストールして解決します。
・ゲストOSにacpidをインストールする
・CentOS 6.2 の場合 sudo yum install acpid.x86_64 /etc/init.d/acpid start ・Ubuntu Server 12.04の場合(最小構成でもインストールされていたためこの手順は不要です)ホスト環境からシャットダウンするか確認してみます。
sudo apt-get install acpid service acpid start
virsh shutdown centos6 virsh shutdown ubuntu1204どちらもシャットダウンできました。
virsh list --all Id 名前 状態 ---------------------------------- - centos6 シャットオフ - ubuntu1204 シャットオフこれでゲスト環境の準備は完了です。次にゲスト環境を複製を試してみます。
クローン作成
・複製前の準備一通りセットアップが完了した状態で不要なログなどを削除してから
シャットダウンして配布用マスターとして利用します。
・virtc-cloneコマンドでゲスト環境のクローン作成
virt-clone --connect=qemu:///system \ -o centos6 \ -n centos6clone \ -f /var/lib/libvirt/images/centos6clone.img・定義ファイルを一部修正
virsh edit centos6clone なぜかディスクがraw形式になっていたのでrawをqcow2に修正しました。
<disk type='file' device='disk'>:
<driver name='qemu' type='qcow2'/>:
vncのポートが重複していると起動しないため、graphicsタグを削除するかポート番号を変更します。
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
virt-cloneがMACアドレス適当に割り当ててくれているのでこれをそのまま利用しますが、
CentOSではネットワーク設定に問題があり修正が入ったのでこのMACアドレスをメモしてください。
<interface type='bridge'>
<mac address='52:54:00:1f:b3:76'/>
・複製したゲストOSを起動する
virsh start centos6clone・ホスト名を変更する(CentOS)
vi /etc/sysconfig/network・ホスト名を変更する(Ubuntu)
HOSTNAME=kvm2
vi /etc/hostname kvm3・IPアドレスとMACアドレスの変更(CentOS)
vi /etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR=52:54:00:1f:b3:76 IPADDR=192.168.1.101CentOSでは、virt-cloneで作成したイメージで起動すると、eth0がeth1に書き変わってしまいネットワークの起動に失敗しました。同じ現象と思われる記事 http://d.hatena.ne.jp/ngyuki/20110805/p1 もあるでの私だけではないようです。
dmesgには次のようなログが出力されます。
udev: renamed network interface eth0 to eth1・eht0がリネームされた場合は次のファイルを削除する(CentOS)
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules・IPアドレスとMACアドレスの変更(Ubuntu)
vi /etc/network/interfaces iface eth0 inet static address 192.168.1.102再起動してホスト名とIPアドレスが変更されていることを確認します。
reboot以上でゲスト環境の複製ができました。
kvm環境すごく便利ですね。
OpenStackやEucalyptusとまではいかなくても、
小規模なプライベートクラウドなら自作できそうですね。
0 件のコメント:
コメントを投稿