仮想化とは ― ハイパーバイザーと仮想マシンの仕組み
仮想化は、
仮想化とは、1台の物理的なコンピュータを複数台のように使う仕組み
クラウドでサーバを1台借りるとき、手に入るのはたいてい物理的なサーバではなく仮想マシンです。仮想化とは、1台の物理的なサーバの上で、独立したコンピュータのように動く環境を複数作る仕組みです。この環境を仮想マシンと呼び、物理的には1台のサーバしか無くても、利用者からは別々のコンピュータに見えます。
クラウド事業者は、1台の物理サーバを仮想化し、利用者ごとに切り分けた仮想マシンを貸し出しています。IaaSは、この仕組みの上に成り立っています。米国の標準化機関NISTは、1つ以上のOSとそのアプリケーションを、仮想化されたハードウェアの上で動かす方式をフル仮想化と呼んでいます。
仮想化を支えるソフトウェアが、次の節で説明するハイパーバイザーです。クラウドコンピューティングの特徴の1つである、複数の利用者で資源を分け合う仕組みも、この技術が支えています。借りる仮想マシンの構成をファイルに書いてツールに作らせる方法は、IaCの記事で説明しています。
仮想マシンの使い方の1つに、VDIがあります。VDIはVirtual Desktop Infrastructureの略で、日本語ではデスクトップ仮想化と呼びます。仮想マシンの中にデスクトップ環境を作り、利用者は手元の端末からネットワーク越しに使います。
手元の端末に処理とデータを置かないシンクライアントの考え方は、クライアントサーバシステムの記事で触れています。画面だけを端末に送る仕組みは、シンクライアントとVDIのページで詳しく説明しています。
ハイパーバイザーとは、物理ハードウェアと仮想マシンの間で資源を管理するソフトウェア
ハイパーバイザーとは、物理的なハードウェアと、その上で動くゲストOSとの間に入り、命令の流れを管理するソフトウェアです。ゲストOSとは、仮想マシンの中で動くOSのことです。NISTは、ハイパーバイザーを「ゲストOSを管理し、ゲストOSと物理ハードウェアの間の命令の流れを制御する仮想化の構成要素」と定義しています。
1台の物理サーバには、CPUやメモリなどの決まった量のハードウェアしかありません。ハイパーバイザーは、この限られたハードウェアを複数の仮想マシンに分けて使わせます。NISTは、複数のゲストOSが同じ物理資源を共有する仕組みを「論理パーティショニング」と呼んでいます。
次の図では、物理サーバに乗せる仮想マシンの台数を切り替えて、1台あたりのCPU・メモリの量がどう変わるかを確かめられます。図では例として均等に分けています。台数を増やすほど、1台あたりの取り分は小さくなります。
物理サーバの例:CPU 6コア・メモリ 12 GiB。1コアを1 vCPUとして割り振ります。
1台だけなので、6コア分・12 GiBをすべてこのVMに割り振れます。
6コア・12 GiBを2台で均等に分けると、1台あたり3 vCPU・6 GiBになります。
6コア・12 GiBを3台で均等に分けると、1台あたり2 vCPU・4 GiBになります。
Type1(ベアメタル型)とType2(ホスト型)の違いは、ホストOSを挟むかどうか
ホストOSとは、物理的なコンピュータで直接動くOSのことです。ハイパーバイザーには、物理ハードウェアとの間にホストOSを挟むかどうかで、2つの方式があります。NISTは、この2方式をベアメタル仮想化とホスト仮想化と呼んでいます。AWSの公式ページでは、ベアメタル仮想化をType1、ホスト仮想化をType2とも呼んでいます。
Type1は、物理ハードウェアの上にハイパーバイザーが直接乗る方式です。ホストOSが無いため、ハイパーバイザー自身が簡易なOSのように働きます。
Type2は、Windows・Linux・MacOSなどの一般的なホストOSの上に、ハイパーバイザーがアプリケーションのように乗る方式です。ホストOSという層が1つ多い代わりに、仮想マシンの外でもWebブラウザなどのアプリケーションを動かせます。
NISTは、サーバの仮想化にはType1が使われることが多いと説明しています。1台のパソコンで複数のOSを動かす使い方には、Type2が使われることが多いとしています。AWSの公式ページによると、Linuxカーネル(OSの中心部分)に組み込んで動くKVMは、Type1とType2の両方の特徴を持つハイブリッド型です。
AWSのEC2は、Nitro Hypervisorという仕組みの上でインスタンスを動かしています。インスタンスとはEC2で借りるサーバのことで、仮想マシンの一種です。
仮想マシンは、動かしたまま別の物理サーバに移せる
ライブマイグレーションとは、ゲストOSとアプリを動かしたまま、仮想マシンを別の物理サーバに移す機能です。NISTの説明では、この機能はすべてのハイパーバイザーに備わっています。
移動元のサーバにあるゲストOSの状態は、移動先のサーバに複製する必要があります。複製するのは、メモリの内容・プロセッサの状態・ストレージ(2台のサーバが共有していない場合)・ネットワークの状態です。
ライブマイグレーションには、3つの利点があります。
- 障害が起きそうなサーバから、仮想マシンを退避させられる
- 負荷を他のサーバに分散できる
- 仮想マシンを止めずに、元のサーバの保守・アップグレード・パッチ適用ができる
コンテナは、仮想マシンとは仮想化する層が違う
仮想化と似た仕組みに、コンテナがあります。コンテナは、アプリケーションを動かすのに必要なファイルと設定をひとまとめにしたものです。
AWSの公式ページによると、ハイパーバイザーとコンテナはどちらも仮想化の技術ですが、仮想化する層が違います。ハイパーバイザーは、プロセッサやメモリなどのハードウェアを仮想化します。コンテナは、ホストOSの中に作られた独立した環境で動きます。イメージやオーケストレーションを含む詳しい仕組みは、コンテナの記事にまとめました。
参考にした資料
- NIST Special Publication 800-125「Guide to Security for Full Virtualization Technologies」(Appendix A Glossary、2.2 Types of Full Virtualization)
- NIST Special Publication 800-125A Revision 1「Security Recommendations for Server-based Hypervisor Platforms」(6.2 VM Live Migration)
- AWS「What is a Hypervisor?」(Type1・Type2の呼び方、EC2のNitro Hypervisor)
- AWS「What is Virtualization?」(仮想化・仮想マシンの定義、コンテナとの違い)
練習問題(全4問)
正解:1台の
NISTは、
正解:ゲストOSと
NIST SP 800-125は、
正解:Type1は
NISTの
正解:ゲストOSと
NIST SP 800-125Aは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。