連載
» 2009年04月15日 00時00分 公開

KVMの導入と基本的な使い方知って見るみるKVM(2)(3/3 ページ)

[まえだこうへい,Debian JP Project]
前のページへ 1|2|3       

使い方に応じたネットワーク構成(続き)

●ケース4:サービス用のゲストOSを複数起動し、外部ノードからゲストOSに簡単にアクセスできるようにする

 ホストの物理NICとゲストOSが接続するtapデバイスをブリッジのインターフェイスとして設定します。これによりホストOSの接続している物理的なL2ネットワークに、ゲストOSが接続しているように機能します。そのため、外部ホストはもちろん、ゲストOS間の通信も行うことができます。

 なお、ケース1〜3までは、kvmグループに所属していれば一般ユーザーで実行できましたが、ケース4で使用するtapデバイスにはroot権限が必要です。ネットワーク構成は図4です。

図4 tapデバイスを使用したブリッジモードでの接続構成 図4 tapデバイスを使用したブリッジモードでの接続構成

1)ホストOSでの設定(ブリッジの設定)

 
# ifconfig eth0 0.0.0.0 promisc up     ←eth0をプロミスキャスモードにする
# brctl addbr br0                      ←br0という名前でイーサネットブリッジを作成する
# brctl addif br0 eth0                 ←eth0をbr0ブリッジのポートにする
# ifconfig br0 up                      ←br0ブリッジをリンクアップさせる
 

 ホストOSも外部と通信させる場合は、br0に下記のネットワーク設定を加えます(注5)。

 
# ifconfig br0 192.168.0.102 netmask 255.255.255.0
# route add default gw 192.168.0.254

2)Guest1を起動

 
# kvm -hda sid1.img -boot c -m 384 -curses -net nic,macaddr=52:54:00:12:34:56 \
   -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup

3)Guest1上でのネットワーク設定

 
# ifconfig eth0 192.168.0.111 netmask 255.255.255.0
# route add default gw 192.168.0.254    ←ルータをデフォルトゲートウェイに指定

4)Guest2を起動

 
# kvm -hda sid2.img -boot c -m 384 -curses -net nic,macaddr=52:54:00:12:34:57 \
   -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup

5)Guest2上でのネットワーク設定

 
# ifconfig eth0 192.168.0.112 netmask 255.255.255.0
# route add default gw 192.168.0.254    ←ルータをデフォルトゲートウェイに指定

6)ホストOSでの設定確認

 
# sudo brctl show
bridge name     bridge id          STP enabled    interfaces
br0             8000.000d0b80c01e  no             eth1
                                                  tap0
                                                  tap1

 ブリッジbr0に、eth1、tap0、tap1がインターフェイスとして加えられていることが分かります。

注5:br0にIPアドレスとデフォルトゲートウェイを設定していない場合、ゲストOS起動時のscriptオプションで指定した/etc/kvm/kvm-ifupが正常に実行されません。具体的には、kvm-ifupの中に記載されている“/usr/sbin/brctl addif ${switch}$1”が実行されません。そのため、guest1、guest2を起動中に、ホストOS上で下記コマンドを手動で実行する必要があります。

# brctl addif br0 tap0
# brctl addif br0 tap1

 KVM/QEMUを利用する場合の多くは、ケース1、2などが多いと思います。しかし、KVMをXenやVMware ESXiのようにサーバ統合などの用途で使う場合にはケース4の構成が必要になると思われます。

 今回はブリッジをレイヤ2モードで使用するケースを想定しましたが、設定方法によってはケース2や3の代わりにtapを使うこともできます。つまり、tap0、tap1をブリッジのインターフェイスにするのではなく、IPアドレスとゲストOSごとへのスタティックルートを直接設定することで、ホストOSをルータのように動かすこともできます(ただし、設定は非常に複雑です)。

 利用する構成に応じていろいろ試し、用途に応じて使い分けるといいでしょう。

コラム■想定されるFAQ

 KVMの導入に際して想定されるハマりどころやツッコミをFAQ形式で挙げてみました。もし導入に詰まってしまったときの参考にしてください。

Q1:kvm、kvm-imgコマンドがありません。

A1注4にも記載しましたが、ディストリビューションによって、コマンドの名称が異なります。Fedora、CentOSなどではqemu-kvm、qemu-imgコマンドになっています。導入した環境のパッケージ管理ツールで調べて、適宜読み替えてください。

Q2:使っているカーネルでは使えないみたいなんですが。

A2:まず、お使いの環境が、kernel 2.6.20以降であることを確認してください。2.6.20以降の場合は、下記オプションを有効にしてカーネルをリビルドしてください(以下は2.6.29.1での場合)。

CONFIG_KVM_CLOCK
CONFIG_KVM_GUEST
CONFIG_HAVE_KVM
CONFIG_KVM
CONFIG_KVM_INTEL または CONFIG_KVM_AMD

最後の行のオプションは、前者はIntel VTの場合、後者はAMD-Vの場合です。また、カーネルのバージョンが上がるにつれて、カーネルオプションの数も以下のように増えてきています。それぞれのオプションが何を意味するのかは、ご自身で調べてみてください。

  2.6.24
   
CONFIG_KVM
CONFIG_KVM_INTEL
CONFIG_KVM_AMD
  2.6.25
   
CONFIG_HAVE_KVM
CONFIG_KVM
CONFIG_KVM_INTEL
CONFIG_KVM_AMD
  2.6.26以降
   
CONFIG_KVM_CLOCK
CONFIG_KVM_GUEST
CONFIG_HAVE_KVM
CONFIG_KVM
CONFIG_KVM_INTEL
CONFIG_KVM_AMD

Q3:kvm/qemuのオプションが覚えきれません。

A3:数が多くて、確かに覚えるのは大変です。今回の記事を参考にmanマニュアルを熟読して、イメージディスク作成用やゲストOS起動用のスクリプトを用意しておくといいでしょう。

Q4:QEMUコンソールでAlt+2を押したあと、元に戻れません。

A4Ctrl+Alt+1を押すと元の画面に戻ります。

Q5:コマンドラインに拒否反応を示してしまうのですが。

A5virt-manageroVirtというGUIの管理ツールがあります。そちらを使ってみるといいでしょう。

Q6:それなら、最初からvirt-managerやoVirtの使い方を解説すればいいのでは?

A6:今回はGUIに頼らない基礎的な使い方を目的にしています。virt-managerもoVirtもlibvirtというAPIを使用しており、今回紹介したコマンドを直接使うわけではありませんが、コマンドベースでの使い方を理解しておけば、それらのツールの仕組みの理解にも役立つことでしょう。


まとめ

 KVMはQEMUに依存しているので、kvmおよびkvm-imgコマンドの使い方を覚えると、QEMUも同じように利用できるようになります。QEMUはCPUエミュレータなので、ほかのアーキテクチャの仮想環境も利用できるという点でとても便利です。

 また、今回はGUIの管理ツールについては触れませんでしたが、KVMの管理の基本になるのはQEMUです。ですので、繰り返しになりますが、QEMUの操作方法を理解しておくことにより、その他のツールの裏側で行っていることを理解できるものと思います。

 次回は、KVMが抱える課題と今後の方向性について紹介する予定です。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。