こたつをしまうタイミングを見失ってオロオロしているTAMです。どうも。
べ、別にゲームばっかりしてるわけじゃないんだからね!、勘違いしないでよね!、と言う意味を込めて今日はkvmの話でも。
まあ、俺仮想化に特に詳しいわけでも無いのであまり参考にしないようにだけお願いしたいのですが、結論から言うと、びびってた割に簡単でございました。
さて。
ずっとTAMはvmware serverを使っておりました。こいつの利点はと言うと、管理が全てブラウザでできる、と言う点でございます。以上です。
いやまあ、本当に以上なので正直いい加減別のものに移行しないとなーと思っていたのですが、そもそも使っていた仮想マシンの全てがlinuxであったわけで、kvmなんてええんちゃう?と言う感じで先日完全に移行しました。
と言うわけでlibvirt+kvmのお話です。
今回、ホストマシンはubuntu serverの12.04を使いました。いきなり最新版かよチャレンジャーやなwって感じでございますが、まあ仮想化っつー技術自体もりもりと現在進行形で進んでいる技術のような気がなんとなくしたのでとりあえず新しいほうがいいかなーと言う感じです。LTSですし。
で。用意したマシンですが、とにかくお金使いたくなかったのでCeleron G530で組みました。4000円弱で買えてしまうCPUですがこいつちゃんとkvmで要求されるVT-xに対応しております。ぶっちゃけうちの使い方ではこいつでも性能余るくらいの使い方でございます。
メモリはまあ、8GB乗せました。値段的に4GBで我慢する理由もありませんし。込み込みで2万円ちょいで全てを揃えた感じです。これで自宅の数台のマシンをまとめることができると考えればかなりお得な時代だと思うのですが、どうでしょうね。
余談になりますが、virt-managerを使うクライアントマシンは例によってkubuntu 12.04です。こいつの話はまた今度まとめよっかなーとか思ってますが、KDE可愛いよKDE。
さて。
えーっと、ぶっちゃけググれば設定方法なんかは諸々多くの方々が説明して下さっているので、まあ、ググれ?。ってことになっちゃうのだけど、ひっかかった点からすると、ネットワーク回りですな。
libvirtdとかkvmとかを設定するとホストでvirbr0と言うネットワークアダプタが設定されてるんですが、こいつ動作としてはNAT、vmwareとかでのホストオンリーネットワーク?的な動作になるようで。そうじゃなくて、物理マシン共々同じサブネットに配置したいんだけどなーって時にこの設定ではちょっと困る感じ。
で、色々ググってみた結果、ホストのネットワーク設定を以下のような感じにするといいそうで。
auto eth0 iface eth0 inet static address 0.0.0.0 auto br0 iface br0 inet static address 192.168.0.68 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.74 bridge_ports eth0 bridge_stop off bridge_maxwait 5 dns-nameservers 192.168.0.67
ホストマシンが192.168.0.68、ゲートウェイが192.168.0.74、ネームサーバが192.168.0.67とするとこう。要するに物理アダプタであるeth0でなくブリッジにホストマシンのネットワーク設定を施してくださいねーと言うことだそうで。あとは仮想マシンのネットワークインターフェイスに対してbr0を指定してやれば良い感じでございます。
で、早速ゲストを放り込んでうっはうはしたいわけですが、楽するためにubuntu server 10.04を1つ最低限の環境でインストールし、それをコピーして使います。
この方法は物凄く簡単かつ楽なのですが、例えばHDDイメージもコピーになるのでパーティションIDとかも共通になる(が故にコピーでも普通に起動するわけですが)とか言うことになります。こいつを良しとするか悪しとするかはまあ、使い方次第かなー。俺は全く気になりませんが。
で、更に楽をするためにサブネット内にdhcpdが仕込んでありまして、ネットワーク設定も楽したい、ってな感じでございます。とは言えvirt-managerからコピーしますと丁寧にMACアドレスは新しいものを用意してくれたりしますので、仮想マシン内の/etc/udev/rules.d/70-persistent-net.rulesあたりをちょいちょいと書き換えて、あとは/etc/hostnameでも書き換えてやればアドレスも自動配布!とか言う素敵な状態になります。まあ、dhcpdでMACアドレスからIPアドレス振ってるのでそっちで設定するから大して変わらんやん…とか言われるとそれまでですが、dhcpd側で一括管理できることに意味があるんじゃないかな?と自分を慰めております。
さて。
世の中にはvirtioと言う素晴らしいものがございまして、これつまり完全な仮想化ではなく準仮想化するための仕組み、とか言われてもわかりづれー!って感じですが、要するに「速くなる!(キリッ」ものでございます。
これを使うには仮想マシン設定でNIC及び仮想ディスクでvirtioを選んでおき、更にゲストOSがこいつのドライバをちゃんと読み込むと言うのが前提となるわけでございますが、lucidだと普通になにもせずにvirtioドライバ使いやがるのです。素晴らしい。つまり仮想マシン作る段階でvirtioデバイスとして設定しておくだけで後は何も考えずに準仮想化完了と。なにこれらくちんすぎる。
Windows向けのvirtioドライバとかも存在するみたいなのですが、使うには結構手順が大変なようで、まあこのへんは流石Linux on Linuxと言う感じなんでしょうかねー。
と言うわけで。
ぶっちゃけ2日くらいぶっつぶされるKAKUGOで挑んだ仮想化移行計画なのですが、半日程で終了して絶頂しそうになりました。便利な世の中ですよねえ。
で、パフォーマンスはどうなの?って感じの話になろうかとは思うのですが、正直物理マシンと比較してどう?ってのは、「物理マシンの性能自体がよくわからんので比較できません!(ドヤァ」と言う感じでございますが、以前ホストとしていたマシンがすこぶる古かったこともあり不満はありませんと言うか涎出るくらい速く感じます。役に立たねえ男だな。
まあ、予想以上にお手軽なので皆様もlibvirt+kvm試してみてはいかがでしょうか。