「仮想化」とは、ホスト上で実行する仮想マシンを作成するプロセスを指します。このホストコンピューターのハードウェアでは、ホストオペレーティングシステムが実行されます。仮想化ソフトウェアはホストオペレーティングシステム内で実行され、それぞれのゲストにリソースを割り当てます。ゲストには、それぞれ独自のオペレーティングシステムと、目的のアプリケーションを実行するために必要な一連の独自のライブラリとバイナリファイルが備わっています。ゲストOSは、処理能力、メモリ、ストレージ領域を備え、その他のコンピューティングリソースが割り当てられた物理コンピューターと同じように動作します。
仮想マシンには、「プロセス仮想マシン」と「システム仮想マシン」の2つのタイプがあります。これらの主な違いは、その規模と意図されたユースケースです。
プロセス仮想マシンとは
プロセス仮想マシンは、ホスト上で単一のプロセスをアプリケーションとして実行できるように設計された特殊なVMです。この一般的な例としてはJava仮想マシンがあります。Javaで記述されたアプリケーションはプラットフォームに依存せず、Java VMをサポートする任意のハードウェアおよびオペレーティング・システムで実行できます。開発者は、ハードウェアとオペレーティングシステムの互換性について気にすることなくJava VM用に記述することで、ホスト固有の問題に対処して、サポートされているあらゆるオペレーティングシステム上で、JavaコードをそれぞれのOSに向けてネイティブに記述されたもののように実行できます。
システム仮想マシンとは
システム仮想マシンは、仮想化のより大規模な形式です。システムVMは、物理マシンの完全なレプリカです。高性能なホスト コンピューターで複数のVMを実行し、各ゲストで独自のオペレーティング システムを実行することができます。そのためには、ホストでハイパーバイザーを実行する必要があります。
一部のハイパーバイザーソフトウェアはホストOS上で実行されます。これらは「タイプ2のハイパーバイザー」と呼ばれ、利便性と使いやすさを提供するものの、ある程度のレイテンシと追加のリソース消費が伴います。他のソリューションは、ホストのハードウェア(ベアメタル)上で直接実行できます。このタイプのハイパーバイザーは、「タイプ1のハイパーバイザー」と呼ばれます。タイプ1のハイパーバイザーは、ホストハードウェア上で直接実行されることで低レイテンシを実現する高性能のソリューションであり、リソースの効率的な使用が重視されるエンタープライズ環境でよく使用されます。
ハイパーバイザーにより、それぞれのマシンを個別に実行できるようになって、メモリ、ネットワークスループット、ストレージ、プロセッサリソースの動的な割り当てが可能になるとともに、ゲストVMを相互に分離してセキュリティ上の問題を回避することができます。
ハイパーバイザーによって必要に応じて新しい仮想マシンを容易に起動できるようになり、ホストのハードウェアを効率的に使用することができます。VMware ESXiやOracle VM VirtualBoxといった特定のハイパーバイザー用に作成された仮想マシンイメージは、対象のハイパーバイザーソフトウェアをサポートし、利用可能なシステムリソースを十分に備えた任意のハードウェアに導入できるという点で、高いポータビリティを備えています。このポータビリティとレプリケーションソフトウェアの機能を組み合わせることで、仮想化があらゆるビジネス継続性計画の重要な部分となります。Veeam Backup & Replicationを利用することで、オンプレミスの仮想マシンとクラウドでホストされている仮想マシンを管理できるようになり、組織のデータを保護するとともに、停止やハードウェア障害が発生した場合にバックアップを使って迅速なリストアが可能になります。
仮想マシンには、以下を含む多数のユースケースがあります。
仮想マシンには、いくつかの重要な利点があります。これにより、1つのデバイスで複数のオペレーティング システム環境を実行できます。これによって仮想マシンが、複数のサーバーを起動したり、さまざまなOS設定でアプリケーションビルドをテストしたり、従来のアプリケーションを実行したりするための安価で効率的な方法となります。たとえば、非常に古いバージョンのWindows用に作成された顧客アカウント システムに依存している企業は、ソフトウェアを実行するための専用の古いハードウェアを使用する代わりに、そのアプリケーションを含むVMを提供できます。
ハイパーバイザーは、それぞれのゲストにサンドボックス化された環境を提供します。ゲスト同士は互いのファイルシステムやメモリに直接アクセスできないため、VMはセキュリティの観点からも有用です。仮想マシンにウイルスが感染しても、被害を封じ込めることができます。仮想マシンがプログラムの誤動作が原因でクラッシュしても、ホストや他のVMに影響はありません。
仮想マシンのもう一つの便利な点として、移動や復元、バックアップが容易であることが挙げられます。仮想マシンのバックアップを作成するには、設定ファイルとディスクイメージのバックアップを作成するだけで済みます。災害復旧のシナリオでは、これらのファイルを新しいホストにリストアし、VMの電源を再びオンにすると、組織はより簡単に復旧し、稼働させることができます。仮想マシンはハードウェアに依存しないため、バックアップは、そのゲストを実行するのに十分なリソースがある任意のサーバーに復元できます。
ただし、仮想マシンのサンドボックス化と高いポータビリティには一定のデメリットもあります。それぞれのゲストVMは、オペレーティングシステムの完全なコピーを実行します。サーバーが十分にパワフルでない場合は、1台の物理サーバー上で複数の仮想マシンを実行することで、安定性に関する問題が発生する可能性があります。VMの使用目的によっては、コンテナーなど、目標を達成するためのより効率的な方法がある場合があります。
コンテナーは仮想化テクノロジの一種であり、仮想マシンと多くの類似点を共有しますが、目的は少し異なります。仮想マシンがOSとハードウェア層を含むマシン全体をシミュレートするのに対し、コンテナーはオペレーティング システム上で実行されるソフトウェア層のみを仮想化します。IEEEでは、コンテナを仮想マシンの軽量な代替ソリューションと表現しています。
仮想マシンが、ハードウェア上で直接実行することも、オペレーティングシステム内で実行することも可能なハイパーバイザー上で実行されるのに対し、コンテナはコンテナエンジンで実行されます。それぞれのコンテナには、それに含まれるソフトウェアを実行するために必要なバイナリとライブラリの独自のコピーが含まれますが、コンテナにはオペレーティングシステムの独自のコピーは必要ありません。コンテナは実行基盤となるハードウェアを共有しますが、ファイルシステムへのアクセスは制限されます。
一般的なコンテナ管理ソフトウェアには、Docker、Google Kubernetes Engine、LXC、Portainerなどがあります。コンテナは、スクリプトやマイクロサービスの実行に必要なすべてを迅速に導入する方法として、クラウドコンピューティングプラットフォームでよく使用されます。
コンテナのメリットには次が含まれます。
コンテナの欠点は次のとおりです。
コンテナセキュリティの問題は複雑な問題であり、適切に設定されたコンテナは堅牢なセキュリティを提供します。コンテナ内のアプリケーションは互いに分離されているため、個々のアプリケーションをホストマシン上で直接実行するよりも安全です。さらに、完全なVMと比べて、コンテナの場合は攻撃対象領域がより小さくなります。一部のコンテナはステートレスであるため、コンテナは起動するたびに同じ設定の「クリーンなスレート」になります。ステートレスコンテナは特定のタイプのマイクロサービスに対して有用であり、その永続ストレージの欠如は、場合によってはセキュリティ上有効な機能と捉えることができます。
ただし、ステートレス コンテナーは、より複雑なサービスや、停止からの回復時にアプリケーションの状態を保持できることが重要なサービスの実行には適していません。さらに、コンテナではオペレーティングシステムを共有するため、コンテナが侵害された場合は、同じマシンで実行されている他のコンテナもリスクにされされます。仮想マシンであれば、いずれかのVMが侵害された場合でも、攻撃者はそのアクセスを利用して同じホスト上の他のVMを侵害することはできません。
コンテナとVMのどちらを選択するか
全般的に、1台のマシンで複数のオペレーティングシステムを実行する必要がある場合や、バックアップのためにマシンの異なるステートのスナップショットを取得できるようにする必要がある場合は、仮想マシンの使用をお勧めします。すぐに導入可能な仮想マシンがあれば、オペレーティングシステムのスケーリングが容易になり、ディザスタリカバリの観点からもメリットがあります。
コンテナは小規模なマイクロサービスの導入に役立つだけでなく、DevOpsパイプラインの一部としても有用です。EPR Todayの記事では、ダニエル・リーデル氏がその違いを哲学的に「ペットと家畜」と表現しています。コンテナは家畜のようなもので、コモディティとして扱われ、オンデマンドで起動されますが、モノリシックなサービスはVMで実行される可能性が高く、ペットのように慎重に世話をされます。
一般的な仮想マシン ソフトウェアには、次のようなものがあります。
仮想マシンをセットアップするプロセスは、使用する仮想化ソフトウェアによって異なります。VMwareやOracle VM VirtualBoxなどのツールは、グラフィカル・ユーザー・インターフェース(GUI)を介して、ユーザーがハードウェアを構成し、VMのオペレーティングシステムをインストールするのに役立つガイド付きセットアップを提供します。クラウドベースのソリューションとして、Azureのさまざまな専用VMとスポットVMも、比較的簡単なセットアップ オプションを提供します。
コマンドラインを使用してLinux KVMを構成するには、ネットワークとマシンのハードウェアに関するより深い知識が必要です。KimchiやProxmoxなどのツールを使用すると、システム管理者は1つのホスト上の複数の仮想マシンのデプロイを簡単に管理できます。
仮想マシンを構成する際の重要な考慮事項には、次のものがあります。
物理マシンが希望どおりにすでに設定されている場合は、物理から仮想(P2V)への変換と呼ばれる手法を使用して、その物理マシンのハードドライブのコピーをHyper-V仮想マシンディスクとして作成できます。ドライブのコピーを作成したら、同じ種類のハードウェア仮想化で構成された仮想マシンにロードし、必要に応じて起動できます。その後、Veeam製品の仮想バックアップ機能を実行して、仮想マシンのデータを保護できます。
仮想マシンをセットアップすると、ホストOS内から別のアプリケーションであるかのように実行することができます。VMの制御は、ホストのキーボードとマウスで行います。また、サーバーがヘッドレス・モードで動作している場合はSSH/リモートKVMを介して制御することもできます。
Veeamが提供する仮想マシンのバックアップソリューションや、Veeam製品で貴社のデータを保護する方法について詳しくお知りになりたい方は、Veeam Backup & Replicationを実際にお試しいただけます。今すぐ評価版をダウンロード。