仮想化

Hypervisorとは?

定義

A hypervisor is the software layer that creates and runs virtual machines, allocating physical CPU, memory and IO between them. A type-1 hypervisor runs directly on the hardware; KVM is unusual in being a type-1 hypervisor implemented as a Linux kernel module, which lets it use the whole Linux driver ecosystem.

Hypervisorが重要な理由

タイプ1ハイパーバイザーはハードウェア上で直接実行されます。KVMは、Linuxカーネルモジュールとして実装されたタイプ1ハイパーバイザーという点で特異であり、Linuxのドライバエコシステム全体を利用できます。

実践でのHypervisor

KVMハイパーバイザー上でサーバーを運用する場合、実際のハードウェア割り当てvCPU、RAM、ディスクI/Oを確認する。これらをパネルから調整し、多くの場合、再起動せずにメモリを追加できる。ホストを過剰コミットして間違えると、隣のノイズの多いワークロードがインスタンスのCPUやIOを枯渇させ、完璧に構成されたゲストが遅くなる。ネスト仮想化により、ハイパーバイザー内でハイパーバイザーを実行でき、テストには便利だが、パフォーマンスが犠牲になり、リソース数の数え方が混乱する可能性がある。

Hypervisorについて人々が誤解していること

よくある誤解は、ハイパーバイザーをコンテナの境界だと思うことです。そうではありません。ハイパーバイザーは完全な仮想マシンを提供し、独自のカーネル、独自の/proc、共有ネームスペースのない環境を実現します。人々は隣人のプロセスが見えないとか、カスタムカーネルは不可能だと思い込み、制限にぶつかります。正しい理解は、KVMでは真の分離と制御が得られ、手作りのイメージで起動したり、ネストされた仮想化を実行したりできるということです。これらはコンテナではできません。

Hypervisor — よくある質問

タイプ1ハイパーバイザーとはどういう意味ですか?

タイプ1ハイパーバイザーは、オペレーティングシステムの上ではなく、ホストハードウェア上で直接実行されます。KVMは特別で、Linuxカーネルモジュールとして実装されたタイプ1ハイパーバイザーであり、ハードウェア管理にLinuxのドライバーエコシステム全体を使用できます。これにより、ベアメタル仮想化のパフォーマンスとLinuxの柔軟性が両立します。

KVMはOpenVZのようなコンテナとどう違うのですか?

KVMは真の仮想化を提供します。各ゲストは独自のカーネル、独自の/procを持ち、共有ネームスペースがないため、完全なrootアクセスとカスタムカーネルの実行が可能です。コンテナはホストのカーネルとネームスペースを共有するため、できることに制限があります。KVMでは、分離と制御、さらにネストされた仮想化やカスタムISOでの起動が可能です。

Hypervisorが登場する箇所

仮想化の詳細

KVM
KVMはLinuxカーネルに組み込まれたフルハードウェア仮想化であり、各ゲストに独自のカーネルと、他のテナントからのハードウェア強制分離を提供します。
OpenVZ
OpenVZはコンテナベースの仮想化であり、すべてのインスタンスがホストカーネルを共有するため、ゲストはカーネルモジュールをロードしたり、異なるオペレーティングシステムを実行したりできません。
LXC
LXCはLinuxネイティブのコンテナ化であり、ホストカーネルを共有しながら、名前空間とcgroupsでプロセスを分離します。
嵌套虚拟化
ネスト仮想化により、仮想マシン自体が仮想マシンを実行できるようになり、プロセッサの仮想化拡張機能がゲストに公開されます。
vCPU
vCPUは、ゲストに提示される仮想プロセッサであり、物理コアまたはスレッド上のスケジューリング時間によって支えられています。
cloud-init
cloud-initは、プラットフォームが提供するメタデータを使用して、仮想マシンを初回起動時に構成するための標準的なメカニズムです。