仮想化 — 1台のマシンを、仕切って複数に使う

中級の解説は準備中のため、中級の内容を表示しています。

概要 — まず全体をつかむ

初級では仮想化を「1台を仕切って複数として使う」と捉えました。中級では、その仕切りを誰が管理しているのか——ハイパーバイザの役割と、何を仮想化しているのかを見ます。

詳細 — 1段階ずつ追う

これは何をする係?

VMを束ねる管理役がハイパーバイザ(※1)です。1台分の物理資源を切り分けて、各VMへ割り当てます

アニメーション『仮想化の層構造(ハイパーバイザとVM)』を開く
1台の物理マシンを、複数のVMに分けて使うハイパーバイザが、物理資源(CPU・メモリ等)を切り分けて各VMへ割り当てる。仮想マシン1アプリゲストOS(OSを丸ごと積む=重い)仮想マシン2アプリゲストOS(OSを丸ごと積む=重い)仮想マシン3アプリゲストOS(OSを丸ごと積む=重い)ハイパーバイザ物理資源をVMへ割り当てる管理役ハードウェアCPU・メモリ・ストレージ・NIC(1台)VMごとにOSを積むので分離は強いが、その分だけ重くなる置き場所の2タイプType1(ハード直上)VM / VMハイパーバイザハードウェア速い・サーバ向きType2(ホストOS上)VM / VMハイパーバイザホストOSハードウェア手元PCに入れて使う向きOSの上に載せるか、ハードに直接載せるか

図のように、下からハードウェア → ハイパーバイザ → 複数のVMが積み上がります。各VMは、上にアプリ、下にゲストOS(※2)を丸ごと積んでいます。ここが大事な点で、VMは中に1台分のOSを持つため、しっかり分離できる反面、その分だけ重くなります。

ハイパーバイザには置き場所で2タイプあります。

  • Type1(ベアメタル) — ハードの直上で動く。速く、サーバ向き
  • Type2(ホスト型) — ホストOSの上で動く。手元のPCに入れて使う向き

登場人物メモ:

  • ※1 ハイパーバイザ — 物理資源を切り分け、各VMへ割り当てる管理役(VMM とも)
  • ※2 ゲストOS — VMの中で動くOS。VMごとに1つずつ積む
  • ※3 ホストOS — Type2で、ハイパーバイザを載せる土台側のOS

何を仮想化しているのか

「仮想化」といっても、実体は資源をあるように見せかけて割り当てることです。

  1. CPU — 物理コアの時間を細切れにして、各VMへ順番に貸す
  2. メモリ — 物理メモリの一部を切り出し、VMには「専用の連続したメモリ」に見せる
  3. ストレージ — 1つのファイルやボリュームを、VMには1台のディスクとして見せる
  4. ネットワーク — 仮想的なNICやスイッチを作り、VM同士や外とつなぐ

VM側からは、どれも本物の1台に見えます。この「見せかけ」を破綻なくやるのがハイパーバイザの仕事です。

VMからコンテナへ

VMの弱点は、はっきりしています——OSを丸ごと積むので重い。起動に時間がかかり、1台に積める数も限られます。

その反省から生まれたのがコンテナDocker/コンテナ)です。コンテナはOSを積まず、ホストのカーネルを共有したまま、プロセスを隔離して動かします。だから軽く、起動も速い。VMとコンテナの積み方の違いは、既存の対比図で確かめられます。

アニメーション『VMとコンテナの違い』を開く
仮想マシン(VM)OSをまるごと積む=重いコンテナカーネルを共有=軽い仮想マシン1アプリゲストOS(フルOS)仮想マシン2アプリゲストOS(フルOS)仮想マシン3アプリゲストOS(フルOS)ハイパーバイザハードウェアコンテナ1アプリ+必要な部品だけコンテナ2アプリ+必要な部品だけコンテナ3アプリ+必要な部品だけコンテナエンジンホストOSカーネルを全コンテナで共有ハードウェアVMはゲストOSごと積むので重い/コンテナはホストのカーネルを共有しOSを積まないので軽い

分離の強さがほしいならVM、身軽さがほしいならコンテナ——用途で使い分けます。

そして、クラウドで借りるサーバの中身は、結局この仮想化です。物理マシンを大量に持つ事業者が、それをVMやコンテナに切り分けて、必要な分だけ貸している——それがクラウドの正体なのです。

⚠️ うまくいかないとき

  • オーバーコミット — 資源を実際より多く約束しすぎると、混んだときに取り合って遅くなる
  • 単一障害点 — 物理1台の上のVMは、そのハードが倒れるとまとめて止まる(分散配置で緩和)
  • オーバーヘッド — 仮想化の見せかけ処理そのものが、わずかに性能を食う
  • VMの増えすぎ — 作るのが簡単なぶん、使われないVMが放置されがち(棚卸しが要る)

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. ハイパーバイザの役割として正しいのは?

2. VMの中で動き、VMごとに1つずつ積むOSを何と呼ぶ?

3. VMに対してコンテナが軽いのは なぜ?

4. Type1(ベアメタル)とType2(ホスト型)の違いとして正しいのはどれ?

5. 中級本文で「CPUの仮想化」の実体として説明されているのはどれ?

6. 「ストレージの仮想化」の説明として正しいのはどれ?

7. 落とし穴の1つ「オーバーコミット」とはどういうことか?

8. Type2構成で、ハイパーバイザを載せる土台側のOSを何と呼ぶ?