CentOS に仮想化環境の KVM を導入する手順を紹介します。

KVM は Kernel-based Virtual Machine で、仮想化環境のハイパーバイザーです。VMWare などと同様に、KVM 環境の中に仮想のマシン(「ゲストOS」といいます)を作って、あたかも独立した一台のマシンがあるかのように利用することができます。大きな特徴としてまず「無料である」こと、加えて名前の由来になっているように Linux のカーネルの一部として、標準搭載されている機能なので、導入が比較的容易であることが挙げられます。またハイパーバイザー型であるため、KVM 自体は1台の物理的な Linux マシン(「ホストOS」といいます)の中で動き、その制御も Linux を通して行うことになります。例えば管理用のコンソール機能などもホストOS上の Linux アプリケーションとして提供されており、仮想HDDはホストOSからは1つのファイルとして扱います。

上記でも触れましたが、KVM は Linux のカーネルに含まれる形で実装されています。今回は Linux ディストリビューションとして CentOS を利用する前提で説明します。CentOS 自体のインストール方法については過去のブログエントリを参照してください:
『CentOS の導入』

KVM を利用するにはハードウェア的な条件があります。CPU が仮想化支援機構(Intel-VT, AMD-V)に対応している必要がある、ことです。

/proc/cpuinfo に flags として vmx が含まれていれば仮想化支援機構に対応済みと判断できます。
/proc/cpuinfo に flags として vmx (Intel版)か svm (AMD版)が含まれていれば仮想化支援機構に対応済みと判断できます(2016/Mar/20 修正)。
# cat /proc/cpuinfo | grep '(vmx|svm)'
(この結果、何かが表示されれば対応していることになる)

また利用する前に BIOS の設定を変更し、この仮想化支援機構の機能を有効にしておきます。


では CentOS に KVM を導入する手順を紹介します。まずは yum で KVM に必要なモジュールをまとめてインストールします:
# yum -y install libguestfs libguestfs-tools libguestfs-tools-c libvirt libvirt-client python-virtinst qemu-kvm virt-manager virt-top virt-viewer

インストールできたら KVM(libvirt) の自動起動を ON にしておきます。これで CentOS の起動と同時に KVM が有効になります:
# chkconfig libvirtd on

この段階で一度再起動して、KVM が有効になった状態で OS を起動します:
# shutdown -r now

再起動後、ホストOSにブリッジインターフェース(br0)を作成します。 このあと KVM 内に作成する全てのゲストOSはこのブリッジインターフェースを経由してインターネットを含めた外部ネットワークにアクセスすることになります。

ブリッジインターフェースは eth0 をベースに作成することにします。 そのため、まずは ifcfg-eth0 をコピーして ifcfg-br0 を作り、ここから br0 の雛形を作成します:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-br0

ifcfg-br0 を編集します。内容は基本的に eth0 のものをそのまま使いますが、TYPE 属性を Bridge に変更します(大文字小文字に注意):
# vi ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
 :

続いて ifcfg-eth0 を編集します。こちらは「(設定済みの)br0 経由で使う」ことを宣言することになります(大文字小文字に注意)。加えて IP アドレス関連の設定は br0 の方で行っていて、そちらへのブリッジをするだけなので eth0 では不要です(コメントアウトします):
# vi ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
#IPADDR=192.168.0.2
#PREFIX=24
#GATEWAY=192.168.0.1
#DNS1=192.168.0.1

DEFROUTE=yes
 :

この状態でネットワークを再起動します:
# /etc/init.d/network restart

ブリッジインターフェース(br0)が追加されたことを確認します:
# brctl show

bridge name bridge id STP enabled interfaces
br0 8000.002185aba9e1 no eth0
virbr0 8000.525400ca36c8 yes virbr0-nic

ブリッジインターフェースが2つ(br0, virbr0)確認できます。今作成した方(br0)ではない、もう1つのブリッジインターフェース virbr0 は KVM の導入と同時に作成されるものです。
これもブリッジインターフェースとして使えることは使えますが、パフォーマンスが悪いので明示的に br0 を作ったのでした。

この状態では virbr0 は不要なので削除します。また再起動時に自動作成されないよう設定します:
# virsh net-destroy default
# virsh net-autostart default --disable

以下のコマンドで default の State が inactive になっていて、 かつ Autostart が no になっていることが確認できれば設定完了です:
# virsh net-list --all
Name State Autostart
-----------------------------------------
default inactive no


ここまでの設定で KVM 関連ツール(仮想マシンマネージャーとか)が使えるようになっているはずです。KVM の使い方については別の機会に。
kvm01