仮想マシンとは
Virtual Machine(バーチャル・マシン/VM、仮想マシン)は、物理コンピューター上にソフトウェアで作る、独立したコンピューター環境です。仮想化されたハードウェア、ゲストOS、ミドルウェア、アプリケーションからなる完全な実行環境スタックとして動きます。
hypervisor(ハイパーバイザー)が物理CPU、メモリー、ネットワーク、保存領域へのアクセスを仲介し、一台の物理ホスト上で複数VMを隔離して実行します。VM内部には独自のゲストOSカーネルがあり、ホストカーネルを共有するコンテナーと違います。
VMは独立したコンピューターのように見えても、物理ホスト、電源、ネットワーク、保存領域、ハイパーバイザーを共有します。ゲスト間の論理分離と、同じホスト障害で同時停止する障害ドメインを同時に考えます。

VMの層
ハードウェアとファームウェア、電力、冷却設備、物理ネットワーク・保存領域が全VMの土台です。
VMを作成・実行し、CPU スケジューリング、メモリー対応付け、I/O、分離を管理します。
ゲストOSからコンピューターのハードウェアとして見える抽象リソースです。
ドライバー、アカウント、サービス、ファイアウォール、パッチ等をVM内で独立管理します。
Webサーバー、データベース、業務アプリケーション等がゲストリソースを利用します。
管理者APIがVMライフサイクルとホスト配置を制御します。
ハイパーバイザーの二つの構成
ベアメタル型は物理ハードウェア上でハイパーバイザーを直接動かし、hosted型はホストOS上のアプリケーションとして仮想化を提供します。実装はさらに管理ドメインやハードウェアassistanceを組み合わせます。
どちらでもゲストOSから見える仮想ハードウェアと、物理機器は同一ではありません。性能・ドライバー・時刻管理・機器パススルーの動作を確認します。
vCPU・メモリーの割り当てとオーバーコミット
vCPUは物理コアを常時専有する番号とは限らず、ハイパーバイザースケジューラーが複数VMへCPU時刻を配ります。メモリーも予約済み、バルーニング、スワップ、重複排除等で物理メモリーとの対応が変わります。
合計仮想リソースを物理容量より多く割り当てるオーバーコミットは平均利用率を上げますが、同時負荷で資源競合・遅延・スワップを増やします。ゲスト内CPU使用率だけでなくホストCPU待機時間、steal、メモリー逼迫、I/O待ち行列を見ます。
仮想ディスクと保存領域
vDiskはファイル、論理的な容量、ネットワークブロック機器等を仮想ドライブとしてゲストへ見せます。ゲストファイルシステム、ハイパーバイザー保存領域、物理保存領域の三層でキャッシュ・フラッシュ・スナップショット・障害が重なります。
シンプロビジョニングは実使用分から容量を消費できますが、全VMが同時成長すると物理プールが枯渇します。論理的な大きさだけでなく割り当て済み容量とプール空き領域を監視します。
画像・テンプレート・複製
VM画像は仮想ディスクとメタデータ等を含む起動元、テンプレートは標準構成から複製する基準です。複製後はホスト名、システムID、SSHホスト鍵、証明書、IP設定、エージェント識別情報を一意化します。
ゴールデンイメージが古いと、新VMを増やすたび脆弱性を再導入します。パッチ済み画像を定期ビルド・スキャンし、来歴とバージョンを固定します。
スナップショットはバックアップではない
スナップショットは仮想ディスクやメモリー状態のある時点の差分を保存し、更新前切り戻しや短期作業に便利です。長期連鎖は性能・容量・復旧複雑性へ影響します。
同じ保存領域・管理プレーン上のスナップショットは、保存領域障害、アカウント侵害、誤一括削除で失う場合があります。独立バックアップへ複製し、アプリケーション整合性を保ったな復元を試験します。
ライブマイグレーションと障害ドメイン
ライブマイグレーションは稼働中のVMのメモリー・実行状態を別ホストへ移し、メンテナンス停止を減らします。共有保存領域、ネットワーク継続性、CPU互換、十分な帯域幅等が必要です。
移行機能があっても突然のホスト・ゾーン障害を無停止で越えるとは限りません。HA再起動、複製、アプリケーションclustering、負荷分散を別設計します。
ゲストとハイパーバイザーのパッチ責任
クラウドIaaSでは事業者が物理ホストとハイパーバイザー、利用者がゲストOSとアプリケーションをパッチするのが一般的です。オンプレミスでは組織自身が両方を担当します。
ゲストエージェント、仮想機器ドライバー、ファームウェア・マイクロコード、管理サーバーも更新対象です。スナップショットを取っただけで安全に切り戻しできるとは限らず、データベース移行等の不可逆変更を確認します。
コンテナーとの違い
VMは仮想ハードウェア上にゲストカーネルを起動するため、異なるOSカーネルを同じホストで動かし、カーネル境界の隔離を得やすい一方、画像が大きく起動が遅い傾向があります。コンテナーはホストカーネルを共有し、軽量・高速です。
コンテナーをVM内で動かす構成も一般的です。両者は排他的な選択ではなく、ハードウェア・テナント隔離をVM、アプリケーションパッケージ化をコンテナーが担います。
VMはハイパーバイザーが仮想ハードウェアを提供し、独自ゲストOSとアプリケーションを動かす完全な実行環境スタックです。ゲスト分離と共有ホスト障害、オーバーコミット、保存領域層、スナップショット・バックアップ、パッチ責任を分けて管理します。
VMをvirtual hardware・guest OS・applicationからなるcomplete execution stackとして扱う定義とhypervisorの仲介・隔離:NIST SP 800-125A Rev.1