KVM ベースの仮想サーバーを作成する

完全仮想化機能によって Linux KVM ハイパーバイザー上に仮想サーバーを作成する 3 つのステップ

比較的簡単な 3 つのステップで、完全仮想化機能を使用して Linux® KVM ハイパーバイザー・ホスト上に仮想サーバーを作成することができます。KVM (Kernel-based Virtual Machine) は、ハードウェア仮想化拡張機能 (Intel VT-X および AMD-V) と QEMU の修正版をベースとした、Linux 用の無料のオープンソース仮想化ソフトウェアです。

Da Shuang He, Software Engineer, IBM

Da Shuang He は、中国・上海の IBM China Development Lab に勤務するソフトウェア・エンジニアです。現在はシステム管理ソフトウェアに取り組んでいます。彼が専門としているのは、セルフブート対応サーバー、リモート・オペレーティング・システム・インストール、およびパワー・マネージメント機能です。



2010年 1月 19日

My developerWorks の GReen グループに参加してください

エネルギー、効率、そして環境に関するトピックについて議論し、リソースを共有するために、My developerWorks の Green computing group に参加してください。

Linux KVM (Kernel-based Virtual Machine) は Linux 用の無料のオープンソース仮想化ソフトウェアで、Intel VT-X および AMD-V という 2 つのハードウェア仮想化拡張機能、そして QEMU の修正版 (必要な変更作業は現在も進められています) をベースとしています。kvm.ko というローダブル・カーネル・モジュールの形を取る KVM は、コアとなる仮想化インフラストラクチャーとプロセッサー固有のモジュール (kvm-intel.ko および kvm-amd.ko) を提供し、数々の PC オペレーティング・システムを変更することなくブートできるだけの完全なハードウェア・エミュレーションを可能にするように設計されています。

KVM を使用することで、Linux やWindows®、または Mac OS® X イメージを実行する複数の仮想マシンを、その OS イメージを変更することなく実行することができます。それぞれの仮想マシンは、専用に仮想化されたハードウェア (ネットワーク・カード、ディスク、グラフィック・アダプターなど) を使用します。

この記事では、SUSE 11 をオペレーティング・システムとしてインストールした IBM® Blade Server HS21 を使用しました。HS21 は Intel VT 拡張機能をサポートします。また、SUSE 11 のカーネル・バージョンは 2.6.27.13 で、このバージョンには KVM がすでに含まれているためです (Linux カーネルにはバージョン 2.6.20以降、KVM が標準搭載されています)。

仮想サーバーを稼働させるための主なステップには、以下の 3 つがあります。

  1. オペレーティング・システムと必要なソフトウェアをインストールする
  2. 仮想サーバーを作成する
  3. 仮想サーバー・ネットワークを構成する

ステップ 1. OS と必要なソフトウェアをインストールする

このセクションで説明する内容は以下のとおりです。

  1. オペレーティング・システムと必要なソフトウェアをインストールする方法
  2. CPU が KVM をサポートするかどうかを判断する方法
  3. ソフトウェアが正しくインストールされていることを確認する方法

オペレーティング・システムとソフトウェアをインストールする

オペレーティング・システムをインストールした後、以下のコマンドを実行して、インストールされた Linux カーネルのバージョンを調べます。

kvm:~ # uname -a
Linux kvm 2.6.27.13-1-pae #1 SMP 2009-01-27 13:41:16 +0100 i686 i686 i386 GNU/Linux

次に、kvm パッケージと kvm-kmp-default パッケージ (I/O ハードウェア・エミュレーション用に変更された QEMU がすでに組み込まれています) を選択し、インストールします。図 1 に示すように、この 2 つのパッケージを選択して「Accept (同意)」をクリックすると、インストールすることができます。

図 1. インストールされたカーネルを調べる
インストールされたカーネルを調べる

kvm-kmp-default のバージョンは 78_2.6.27.13_1-11.3 となっているはずです (ここで、78 は KVM のバージョンで、残りの情報はカーネルのバージョンを示しています)。

標準的な KVM インストールには、以下のコンポーネントが含まれています。

  • 仮想化ハードウェアを管理するデバイス・ドライバー。このドライバーはその機能を、キャラクター・デバイス /dev/kvm を介して公開します。
  • PC ハードウェアをエミュレートするユーザー空間コンポーネント。現在、このコンポーネントはユーザー空間で処理され、多少変更された QEMU プロセスとなっています。
  • I/O モデル。このモデルは、コピーオンライト・ディスク・イメージをサポートする QEMU のモデルとその他の QEMU 機能から直接作成されます。

CPU が KVM をサポートするかどうかを判断する

KVM は x86 仮想化拡張機能に依存します。互換性があるかどうかを調べるために、コマンド grep vmx /proc/cpuinfo を実行してください (AMDでは、grep svm /proc/cpuinfo を実行します)。このコマンドによる出力がリスト 1 のようになっていれば、その CPU は KVM をサポートするということです。そうでない場合、CPU は KVM をサポートしません。

リスト 1. CPU の KVM サポートを確認する
kvm:~ # 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 lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
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 lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
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 lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
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 lm constant_tsc arch_perfmon pebs bts pni 
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm

ソフトウェアが正常にインストールされていることを確認する

KVM モジュールが正常にインストールされているかどうかを確認するには、コマンド lsmod | grep kvm を実行します。コマンドの実行結果が以下のような出力であれば、KVM モジュールは正常にインストールされています。

kvm:~ # lsmod | grep kvm
kvm_intel              42604  0
kvm                   150264  1 kvm_intel

ステップ 2. 仮想サーバーを作成する

このセクションで説明する内容は以下のとおりです。

  1. まっさらなディスク・イメージを作成する方法
  2. ディスク・イメージに OS をインストールする方法
  3. 仮想サーバーを起動する方法

まっさらなディスク・イメージを作成する

以下のコマンドを使用して、まっさらなディスク・イメージを作成します。

dd if=/dev/zero of=/mnt/kvmtest.img bs=1024 count=0 seek=$[10*1024*1024]

上記のコマンドを実行すると、kvmtest.img という名前の 10GB のイメージが作成されます。

ディスク・イメージにオペレーティング・システムをインストールする

作成されたイメージにオペレーティング・システムをインストールするには、以下のコマンドを使用します。

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -boot d -cdrom /mnt/SLES-11-DVD-i586-RC3-DVD1.iso -m 1024

ここでは KVM をソースからビルドしているのではなく、KVM パッケージをインストールしているため、qemu-system-x86_64 ではなく、qemu-kvm を使用することができます。

-boot d は、CDROM から仮想サーバーのブートを作成することを意味します。-m 1024 は、仮想サーバーのメモリーを 1GB に指定するということです。

上記のコマンドを実行すると、図 2 のようなオペレーティング・システムのインストール画面が表示されます。

図 2. OS のインストール画面
OS のインストール画面

この後は、通常の方法でオペレーティング・システムをインストールします。

仮想サーバーを起動する

オペレーティング・システムが正常にインストールされたら、早速、以下のコマンドで仮想サーバーを起動してください。

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024

作成した仮想サーバーは、物理ハードウェア上で稼働する通常のサーバーと同じように稼働するはずです。


ステップ 3. 仮想サーバー・ネットワークを構成する

ここまでのステップで仮想サーバーを作成する方法を説明しましたが、仮想サーバー用のネットワークを作成する方法についてはまだ説明していません。このセクションでは、仮想サーバーを接続するブリッジ・ネットワークを作成する方法を説明します。ここでの内容は以下のとおりです。

  1. bridge-util パッケージをインストールする方法
  2. ブリッジ・ネットワーク・インターフェースを作成する方法
  3. ネットワーク制御スクリプトを作成する方法
  4. ゲスト・オペレーティング・システムのネットワークを開始する方法
  5. ゲスト・オペレーティング・システムのネットワークを構成する方法

bridge-util パッケージをインストールする

これから、ブリッジ・ネットワークを作成します。そのためには、オペレーティング・システムのソフトウェア管理セクションに bridge-util パッケージをインストールする必要があります。図 3 に、このパッケージを選択してインストールする画面を示します。

図 3. bridge-util パッケージをインストールする
bridge-util パッケージをインストールする

ブリッジ・ネットワーク・インターフェースを作成する

オペレーティング・システムのネットワーク構成画面で、「Add a new network interface (新規ネットワーク・インターフェースの追加)」をクリックします (図 4 を参照)。

図 4. 新規ネットワーク・インターフェースを追加する
新規ネットワーク・インターフェースを追加する

「Hardware Dialog (ハードウェア・ダイアログ)」画面が表示されます (図 5 を参照)。

図 5. 新規ネットワーク・インターフェースのハードウェア・ダイアログ
新規ネットワーク・インターフェースのハードウェア・ダイアログ

「Device Type (デバイス・タイプ)」として「Bridge (ブリッジ)」を選択し、ネットワークの構成を続けるために「Next (次へ)」をクリックします。すると、図 6 に示す構成画面が表示されます。

図 6. ネットワーク構成画面
ネットワーク構成画面

「Bridged Devices (ブリッジ・デバイス)」セクションでは「eth0」を選択し、ブリッジ・インターフェース用に静的 IP を構成します。この構成は、eth0 の構成と同じです (図 7 を参照)。

図 7. ブリッジ・インターフェース用に静的 IP を構成する
ブリッジ・インターフェース用に静的 IP を構成する

静的 IP を構成すると、eth0 の構成がクリアされます。図 6 の画面で「Next (次へ)」をクリックして次の画面に進むと、ネットワーク構成画面が再び表示されます。この画面で、新規ブリッジ・ネットワーク・インターフェースが作成されていること、そして eth0 構成がクリアされていることを確認することができます。

ネットワーク制御スクリプトを作成する

ネットワーク制御スクリプトは、リスト 2 のような内容になります。

リスト 2. ネットワーク制御スクリプト
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
        tunctl -u `whoami` -t $1
        ip link set $1 up
        sleep 0.5s
        brctl addif $switch $1
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi

ゲスト・オペレーティング・システムを起動する

以下のコマンドを実行して、ネットワーク・インターフェースで接続されたゲスト・オペレーティング・システムを起動します。

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024 -net nic,macaddr=52:54:00:12:34:56 -net tap,script=/etc/qemu-ifup

ネットワーク・インターフェースは、仮想サーバーを起動するときに指定します。

ゲスト・オペレーティング・システムのネットワークを構成する

ゲスト・オペレーティング・システムが起動したら、そのネットワークを通常の方法で構成してください。

おめでとうございます!これで、KVM 上に仮想サーバーを構成することができました。

参考文献

学ぶために

製品や技術を入手するために

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりが持てる他、開発者主導のブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=467949
ArticleTitle=KVM ベースの仮想サーバーを作成する
publish-date=01192010