(CentOS)KVMによるサーバ仮想化
これまで、DebianをホストOSとして使ってきましたが、CentOSで再構築しました。*1
(環境)
ハードウェア構成の確認
KVMはCPU仮想化機能*2が必要なので、仮想化機能がONになっているか確認します。
$ grep svm /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow c
onstant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow c
onstant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow c
onstant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow c
onstant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
ホストOSのインストール
パッケージグループは何も選択せず、最小の構成でインストールします。
KVMのインストール
- KVM関連パッケージのインストール
$ sudo yum install kvm kmod-kvm kvm-qemu-img libvirt python-virtinst bridge-utils
- KVMモジュールのロード
$ sudo modprobe kvm-amd $ sudo lsmod | grep kvm kvm_amd 69544 0 kvm 226336 1 kvm_amd
- libvirtdの起動
libvirtは、仮想マシンモニタで仮想マシンを管理するための基礎となるAPIです。
libvirtを利用するには、libvirtdデーモンが起動している必要があります。
$ service libvirtd status libvirtd は停止しています $ sudo service libvirtd start Starting libvirtd daemon: [ OK ] $ service libvirtd status libvirtd (pid 5232) を実行中... $ chkconfig --list | grep libvirtd libvirtd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
Bridgeインタフェース(br0)の設定
ゲストOSが外部接続(ホストOS以外)するために、Bridgeインタフェースを設定します。
設定前のインタフェースを確認します。
$ sudo brctl show bridge name bridge id STP enabled interfaces virbr0 8000.000000000000 yes
今回は、"eth0"を"br0"に紐付けました。
### /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:25:22:07:3B:83 ONBOOT=yes BRIDGE=br0
### /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes
"network"を再起動して、インタフェースを確認します。
$ sudo service network restart
$ sudo brctl show
bridge name bridge id STP enabled interfaces
br0 8000.002522073b83 no eth0
virbr0 8000.000000000000 yes
"br0"が追加されていることを確認します。
ゲストOSのインストール
- 事前準備
ゲストOSインストールは作業用PCからVNC接続して行うので、外部からVNC接続できるように、"/etc/libvirt/qemu.conf"の"vnc_listen = "0.0.0.0""を有効化し、"libvirtd"を再起動します。
$ sudo vi /etc/libvirt/qemu.conf $ sudo service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ]
また、"iptables"が起動している場合は、外部からのVNC通信を許可します。
今回は、"iptables"を停止しました。*3
$ sudo service iptables stop
$ sudo chkconfig iptables off
- ゲストOSのインストール
$ sudo virt-install --connect qemu:///system --name dev-cent01 --ram 1024 --disk path=/var/lib/libvirt/images/dev-cent01.img,size=20 --network bridge=br0 --vnc --cdrom /dev/cdrom インストールを開始しています... ドメインを作成中... | 0 B 00:03
作業用PCからVNC接続し、通常通りOSインストールします。
ゲストOSの確認・起動
ゲストOSの定義ファイルは、"/etc/libvirt/qemu"以下に作成されます。
"virsh"コマンドでゲストOSの状態確認・起動ができます。
$ sudo ls -l /etc/libvirt/qemu -rw------- 1 root root 1182 1月 7 20:23 dev-cent01.xml drwx------ 3 root root 4096 8月 11 07:07 networks $ sudo virsh list --all Id 名前 状態 ---------------------------------- - dev-cent01 シャットオフ $ sudo virsh dominfo dev-cent01 Id: - 名前: dev-cent01 UUID: dd8ae813-5ae2-9248-d22a-8073af072aab OS タイプ: hvm 状態: シャットオフ CPU: 1 最大メモリー: 1048576 kB 使用メモリー: 1048576 kB 自動起動: 無効にする $ sudo virsh start dev-cent01 ドメイン dev-cent01 が起動されました $ sudo virsh dominfo dev-cent01 Id: 1 名前: dev-cent01 UUID: dd8ae813-5ae2-9248-d22a-8073af072aab OS タイプ: hvm 状態: 実行中 CPU: 1 CPU 時間: 4.0s 最大メモリー: 1048576 kB 使用メモリー: 1048576 kB 自動起動: 無効にする