(CentOS)KVMによるサーバ仮想化

これまで、DebianをホストOSとして使ってきましたが、CentOSで再構築しました。*1

(環境)

    • ホストOS
      • CentOS 5.5(x86_64)
      • Kernel 2.6.18-194.26.1.el5
      • KVM 83(Release 164.el5_5.25)
    • ゲストOS
      • CentOS 5.5(x86_64)
      • Kernel 2.6.18-194.26.1.el5
    • 作業用PC
      • VNCクライアントをインストール

ハードウェア構成の確認

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

Intel CPUの場合は、"vmx"でgrepしてください。

ホスト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

Intel CPUの場合は"kvm_intel"

  • 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  17 20:23 dev-cent01.xml
drwx------ 3 root root 4096  811 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
自動起動:   無効にする


KVM

*1:お仕事でRedHat系でKVMを使う可能性があるので

*2:Intel VTやAMD-V

*3:検証環境なので。。。