Detlef Drewanz、Lenz Grimmer共著
2012年12月掲載(2013年1月更新、eSTEP Blogから転載)
背景このシリーズの前の2つの記事では、ハイパーバイザベースのハードウェア仮想化を実現するOracle VM Server for SPARCとOracle VM Server for x86について説明しました。 ここでは、Oracle SolarisゾーンとLinuxコンテナに目を向けて、ソフトウェア仮想化の1つのタイプであるオペレーティング・システム・レベルの仮想化について説明します。
|
Oracle SolarisゾーンとLinuxコンテナは、スタンドアロン製品ではありません。オペレーティング・システムの機能です。 原則的に、この2つののテクノロジーは似ています。 両方とも、アプリケーション・レベルの仮想化テクノロジーであるため、OSカーネルの"上"に配置されます。 そのため、ハイパーバイザベースの仮想化とは異なり、さらなるソフトウェア・レイヤーは追加されません。 Oracle SolarisゾーンとLinuxコンテナには、複数のゾーンまたはコンテナで共有される1つのOSカーネルが存在します。
これを総体的に見るため、このシリーズの最初の記事で使用した、Oracle Solarisゾーンの位置付けを示した図を再度使用します(図1を参照)。 図1で、Linuxコンテナの位置付けとOracle Solarisゾーンの位置付けをおおまかに比較できます。 この2つのテクノロジーの違いは、おもに実装レベルと、OSに統合される方法にあります。
図1. オラクルの仮想化テクノロジーと製品
さらに詳しく説明します。
Oracle Solarisゾーン・テクノロジーは、Solaris ExpressとOracle Solaris 10 3/05でまず導入されてOracle Solarisコンテナと呼ばれていた、Oracle Solarisの1つの機能です。 Oracle Solaris 11で、このテクノロジーを正式にOracle Solarisゾーンと呼ぶようになりました。
Oracle Solarisゾーン・テクノロジーは、アプリケーションの仮想化レイヤーを作成します。 ゾーンは、アプリケーションの動作領域を提供する"サンドボックス"であると言えます。 大域ゾーンには、Oracle Solarisカーネル、デバイス・ドライバとデバイス、メモリ管理システム、ファイル・システム、および多くの場合にネットワーク・スタックが保持されます。 他のゾーンは非大域ゾーンと呼ばれ、相互に切り離されていますが、すべての非大域ゾーンが1つの大域ゾーンを共有します。
図2. Oracle Solarisゾーン
大域ゾーンは、すべての物理リソースを認識し、非大域ゾーンに対してこれらのリソースへの共通のアクセス権を提供します。 アプリケーションにとって、非大域ゾーンはOracle Solarisの個別のインストールのように見えます。
非大域ゾーンは、独自のファイル・システム、プロセス名前空間、セキュリティ境界、およびネットワーク・アドレスを備えています。 要件に基づいて、非大域ゾーンに、個別のネットワーク・プロパティを持つ、独自のネットワーク・スタックを設定することもできます。 また、非大域ゾーンごとに管理ログイン(root
)も異なりますが、特権ユーザーの場合でも、ある非大域ゾーンから隣接する非大域ゾーンにアクセスすることはできません。 これに対し、大域ゾーンから見た場合、非大域ゾーンは、ゾーンIDと呼ばれるタグでグループ化された一連のプロセスに過ぎません。
仮想化レイヤーおよび非大域ゾーンで実行されるアプリケーションのオーバーヘッドはほぼゼロであるため、このタイプの仮想化は、しばしばライトウェイトな仮想化と呼ばれます。 これにより、OSからのネイティブなI/Oパフォーマンスを実現しています。 そのため、数多くのアプリケーションを仮想化する必要があり、高いパフォーマンスが要件となっている場合は、ゾーンは最適な選択肢となっています。
すべての非大域ゾーンが1つの大域ゾーンを共有するため、すべてのゾーンで同じレベルのOSソフトウェアが実行されますが、1つ例外があります。 ブランド・ゾーンでは、非ネイティブのアプリケーション環境が実行されます。 たとえば、Oracle Solaris 10では、Oracle Solaris 8コンテナ(solaris8
)、Oracle Solaris 9コンテナ(solaris9
)などのレガシーなブランド・ゾーンを作成できます。これらのコンテナは、Oracle Solaris 8のランタイム環境とOracle Solaris 9のランタイム環境を提供しますが、引き続き大域ゾーンのOracle Solaris 10カーネルを共有します。 Oracle Solaris 11では、Oracle Solaris 10ブランド・ゾーン(solaris10
)を作成できます。
Oracle Solaris 10のゾーンと比較し、Oracle Solaris 11のゾーンはOSとさらに緊密に統合されています。 Oracle Solarisゾーン・テクノロジーは、OSの単なる追加機能ではなくなっています。 ゾーンの自動インストールや自動更新に関しては、ゾーンがOSのライフ・サイクル管理プロセス全体に適切に統合されます。 また、ゾーンとカーネル・セキュリティ機能の統合がさらに緊密になっており、ゾーンの委任管理をさらに強化できます。 さらに、Oracle Solaris 11のゾーンでは、ZFSとの統合の強化、ブート環境の一貫した使用、ネットワーク仮想化機能、およびOracle Solarisリソース管理といった改良も行われています。ゾーンは、コマンドラインを使って非常に簡単にセットアップでき、使用も簡単です。 ゾーンの構成にグラフィカル・ツールを使用する場合は、Oracle Enterprise Manager Ops Center(このシリーズの後の記事で説明)を使用できます。
Oracle Solarisゾーンについて説明しましたが、ここでは、Linuxコンテナとはどのようなものなのかについて説明します。 Oracle Solarisゾーンと同じテクノロジーなのでしょうか。同じテクノロジーではない場合、この2つのテクノロジーにはどのような違いがあるのでしょうか。
LXCプロジェクト・ページに定義が記載されています。
Linuxコンテナでは、エミュレートするハードウェア上でまず別の仮想システムをブートしてから、準仮想化および関連するメカニズムを使ってオーバーヘッドを軽減するよう試みる、KVMやXenなどのシステム仮想化テクノロジーとはまったく異なるアプローチを取っています。 完全な分離に後から効率性を組み込む代わりに、LXCでは、まず、効率的なメカニズム(既存のLinuxプロセス管理)を使用し、分離を追加することで、1つのサーバー上で数千ものエミュレーション・システムを同時にサポートするだけでなく、ルーターやスマートフォンにライトウェイトな仮想化オプションを提供することが可能な、chroot
同様にスケーラブルかつ移植可能なシステム仮想化メカニズムを構築しています。
Linuxコンテナ・プロジェクトは、2006年ごろにLinuxカーネルの外部パッチ・セットとして開始されました。 カーネル2.6.29(2009年3月)以降は、メインラインのLinuxに統合されています。 LXCは、Linuxカーネルの制御グループ(Cgroups)サブシステムを使用したリソース管理と、プロセス名前空間を使用したリソース分離を提供します。 LXCでは、これらのカーネル機能を利用して、個々のアプリケーション、オペレーティング・システム全体、またはこれら両方の完全なリソース分離とリソース制御が可能な、ユーザー空間のコンテナ・オブジェクトを作成できます。
Linuxコンテナでは基本的にネイティブ・パフォーマンスが得られ、リソースの割当てをリアルタイムで効率的に管理できます。 Linuxコンテナ内で実行されるバイナリは、実際には、他のプロセスと同様に、通常のプロセスとしてホストのカーネル上で直接実行されます。 特に、このことは、CPUとI/Oのスケジューリングがはるかに適切であり、チューニング可能であることを意味し、Xenをparavirtモードで使用した場合でも実際の仮想化では実現できない、ネイティブのディスクI/Oパフォーマンスが得られます。 つまり、Linuxコンテナ内で、データベースなどのディスクI/Oの負荷が大きいアプリケーションを実行することもできます。
完全な仮想化ソリューションとは異なり、Oracle Solarisゾーンと似ているLXCでは、Linux以外の他のオペレーティング・システム(専用のオペレーティング・システムや他のタイプのUNIXなど)は実行できません。 ただし、同じホスト・カーネルの異なるコンテナで、さまざまなLinuxディストリビューションを実行できます。 たとえば、Unbreakable Enterprise Kernelリリース2が実行されているOracle Linux 6システムにホストされているコンテナ内で、Oracle Linux 5のインスタンスを実行できます。
このため、実質的に、Linuxコンテナは、さまざまな分離レベルで作成できる"強化された"chroot
環境として説明されるだけでなく、Linuxカーネルの分離されたプロセス・グループとして共有することもできます。
Oracle SolarisゾーンとLinuxコンテナは、アプリケーションのライトウェイトな仮想化ランタイム環境を実現します。 Oracle Solarisゾーン・テクノロジーは、Oracle Solaris 10以降存在するもので、現在、Oracle Solaris 11に高度に統合されています。
Linuxコンテナ・テクノロジーは、テスト目的と評価目的で、Oracle Linuxのテクノロジー・プレビューとしてUnbreakable Enterprise Kernelとともに利用できます。
Solarisコンテナ:
Linuxコンテナ:
DetlefはPrincipal Sales Consultantであり、ドイツのポツダムで勤務しています。 オラクルの北ヨーロッパ・サーバー・アーキテクト・チームで、サーバーとOracle Solarisのスペシャリストとして従事しています。 1998年にSun Microsystemsに入社し、現在、オラクルの社員となっています。 それ以前は、日立ネットワーキング・フランクフルトでネットワーク・サポートに従事し、ロストック大学のコンピュータ・サイエンス学部の科学スタッフ・メンバーでもありました。 Detlefは、コンピュータ・サイエンスの修士号を取得しています。
Lenz Grimmerは、Oracle Linux製品管理チームの一員です。 1995年以降、Linuxとオープン・ソース・ソフトウェアに携わっています。
リビジョン1.1、23.01.13 |