仮想化

KVMとは?

別名: Kernel-based Virtual Machine
定義

KVM is full hardware virtualisation built into the Linux kernel, giving each guest its own kernel and hardware-enforced isolation from other tenants. Because a KVM guest runs its own kernel, it can load kernel modules, run non-Linux operating systems, use real swap and support nested virtualisation.

KVMが重要な理由

KVMゲストは独自のカーネルで実行されるため、カーネルモジュールのロード、非Linuxオペレーティングシステムの実行、実際のスワップの使用、ネストされた仮想化のサポートが可能です。KVMゲストに割り当てられたメモリは実際に予約されるため、これがコンテナベースの仮想化との実質的な違いです。

実践でのKVM

KVMサーバーを実行する場合、最初に確認するのはゲストの/proc/cpuinfoです。ホストのフラグと一致しない場合、完全なKVMではなく準仮想化のショートカットを目にしている可能性があります。メモリ割り当ては実際の予約で設定します。オーバーコミットすると、ホストがアイドル状態でもゲストのOOMキラーが作動します。ネストされた仮想化を誤って設定すると、ハードウェア支援ページングが失われ、ゲストの速度が大幅に低下します。これを間違えると、再起動なしには回復できないパフォーマンスを失います。

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

KVMはOpenVZやLXCと同じだと思っている人がいます。どちらもLinuxカーネルを使用するためです。正しくは、KVMは各ゲストに独自のカーネルを与えますが、コンテナはホストのカーネルを共有します。カーネルモジュールのロードや非Linux OSの実行はKVMでのみ可能です。名前空間共有による分離はハードウェアで強制されません。

KVM — よくある質問

KVMはパフォーマンスにどのような意味を持ちますか?

KVMのハードウェア仮想化は、各ゲストが独自のカーネルを持つことを意味し、CPUとメモリのパフォーマンスはネイティブに近くなります。メモリは実際に予約され、共有されません。コンテナと比較して、予測可能で分離されたスループットが期待できます。

KVMでWindowsを実行できますか?

はい、KVMゲストは独自のカーネルを実行するため、Windowsなどの非Linuxオペレーティングシステムを実行できます。ISOをアップロードし、VNCコンソールを接続する必要があります。Windows Serverライセンスは、特定の地域でオプションの追加機能として利用できます。

KVMが登場する箇所

仮想化の詳細

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