近ごろの仮想化事情
最近の「クラウド」(という言葉)の普及にともない、クラウドを支える技術としての仮想化も、一気に普及段階に入ってきました。OSレベルの仮想化はもちろん、ディスクなどのハードウェアやネットワーク、OSより上のレイヤでもミドルウェアやアプリケーション、デスクトップ環境まで仮想化する技術やサービスが次々と立ち上がっています。
もちろん、OSまわりの仮想化についても、利用目的によってさまざまな仮想化技術が開発され、利用が進んでいます。仮想化というと誰もが思い浮かべるハイパーバイザ方式の仮想化ソフトでは、CPUの挙動まですべてエミュレートする完全仮想化と一部処理をホストOSネイティブに振り分ける準仮想化、さらにこれらをハードウェアから支援する機能も、チップメーカ等で開発が進められています。
LXCって何?
VPSは、実際に動作している物理サーバの上で複数の仮想サーバを動作させ、個々の仮想サーバをユーザに提供するサービスです。そのサービスは、仮想化ソフトウェアを駆使して運用されているわけですが、ここで課題になるのが「機能とパフォーマンスのトレードオフ」です。たとえば完全仮想化を実現するKVMなどのソフトウェアでは、OSの上でさらにもう1つ(実際には複数)のOS(カーネル)を動かすという非常にオーバーヘッドの大きな処理を行います。
このため、厳密に単体OSと同様の自由度や機能を求めないケースでは、もっとオーバーヘッドの小さい仮想化ソフトウェアが利用されています。こうした「軽い」仮想化ソフトウェアの一種がLXCです。LXCは、IBMの技術者によって開発が始められたオープンソースの仮想化環境で、単独のLinuxカーネル上で、プロセスの権限で複数の仮想サーバを制御するものです。
スマートな仮想化を実現する「コンテナ」
LXCの基本技術となるのが「コンテナ」と呼ばれる一種のリソース管理システムです。ファイルシステムの他、ホスト名やプロセス、ネットワークソケットなどのカーネルが扱うさまざまなリソースの管理テーブルを個々に用意し、これをコンテナごとに管理することで、コンテナごとに独立したOSのように動作させることができます。
コンテナを使ったソフトウェアとしてはParallels Virtuozzo Containersという商用ソフト、そしてこのソフトのLinux版をOSS化したOpenVZというソフトウェアが知られています。OpenVZは多くのVPSで採用されている実績をもつコンテナ方式のソフトウェアです。このほか、OpenSolaris ZoneというSolaris専用のソフトもあります。
他の仮想化ソフトとの違い
ここでもう一度、LXC(コンテナ型の仮想化)と他の仮想化ソフトとの違いを見てみましょう。仮想化といえるかどうかわかりませんが、コンテナ方式の原型といえるのが、chrootやFreeBSDのjail環境です。これらはファイルシステムをプロセスの見える範囲で限定することで、他のプロセスと独立して動作させることができます。しくみも単純でオーバーヘッドはほとんどありません。ただ、ファイルシステム以外のリソースは共通のため、たとえば各環境ごとに同じWebサーバを立ち上げることはできません。LXCはこれにさまざまなリソースの独立管理を付加した形と言えます。
方式 | 完全仮想/準仮想 | コンテナ型 | chroot/jail |
しくみ | ハードウェア/OSカーネルをエミュレート | プロセス権限でOSリソースを制御 | ファイルシステムでプロセスを限定 |
特徴 | 自由度大、別種のOSが動作可能、オーバーヘッド大 | カーネル固定/共用、オーバーヘッド小 | ファイルシステム以外ほぼ共用、オーバーヘッドほぼ無 |
ソフト | KVM、VMware、Xen 等 | LXC,Virtuozzo,OpenVZ | chroot、jail |
一方、たとえば完全仮想化を実現するLinux KVMなどのソフトウェアでは、OSの上でさらにもう1つ(実際には複数)のOS(カーネル)を動かすという非常にオーバーヘッドの大きな処理を行っています。たしかにこれで環境の独立性は高まり、ユーザからは単独マシンに近い感覚の運用が可能ですが、仮想化の処理に多くのリソースが消費され、相対的にパフォーマンスが大きく低下します。
LXCはどのように動作しているのか
コンテナ方式では、コンテナごとのリソース管理テーブルを「Namespace(ネームスペース:名前空間)」と呼びます。そして、Namespaceを使って実際に各コンピュータリソースを配分、制御するためのcgroup(ControlGroup)という機能がその中核です。これらはもちろんLinuxカーネル内の機能で、LXCはユーザ領域からこれらを利用するためのソフトウェア群と見ることもできます。
Namespaceやcgroupは徐々にLinuxカーネルに取り入れられてきた機能です。最近のカーネルでようやく仮想化環境として動作する基本的な機能が揃ってきました。つまりLXCはLinuxネイティブのコンテナ機能なのです。また非常に新しい機能であるとも言えます。これに対して古くからあるOpenVZなどのコンテナ型ソフトでは、カーネルパッチの形でコンテナ機能を付加しているため、利用にはカーネルの再構築が必要でした(※)。
LXCでVPSのススメ
以上のように、LXCは仮想化ソフトとしての独立性、自由度とパフォーマンスのバランスがうまく取れた方式と言えます。では、実際にVPSを利用する際に、LXCだとどんなメリットがあるでしょうか?
VPSの利用ケースのほとんどは、Webなどのサーバを立てての運用用途だと思われます。こうした利用の場合、OSのバージョンを管理したり、ましてやカーネルに手を加えるといったことはまずありません。むしろそうした手間をかけたくないからVPSを利用していることが多いでしょう。このような利用にKVMなどのソフトは機能的にはオーバースペックで、パフォーマンスやコスト面で不利となります。
上記のような点を考慮すると、VPSとコンテナ型のLXCは非常に相性が良いといえます。では、同じコンテナ方式の別のソフトウェアとの比較はどうでしょうか? OpenVZやVirtuozzo Containersは古くから使われていて、実績のあるソフトウェアです。管理できるリソースの種類など、機能も豊富です。しかし現状ではカーネルに手を加えなければ動作しないというデメリットがあります。
これに対してLXCは、最新カーネルを使えばカーネルに手を加えることなく、標準的なリソースがすべて独立した仮想化環境を手に入れることができます。新しい技術の普及を占う指針の1つに、「標準になっているか」というポイントがありますが、LXCはLinuxカーネルに取り入れられているということで、この点でも安心して利用できると言えるでしょう。
まだ新しい技術ですが、日本でさっそくこのLXCを取り入れて活用しているホスティングサービスがあります。Joe's ウェブホスティングでは、LXCの機能とパフォーマンス、コスト面でのメリットを引き出したVPSサービスを展開し、注目されています。同社はLXCの開発にもコミットしており、技術面のサポートも十分期待できるでしょう。
VPSで使われている仮想化ソフトの方式は、通常は利用する側であまり意識する必要のないことですが、仮想化に関わる各ソフトウェアやハードウェア技術が成熟しつつある中で、今後はサービスを選ぶ際に重要なポイントとなっていくと思われます。この機会にぜひ実際に調べて、できれば使い比べてみてはいかがでしょうか?
- lxc Linux Containers
- URL:http://lxc.sourceforge.net/
- Joe's VPS
- URL:http://www.joes-vps.com/
- Joe'sウェブホスティング
- URL:http://www.joeswebhosting.net