今回は、Linuxカーネルに組み込まれた仮想化機能であるLinux KVM を使った仮想化環境の構築方法を解説します。
Linux KVMとは
Linux KVM(以下KVM)は、Linuxカーネルの機能として組み込まれた仮想化環境です。KVMはCPUの持つ仮想化支援技術の仕組みを活用しているため、非常にシンプルなコードとなっています。また、仮想マシンとしての機能で不足している部分はQEMUを利用するなどして、仮想化環境を実現しています。
KVMはLinuxカーネルに組み込まれているので、通常のLinuxディストリビューションを利用するなどして環境を構築するのが一般的です。KVMに最も力を入れているのはレッドハットですが、Red Hat Enterprise Linux 5 Update 4からKVMを正式にサポートし、次期バージョンのRHEL6でもKVMを仮想化技術の中心に据えるようです。他のディストリビューションも順次KVMをサポートするようで、Linuxを使った仮想化環境の構築ではオーソドックスな存在になりそうです。
今回は、KVMが利用可能となったCentOS 5.4 を使って環境を構築してみます。
KVMのアーキテクチャ
KVMはXenやHyper-Vなどと同じハイパーバイザー型に近いアーキテクチャをしていますが、完全に同じではありません。
Xenなどの場合、まずハイパーバイザーが起動してハードウェアを制御するようになった後、I/Oなどを受け持つ仮想マシン(Domain 0や親パーティション)が起動します。一方、KVMはLinuxカーネルの機能として組み込まれているので、Linuxカーネルが起動することでハイパーバイザーとしての機能も利用可能になります。
イメージ的には、縦方向に並んでいるか(XenやHyper-V)横並びか(KVM)の違いで、実際の利用にはあまり大きな違いはありませんが、仕組みとしては知っておくとよいでしょう。
KVMを実行するハードウェアの準備
前述の通り、KVMはCPUの仮想化支援技術を利用しているので、Inte VTやAMD-Vといった仮想化支援機能に対応したCPUと、それらの機能を有効にできるBIOSが必要となります。最近のサーバ機であればほとんど大丈夫ですが、古いマシンを再利用するときは仮想化支援技術がなかったり、BIOSで利用不可能にされていて有効にできないことがあるので注意が必要です。
デバイス関係では、KVMはLinuxカーネルに組み込まれているので、各種デバイスドライバはLinuxカーネル用に用意されたものを利用できます。Linuxが動作するハードウェアであれば、概ね利用可能であると考えて良いでしょう。
CentOS 5.4インストールをインストール
今回はCentOS 5.4(64ビット版)を使って環境を構築します。基本的に通常のLinuxのインストールと同様にインストール作業を進めます。
①インストールメディアの入手
CD版だと7枚に分割されているので、できればDVDのISOイメージを入手しましょう。CentOSのミラーサイトからBitTorrent用ファイルをダウンロードし、BitTorrentのネットワークからISOイメージを入手するなどしてください。ISOイメージはDVD-Rなどに焼いておきます。
②仮想化支援技術を有効化
インストールするマシンのBIOS設定画面で、仮想化支援技術を有効にします。
③Linuxインストール時にKVMを選択
インストールメディアを使って、Linuxのインストールを行います。インストールするソフトウェアパッケージの中に「仮想化」というグループがありますが、これは従来のXenをサポートするための選択肢です。インストールするパッケージを「今すぐにカスタマイズする」を選択し、「 仮想化」の中の「KVM」のグループを選択します。「 仮想化」を選択するとXen環境になってしまうので、選択しないようにします。
図1 「 KVM」グループを選択。「 仮想化」の方は選択しないこと。
このようにOSインストール時にKVMを選択すれば、KVMは自動的に有効になります。
仮想マシンの作成
再起動し、初期設定が終わったら、仮想マシンを作成します。
①仮想マシンマネージャーの起動
MGUI管理ツールである仮想マシンマネージャーを起動します。「 アプリケーション」メニュー→「 システムツール」に登録されています。
②仮想マシンの新規作成
「新規」ボタンをクリックして、新たに仮想マシンを作成します。新規ボタンが押せない時はlocalhostをクリックしてあげてください。ウイザード形式で対話式に仮想マシンが作成できます。設定項目のうち、とくに考慮すべき点を以下に挙げておきます。
③インストール元の決定
ウィザード中でOSのインストール元を決定する必要があります。選択肢は3つあります。
ローカルのインストールメディア(ISOイメージ、またはCD-ROM)
ネットワークのインストールツリー(HTTP、FTP、またはNFS)
ネットワークブート(PXE)
最も簡単なのはローカルのインストールメディアでしょうか。慣れている人であれば、ネットワークインストールで効率よくインストールできます。
図2 インストール元の選択画面。ローカルのインストールメディアを使うのが最も楽な方法。ISOイメージからもインストールできる。
④OSの種類を選択
OSの種類を選択します。OSタイプでおおまかに種類を選択肢、OS種別でバージョンを指定します。たとえばCentOS 5.xであれば、Linux→Red Hat Enterprise Linux 5と、比較的近いものを選択しておきます。
⑤仮想ネットワークの選択
仮想マシンの仮想ネットワークインターフェースの接続先を選択します。デフォルトでは「仮想ネットワーク」しか選択できません。このネットワークはNATで変換して外部に接続するので、サーバー用途などでは使いにくい設定です。別途ブリッジを作成することで、仮想マシンを直接物理ネットワークに接続する「共有物理装置」が選択できます。
図3 仮想ネットワークの選択画面。先にブリッジの設定をしておけば、最初からブリッジ接続も可能です。
⑥仮想CPU数
KVMでは物理CPU数よりも多くの仮想CPUを仮想マシンに割り当てることができますが、当然物理的な処理能力を超えた処理が行われることになるので、現実的な速度では動作しません。まず割り当て数を1仮想CPUから始めるべきでしょう。メモリも同様に必要最低限の程度に抑えておくべきでしょう。
⑦ゲストOSのインストール
仮想マシンの作成が終わったら、起動してゲストOSのインストールを行います。インストール時に仮想化をあまり意識する必要はないでしょう。
コンソールから制御をホスト側に戻すにはCtrl+Altキーを押します。
ブリッジの設定
前述の通り、デフォルトではNAT接続詞かサポートされていないので、必要に応じてブリッジの設定を行います。
①/etc/sysconfig/network-scripts/ifcfg-eth0を修正
物理ネットワークインターフェースeth0をブリッジに接続するように設定します。
リスト1 ifcfg-eth0の変更点
DEVICE=eth0
BOOTPROTO=none
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes
BRIDGE=br0
②/etc/sysconfig/network-scripts/ifcfg-br0を新たに作成
ブリッジ用の設定ファイルを作成します。
リスト2 ifcfg-br0の内容
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
③ネットワークを再起動
ネットワークを再起動します。
# service network restart
④ブリッジの確認
ブリッジが設定されていることを確認します。
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001f2997109d no eth0
virbr0 8000.000000000000 yes
⑤仮想マシンの設定を変更
仮想マシンを停止し、新たにブリッジに接続した仮想ネットワークインターフェースを追加します。接続先は「物理共有装置」を選択します。必要がなければ、これまでの仮想ネットワークインターフェースは仮想マシンの設定から削除しても構いません。
図4 仮想マシンの設定を後から変更して、ネットワーク接続を変更できます。
⑥動作テスト
仮想マシンを再度起動して、仮想ネットワークインターフェースが物理ネットワークに直接接続されていることを確認します。たとえばDHCPサーバが動いていれば、ゲストOSがDHCPサーバから動的にIPアドレスを取得できます。
図5 仮想マシンを動かしたところ
設定情報の格納場所
KVMの利用はある程度は仮想マシンマネージャーから行うことができますが、GUI管理ツールでの設定がどのように設定ファイルに反映されているかを知りたい人も多いのではないでしょうか。設定ファイルの格納場所は以下のディレクトリになっています。
・仮想マシン設定ファイル
/etc/libvirt/qemu/仮想マシン名.xml
・仮想マシンの仮想ディスクファイル
/var/lib/libvirt/images/仮想マシン名.img
その他にも各種設定ファイルが各ディレクトリの近辺に格納されているので、いろいろと見てみるとよいでしょう。
まとめ
KVMは最後発ということもあり、Linuxディストリビューションの中でのまとめ方や、GUI管理ツールの動作なども比較的よくできているように思います。今回は紹介していませんが、ライブマイグレーションなどもサポートされています。
使い慣れたLinux環境に少しだけ追加で仮想マシンを入れたいというような使い方であれば、ホストOS型の仮想マシンソフトウェアをインストールしなくても仮想化を実現できるので、とても便利でしょう。一方、中規模から大規模での利用についてはまだ情報が少ないので、必要となる管理などのソリューションが待たれるところです。まずは軽く触れてみて、今後に備えておいてはどうでしょうか。