今回は仮想化ソフトウェアのひとつ、KVMのインストール手順をご紹介します。
仮想化ソフトウェアといえば、世の中ではXenやVMwareが有名で、これらを利用したサービスも数多くあります。さくらインターネット社内でもXenServerを使った実験プロジェクトがいくつかあるのですが、KVMの方は少なく、ノウハウの共有が進んでいません。それならば、ということで研究所では現在KVMの動作の確認とパフォーマンス試験に取り組んでいます。
今回ご紹介する手順は、読者のみなさんにも気軽に試していただけるようカジュアルにまとめましたが、KVMを動作させる専用のサーバと、VNCクライアントやtelnet等を使いリモートでコントロールする作業用のWindows PCを分けることを想定しています。1台のマシンしか都合できないという方は、それぞれの環境に合わせて工夫していただければと思います。
KVMの構成
KVMを用いた仮想化は、実際にはqemuというエミュレータと高速な仮想化環境をサポートするカーネルモジュールKVMの2つから成っています。KVMは最新のLinuxカーネルに組み込まれているので特に準備は必要ありません。VMのコントロールはもっぱらqemuの機能を利用することになります。
ホストOSを準備する
まず最初にホストOSを用意します。専用のホストをゼロから用意できるのでしたら、お勧めなのはFedora12の64bit版です。社内で聞き取り調査をしたところ、Ubuntuが素直でいい感じですよという意見があったのですが、私(鷲北)がUbuntuの癖をまったく理解していないため、Fedoraをチョイスしています。このほかサーバマシンについては;
- VTに対応したサーバを用意しましょう
- コア数は多いほどよいですが、性能を求めなければ1コアでも動きます
- メモリはVM同士で取り合いになるので多めに用意しましょう
- HDDはそれほど大きくなくても大丈夫です。使う分だけ用意しましょう
などのポイントを押さえておくべきと思います。
ホストOSのインストールが終わったら、最初にKVMモジュールをロードします。前述したとおり、LinuxはすでにKVMモジュールが組み込まれているので、ロードするだけでOKです。
# modprobe kvm_intel
もしもAMDのCPUをお使いなら、「kvm_amd」をロードしてください。正しくロードされているか否かを確認するには
# lsmod | grep kvm kvm_intel 48184 0 kvm 163952 1 kvm_intel
で判断できます。
KVM(qemu)をインストールする
KVM(qemu)のインストールはパッケージを使ってもいいのですが、最新版をmakeした方がオプションをきちんとコントロールできるのでお勧めです。私が試した限りでは、yum等を使って引っ張ってくると微妙に古いバージョンだったり、コンパイル時オプションがoffだったりします。というわけでコンパイルする手順をご紹介します。
KVMのソースコードは本家サイトからリンクをたどっていくと入手できます。qemu-kvm-0.12.2.tar.gzのような名前のうち、一番新しいものを選べばOKです。kvm-kmod-2.6.33.tar.bz2のようなカーネルモジュールのパックもありますが、Fedora12付属のモジュールで十分動きますので不要と思います。
KVMのコンパイルにはいくつかパッケージが必要です。列挙すると;
- gcc
- kernel-devel (Fedoraでは必要、と本家ガイドに書いてあります)
- zlib-devel
- pciutils-devel、pciutils-libs (KVM device assigningを有効にするために必要)
これらはyumでインストールすればよいでしょう。また、本家ガイドによるとSDL-devel(グラフィック端末に必要)やgnutls-devel(VNCでTLSを利用するために必要)が示されていますが、とりあえずなくても動きます。
当方で遭遇した問題なのですが、pciutils-develが3.1.6にアップデートされたとき、3.1.4では問題がなかったpciutls-develパッケージが、pciutils-libsを明示的に指定してやらないとリンクが壊れてライブラリが読めなくなります。念のためこのガイドには両方を指定しています。
環境が整ったら、ソースコードを展開してconfigureを実行します。オプションは色々ありますが、動かすだけなら特別なオプションはいりません。configureは環境をチェックしてオプションの有無を表示するので、必要なオプションが有効化されているかを確認します。
Install prefix /usr/local BIOS directory /usr/local/share/qemu binary directory /usr/local/bin Manual directory /usr/local/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /root/make-kvm/qemu-kvm-0.12.2 C compiler gcc Host C compiler gcc CFLAGS -O2 -g QEMU_CFLAGS -m64 -Wold-style-definition -Wold-style-declaration -I. -I$(SRC_PATH) -U_FORTIFY_SOURCE -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing LDFLAGS -Wl,--warn-common -m64 -g make make install install host CPU x86_64 host big endian no target list x86_64-softmmu tcg debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no -Werror enabled no SDL support no curses support no curl support no check support no mingw32 support no Audio drivers oss Extra audio cards ac97 es1370 sb16 Block whitelist Mixer emulation no VNC TLS support no VNC SASL support no xen support no CPU emulation yes brlapi support no bluez support no Documentation no NPTL support yes GUEST_BASE yes PIE user targets no vde support no IO thread no Linux AIO support no Install blobs yes KVM support yes KVM PIT support yes KVM device assig. yes KVM trace support no fdt support no preadv support yes fdatasync yes uuid support no
問題がなければmakeし、終了したらmake installして完了です。
ゲストOSを準備する
続いてゲストOSを起動するための準備をします。
- ゲストOSのファイルシステムのために、ホストOS上にimgファイルを作ります。このファイルがゲストOSのHDDとしてアタッチされます
- からっぽのHDDをフォーマットしてインストールするために、ゲストOSのインストールイメージが必要です。インストールしたいゲストOSのインストール用ISOイメージを入手します
ファイルの準備
ゲストOSのためのファイルは、qemu-imgというツールを使います。ゲストOSをvm00と命名し、そのイメージファイルとして「vm00.img」という名前のファイルを作成する場合、以下のようになります。
# qemu-img create -f qcow2 vm00.img 10G
qcow2とはKVMで推奨されているファイルフォーマットの名前です。ちょっと試すためにはこの指定で十分ですが、10GBを超える大きなファイル(たとえば100GB)を指定するとパフォーマンスに多大な影響が出ます。詳細は別の機会に説明したいと思いますが、とりあえず試すなら10GBもあれば十分です。
ゲストOSのインストールISOイメージ
なんでもお好きなものをご用意いただければよいのですが、今回はFreeBSDにします。たとえばftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/をご覧いただき、8.0-RELEASE-i386-dvd1.iso.gzをダウンロードして、gunzipしてisoファイルに展開しておきます。
VNCビューアを用意する
ゲストOSを起動した直後には、ゲストOSへのアクセス手段を特別に用意しなければいけません。KVMはSDLとVNCの2つの手段を用意しています。ここではホストOSとは別に、作業用のWindows PCがあることを前提にして、Windowsから簡単にアクセスできるVNCをご紹介しておきます。
VNCクライアントには色々あるので、お好みのものを使ってください。私はUltraVNCのViewer onlyのzipをダウンロードして使っています。
ゲストOSをインストールする
いよいよゲストOSの起動です。これから何度も起動することになると思うので、スクリプトにしておくのがお勧めです。
#!/bin/sh qemu-system-x86_64 -hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 -daemonize \ -cdrom 8.0-RELEASE-i386-dvd1.iso -boot d
qemu-system-x86_64がVMを生成してゲストOSを実行するエミュレータです。今回、ゲストOSでのネットワーク設定には触れていません。別の機会にご紹介します。
オプションの意味は以下の通りです。
- -hda vm00.img
作成したイメージファイル(vm00.img)を1台目のIDEディスクとしてアタッチします - -m 1024
ゲストOSのメモリサイズを指定します。単位はMBです - -monitor telnet::4444,server,nowait
qemuモニタへのアクセス手段を指定します。上記のようにするとホストOSのポート4444番にtelnetすることでモニタに接続できます。複数のゲストOSを立ち上げる場合、ポート番号を変更して区別できます。nowaitオプションを指定しないと、モニタに接続するまでqemuがホールドしてしまいます - -vnc :0
VNCの接続番号を指定します。複数のゲストOSを立ち上げる場合、この数字を指定して特定のゲストOSに繋ぎます - -daemonize
プロセスをデーモン化します。指定しないと通常プロセスとなるため、コンソールを占拠されてしまいます - -cdrom filename.iso
インストールISOファイルをCD-ROMドライブとしてアタッチします - -boot d
CD-ROMからブートします
コマンドを実行するとすぐにプロンプトに返ってくると思いますが、ゲストOSは起動しています。VNCviewerを使ってアクセスしてみましょう。
ホストOSのIPアドレスを指定すると、起動しているゲストOSへ接続できます。
VNC Viewerの内側は完全にゲストOSの環境なので、キー操作で自由にコントロールできます。インストーラの指示に従ってOSインストールを行います。
インストールが終わったら
インストールが終るとリブートの指示になりますが、KVMはCD-ROMブートに固定されてしまっているので、リブートしてもうまく起動できません。インストーラからゲストOSを終了できないときは、ホストOS上で動くqemuモニタから強制終了することができます。ホストOSのコマンドラインから、telnetを使ってモニタに接続します。起動時に-monitorオプションで指定したポート番号にアクセスするとモニタが起動します。
# telnet localhost 4444 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. QEMU 0.12.2 monitor - type 'help' for more infomation (qemu) q ←コマンド入力 Connection closed by foreign host.
ゲストOSがシャットダウンすると、VNCの接続も自動的に切れます。
イメージファイルにはゲストOSのインストールが終わったので、CD-ROMを外してゲストOSを起動します。先ほどのスクリプトを変更して、-cdrom以降の部分を削除します。
#!/bin/sh qemu-system-x86_64 -hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 -daemonize
これを実行して、ふたたびVNC Viewerでアクセスすると、今度は起動したFreeBSDのloginプロンプトが見えるはずです。
おわりに
いかがでしたでしょうか。うまく起動できましたか?
ゲストOSのシャットダウンは、FreeBSDであれば shutdown -p をお勧めします。最後にゲストOS自体が切れて完全に終了します。shutdown -h をするとhaltしてしまうので、qemuモニタから切らなければならなくなります。
今後はゲストOSへのネットワークの導入、qemuモニタの使い方、LiveMigrationの方法、ベンチマーク比較などをご紹介する予定です。
[…] なぜ今、FCoEか?を、腹に落ちるまで理解すると…(前編)newsing:1 KVMを使う(インストール編) « さくらインターネット研究所はてブ:8 浴衣のアイドル画像まとめnewsing:1 […]
参考になりました。ありがとうございました。
qemu-imgコマンドの引数にcreateが足りないですね。
亀レスですみません! 2ヶ月も放置してしまいました。
おっしゃる通り create が抜けていますね。謹んで訂正させていただきます。
[…] KVMを使う(インストール編) « さくらインターネット研究所 […]
[…] さくらインターネット研究所 – KVMを使う(インストール編) […]
こんにちは!
KVMとXenのパフォーマンス検証しているんですが、KVMの方がCPU使用率高くて御社で実施されている
チューニングがあったら教えて下さい!
よろしくお願いします!
[…] さくらインターネット研究所 KVMを使う(インストール編) […]
[…] KVMを使う(インストール編) « さくらインターネット研究所:2014年6月7日閲覧 […]
[…] さくらインターネット研究所 KVMを使う(インストール編) […]