仮想化
Nested virtualisationとは?
Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.
Nested virtualisationが重要な理由
Proxmox VE、VMベースのCIジョブ、および一部のDocker構成に必要です。多くのプロバイダーがこれを無効にしており、それが他の場所でこれらのワークロードが失敗する通常の理由です。
実践でのNested virtualisation
ネストされた仮想化を実行するときは、KVMゲスト内でハイパーバイザーを起動し、ホストCPUの仮想化拡張機能を透過させます。ゲスト内の/proc/cpuinfoでsvmまたはvmxフラグを確認する必要があります。これらがない場合、内部ハイパーバイザーはソフトウェアエミュレーションにフォールバックし、パフォーマンスが桁違いに低下する可能性があります。また、これらのフラグを取得するには、汎用モデルではなく'host' CPUタイプを有効にする必要があるかもしれません。これを誤ると、ProxmoxやCIワークロードが遅くなります。
Nested virtualisationについて人々が誤解していること
ネストされた仮想化は、Windowsなどの完全なOSをVMで実行する場合にのみ重要だと想定する人がいます。修正:これはDockerのデフォルトのオーバーレイネットワーキングや特定のカーネルモジュールも壊します。なぜなら、これらはゲスト内の仮想化機能に依存しているからです。したがって、VMを実行するつもりがなくても、ネストを無効にしたプロバイダーではコンテナワークロードが失敗する可能性があります。
Nested virtualisation — よくある質問
ネストされたVM内でDockerを実行できますか?
はい、これが人々がネストされた仮想化を必要とする最も一般的な理由です。Dockerのデフォルトのブリッジネットワーキングはiptablesとカーネルモジュールを使用しますが、CPU仮想化拡張機能が公開されていないと動作が異なる場合があります。当社のKVMプランにはネストされた仮想化が含まれているため、Dockerコンテナは期待どおりに実行されます。
ネストされた仮想化が有効かどうかを確認するにはどうすればよいですか?
VM内でgrep -E '(svm|vmx)' /proc/cpuinfoを実行します。フラグが表示されれば、ネストが利用可能です。表示されない場合は、ハイパーバイザーがそれらを公開しておらず、通常はプロバイダーが無効にしたことを意味します。
Nested virtualisationが登場する箇所
- VPS上でネストされた仮想化を実行できますか? はい。ネストされた仮想化はすべてのOnionVPSインスタンスで有効になっているため、インスタンス内でKVMゲストを実行したり、Proxmox VEをインストールしたり、Docker-in-DockerやVMベースのCIジョブを実行したりできます。多くのプロバイダーはこれを無効にしているため、これが他の環境で…
- 実際に使える最も安いVPSは何ですか? 月額約4ドルで、本物のKVM仮想化上で1 vCPU、1 GB RAM、20 GB NVMeを購入できます。これは、WireGuard VPN、DNSリゾルバー、Torリレー、小さなボット、静的サイトに十分な容量です。この価格以下では、仮想マシンではなく過剰販売されたコンテナを購入している可能性が高いです。…
- 什么是KVM虚拟化? KVM(基于内核的虚拟机)是内置于Linux内核的完整硬件虚拟化,利用处理器扩展使每个客户机运行自己的内核并具有硬件强制的隔离。与OpenVZ或LXC(共享主机内核)不同,KVM客户机可以加载内核模块、运行任何操作系统并使用真实交换空间。…
- KVM与OpenVZ:为什么虚拟化类型很重要 KVM是完全硬件虚拟化:你的实例运行自己的内核,无法看到宿主机。OpenVZ和LXC是共享宿主机内核的容器技术,这意味着不支持自定义内核模块,旧宿主机上不支持WireGuard,Docker不可靠,并且内存记账允许提供商超卖。如果VPS异常便宜,通常是OpenVZ。…
仮想化の詳細
- KVM
- KVMはLinuxカーネルに組み込まれたフルハードウェア仮想化であり、各ゲストに独自のカーネルと、他のテナントからのハードウェア強制分離を提供します。
- OpenVZ
- OpenVZはコンテナベースの仮想化であり、すべてのインスタンスがホストカーネルを共有するため、ゲストはカーネルモジュールをロードしたり、異なるオペレーティングシステムを実行したりできません。
- LXC
- LXCはLinuxネイティブのコンテナ化であり、ホストカーネルを共有しながら、名前空間とcgroupsでプロセスを分離します。
- ハイパーバイザー
- ハイパーバイザーとは、仮想マシンを作成・実行し、物理CPU、メモリ、I/Oを割り当てるソフトウェアレイヤーです。
- vCPU
- vCPUは、ゲストに提示される仮想プロセッサであり、物理コアまたはスレッド上のスケジューリング時間によって支えられています。
- cloud-init
- cloud-initは、プラットフォームが提供するメタデータを使用して、仮想マシンを初回起動時に構成するための標準的なメカニズムです。