仮想化についてざっくりまとめてみた

サムネ

仮想化技術の種類について、色んな用語が混在しているなと感じてややこしかったので、自分なりにまとめてみました。

仮想化とは?

仮想化とは、1台の物理マシン上に、複数の独立したコンピュータ(環境)を用意することです。


超ざっくり言うと、以下のようなイメージになるかと思います

とはいえ元のマシンは1台な訳ですから、完全に独立ではなく、cpuやメモリ、ストレージなどのリソースは共有しています。


あくまでも複数のpcがあるかのように振る舞うのが、仮想化というわけです

仮想化技術の種類

仮想化には主に3種類あって、それぞれホスト型ハイパーバイザ型コンテナ型という名称がついています。


既に数多のサイトにあると思いますが、仮想化のイメージ図を下記に記載します。

ホスト型

ホストOSが動いているpcに、仮想化ソフトウェアを導入して、その上で仮想マシンを動作させる方式です。


例:VMware Player,VMware Fusion

ハイパーバイザ型

図中のハイパーバイザは、仮想化のためのOSのようなもので、ハードウェア上で直接動作します。その上で複数の仮想マシンが動作します。


例:Hyper-v,ESXi VMware,KVM

コンテナ型

コンテナ型は、コンテナエンジン上に、複数のコンテナ(ライブラリとアプリケーションが合わさった環境)を動かす仕組みです。各コンテナは独立しているので、アプリケーションごとに異なった環境を用いて実行できます。


ただ、カーネルはホストOS依存なので、Windows上のコンテナで、Linuxを動かすといったことは不可能です。


コンテナ型は仮想化自体はしているのですが、仮想マシンが動作しているわけではないので、前述した2つとは少しイメージが離れている感じがします


例:Docker,Podman,Kuberbetes

ややこしい別名

ここで、ホスト型とハイパーバイザ型なんですが、実は別名があって、それがかなりややこしいので、詳しく見ていきます。

ホスト型の別名

まずホスト型は、別名としてホスト型ハイパーバイザまたはtype2ハイパーバイザとも呼ばれます。


はじめに聞いたときは、「ハイパーバイザって、ホストosを経由せずにゲストosやアプリケーションを動かす仕組みのことじゃないの?」と、混乱してしまった訳ですが、実は厳密にはそうじゃないみたいです。


ハイパーバイザの定義としては、
1台の物理マシン上で複数の仮想マシンを同時に実行・管理するためのソフトウェアです。


ですので、広義ではホスト型もハイパーバイザの1種に含まれます。
とはいえ、こちらの意味使われることはあまりないみたいですので、大体の場合ハイパーバイザと聞いたら、ホストos無しの仮想化の形式なんだと考えればいいと思います。

ハイパーバイザ型の別名

ハイパーバイザ型の別名は、ベアメタル型ハイパーバイザまたはtype1ハイパーバイザとも呼ばれます。


またはベアメタル型ハイパーバイザを略して、そのままベアメタル型と呼ばれたりもします。


ベアメタルとは、通常、物理マシンにOSやソフトウェアなどがインストールされていない状態のことを指します。


実際にはベアメタル型ハイパーバイザでは仮想化のためのソフトウェアが入ってる訳ですが、ホストOSを介さずに仮想マシンを動かすという点においてそう呼ばれてるんじゃないかと思います。


前述したように、「ハイパーバイザ型」といえば、こちらのベアメタル型ハイパーバイザを指す訳ですが、ホスト型とも取れてしまう場合もあるかもしれないので、「ベアメタル型」といえば誤解が無くなると思います。

ややこしい WSL2

あの有名なWsl2は、Windows上で動作しているのでホスト型かと思うのですが、実はそうではないみたいです。

Wsl2は、Hyper-vの技術を使ったLightweight utility VMと呼ばれる仮想マシンで動作しています。


なので、構造的にはハイパーバイザ型(type1ハイパーバイザ)であると言えます。

まとめ

仮想化についての概要と、ややこしい概念についてまとめてみました。


今回挙げた内容以外にも、コンテナとVMが両方動くProxmoxとか、VMwareとか、掘り下げたらまだまだ複雑な概念があるので機会があれば調べてみようと思います。