
2026/06/20 0:13
Proxmox VE でマイクロ VM を簡単に実行する方法
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
まとめ:
本テキストは、Proxmox VE に QEMU の microVM マシンタイプを第一級管理ゲストとして追加する Debian パッケージ
pve-microvm を主に紹介します。この実装により、カーネルの整合性とルートファイルシステムの解き離しがなされ、監査性およびスケーラビリティが向上します。従来のマシンとは異なり、この種のゲストはカスタム Linux カーネル(6.12.22)の利用とレガシーな BIOS/GRUB レイヤーの廃止によって 300 ミリ秒以内で起動し、これを簡素化した OCI イメージまたは取り込んだディスクファイルに置き換えることで実現します。本ソリューションは BIOS、GRUB、およびレガシーデバイスエミュレーション(IDE、VGA、USB ホブなど)を排除し、KVM/VT-x を用いてハードウェア隔離を実現するとともに、コンテナのような起動特性を提供します。このパッケージは Debian から Plan9 までの 21 の異なるゲスト OS に対応しており、古い CPU(例:Intel Atom x5-Z8350)を含む多様なクラスターアーキテクチャで動作し、AI エージェントや分散推論などのワークロードを処理できます。また、Proxmox の内部 Perl ツールをパッチ化して転換モードなしで現代の PCIe デバイスを扱えるようにし、qemu-server の内部機構を変更してチップセットエミュレーションを含まないカスタムコマンドラインを使用できるようにするとともに、ZFS、Ceph、LVM、NFS、CIFS などの標準ストレージバックエンドをサポートします。ネットワーク機能では nftables を用いて標準的な PVE ファイアウォールルールを利用し、systemd-networkd を通じて静的/DHCP 構成をサポートし、SSH-agent フォワーディングやディレクトリ共有のために vsock インターフェースを提供します。GPU/PCI パススルーや完全なライブ移動などの将来機能は QEMU の進化を待機しており、現時点の制限事項としてはシリアル.console 専用(グラフィック出力なし)、USB コントローラー非対応、および Perl モジュールの競合を避けるために完全な dpkg アップグレードが必要となる脆弱なパッチ適用などが挙げられます。管理者はシステム安定性を確保するため、Proxmox の更新時にも潜在する Perl モジュール競合を回避するために dpkg トリガーや早期起動 systemd サービスを用いた自動再パッチ管理を行う必要があります。ただし、オフライン移動(共有ストレージ上では約 2 秒)は引き続き有効です。
Text to translate:
## Summary: The text primarily introduces `pve-microvm`, a Debian package that adds QEMU's microVM machine type as a first-class managed guest in Proxmox VE, decoupling kernel consistency from the rootfs for auditability and scale. Unlike traditional machines, these guests boot in under 300 milliseconds by utilizing a custom Linux kernel (6.12.22) and removing legacy BIOS/GRUB layers, effectively replacing them with streamlined OCI images or imported disk files. The solution eliminates BIOS, GRUB, and legacy device emulation (IDE, VGA, USB hubs), achieving hardware isolation via KVM/VT-x with container-like startup characteristics. It supports twenty-one different guest operating systems (from Debian to Plan9) across diverse cluster architectures, including older CPUs like the Intel Atom x5-Z8350, handling workloads such as AI agents and distributed inference. The package patches Proxmox's internal Perl tools to handle modern PCIe devices without transitional modes, adapts `qemu-server` internals to use a custom command line omitting chipset emulation, and supports standard storage backends like ZFS, Ceph, LVM, NFS, and CIFS. Networking utilizes standard PVE firewall rules via `nftables`, supports `systemd-networkd` for static/DHCP configuration, and provides `vsock` interfaces for SSH-agent forwarding and directory sharing. While future features like GPU/PCI passthrough or full live migration remain pending QEMU evolution, current limitations include a serial-only console (no graphical output), no USB controllers, and fragile patching requiring full `dpkg` upgrades to avoid Perl module conflicts. Administrators must manage automated re-patching via `dpkg` triggers and early-boot systemd services to ensure system stability during Proxmox updates and avoid potential Perl module conflicts, although offline migration remains effective (approx. 2 seconds on shared storage).
本文
pve-microvm:コンテナのような高速起動と VM としての完全な隔離性
Proxmox VE(PVE)で、QEMU の microVM マシンタイプを活用し、コンテナの軽快な起動速度と仮想マシンのセキュリティ隔離を両立するための Deb パッケージ「pve-microvm」について解説します。
概要:妥協点の先にあった解法
著者は長期運用している Proxmox クラスター(Atom x5-Z8350 から i7-12700まで)において、LXC コンテナと標準 VM のそれぞれの欠点を解消すべく開発しました。
- 従来の Dilemma:
- LXC コンテナ: インスタント起動だが、内核を共有するためセキュリティ隔離性がない(コンテナ内のバグでホストが危険にさらされる)。カスタム内核や Docker ネスティングには不向き。
- 標準 VM: KVM による完全なハードウェア隔離があるが、ファームウェア(SeaBIOS/OVMF)とエミュレータ起動のために「目覚め」るまで5-10 秒かかる。メモリオーバーヘッドも大きい。
- pve-microvm の目的: **「Firecracker スタイル」**の微細化を実現。BIOS や GRUB、レガシーデバイス(IDE、VGA など)を排除し、最小限の virtio-みみの環境で直感的に内核起動する。
- 成果: 完全なネットワーク接続状態での起動が300ms 未満。Plan9 を含む 21 種類のゲスト OS サポート。
システムとの統合と実装細節
単一のパッケージで機能追加
標準の
qemu-server Perl モジュールにパッチを施すことで、VM 設定ファイル(.conf)に特別な指示を与えるだけで機能します。
- 起動時のコマンドライン変更:
qemu-system-x86_64 -M microvm,x-option-roms=off,pit=off,pic=off,\ isa-serial=on,rtc=on,acpi=on,pcie=on \ -kernel /usr/share/pve-microvm/vmlinuz \ -initrd /usr/share/pve-microvm/initrd \ ...- 独自の内核(12MB)と initrd を使用。
- PCI ブリッジ、VGA なし、シングルセリアルコンソールのみ。
プロバイドされるコンポーネント
- 極小カーネル (6.12.22):
ベース。virtio, vsock, virtiofs, 9p, Docker モジュール(overlay など)を含み、実用主義を徹底。x86_v64_defconfig - pve-microvm-template: Debian, Alpine, Fedora などの OCI イメージから直接ルートファイルシステムを構築。
- Web UI エクステンション: 「Create µVM」ボタン、リソースツリーに琥珀色のボルトアイコンなどで直感的に管理可能。
- ** systemd サービス (
)**: VM 起動前にパッチ適用を強制し、システム安定性を確保。pve-microvm-early.service
ブートプロセスと速度比較
microVM と標準 VM のブートタイムライン比較
空気力学のように、「厳密に必要ないものを全て排除」することで高速化を実現しています。
| タイプ | 概算ブート時間 | 特徴 |
|---|---|---|
| SmolBSD (NetBSD) | 31ms | トランスポート採用。MMIO は軽量だが Linux ではデバイスプローブにバグあり。 |
| Debian (標準 VM) | 数分 ~ 10 秒 | ファームウェアと GRUB で時間を消費。 |
| Debian (microVM) | 300ms 台 | PCIe 上の非トランジショナル を使用(Linux カーネル対応のため)。起動後、8 秒以内に安定動作。 |
Linux ゲストにおける MMIO の制限
QEMU microVM は当初は軽量な
MMIO トランスポートを使用しましたが、Linux カーネルにおいては PCI バス上のデバイスが正しく認識されないバグがあるため、現在はPCIe 上の非トランジショナル(現代専用)virtio デバイスを使用しています。これにより起動時に約 50ms 追加されますが、それでも十分高速です。
「1 つのカーネル、多くのゲスト」アーキテクチャ
pve-microvm の最大の特徴は、内核をゲストディスク内に含まないことです。
- 構造: 内核(
)はホスト上に常駐し、ゲストディスクにはルートファイルシステムのみが格納されます。/usr/share/pve-microvm/vmlinuz - メリット:
- インストーラーの起動不要。
- ホストから
を置き換えるだけで全てのゲスト更新が可能(vmlinuz
からの破損回避)。apt upgrade - ユーザランドや
、GRUB が不要で軽量。/boot
サンプル設定:Gitea VM (VMID 114)
通常の PVE VM とは同様に管理され、以下の設定項目が重要です。
agent: 1 args: -kernel /usr/share/pve-microvm/vmlinuz -append "console=ttyS0 root=/dev/vda rw quiet" boot: order=scsi0 cores: 2 machine: microvm # 重要:微細化モードを指定 memory: 2048 name: gitea net0: virtio=BC:24:11:00:6E:01,bridge=vmbr0 onboot: 1 scsi0: local-lvm:vm-114-disk-0,size=32G serial0: socket # 重要:Web UI との接続用(xterm.js) tags: microvm vga: serial0 # VGA エミュレータなし、シリアルのみ使用
ネットワーキングとストレージ
ネットワーク設定
標準的な PVE の設定方法と同じですが、PCIe バス上の
virtio-net-pci-non-transitional デバイスを介して接続されます。
- VLAN タグ付け対応:
qm set 900 --net0 virtio,bridge=vmbr0,tag=100 - セキュリティ: PVE の標準ファイアウォール(
)がそのまま機能します。nftables - クラウド管理代替:
ではなくcloud-init
を採用し、クローン時の設定不安定性を解消しました。systemd-networkd
ストレージとマイグレーション
- ストレージ対応: LVM, ZFS, Ceph/RBD, NFS, CIFS, ディレクトリストレージなど、PVE がサポートするすべてのバックエンドが動作します。
- ライブマイグレーション制限: QEMU microVM 仕様上、真のライブマイグレーションは現時点で非対応です。
- オフラインマイグレーション(HA Relocate): 停止 → マイグレート → 開始のパターンが可能で、共有ストレージがある場合2 秒程度で完了します。
LXC と pve-microVM の比較:どちらを選ぶべきか?
| 用途・要件 | 推奨選択肢 |
|---|---|
| 信頼できるコードの動作 / ゼロ起動オーバーヘロードが必要 | LXC コンテナ |
| ホストからの直接ファイルシステムアクセス希望 | LXC コンテナ |
| 最小限のメモリ割り当て(共有ページキャッシュ)希望 | LXC コンテナ |
| 内核隔離が必要(不信コード、異なる内核、ネストレート Docker) | pve-microvm |
再現性の高いスナップショット・バックアップ () | pve-microvm |
| カスタムカーネルモジュールの読み込み / ホストへの漏れ防止 | pve-microvm |
| Linux 以外の実行(NetBSD, Plan9, FreeBSD) | pve-microvm |
| VM が起動する前にコマンドを実行したい場合 | pve-microvm |
現在の環境では、i7-12700 システム上で微細 microVM のアイドルメモリフットプリントは~40MBで、CPU オーバーヘッドは測定不能です。
注意点と制限事項(厄介な部分)
以下のようなキャッチには注意が必要です。
- Perl パッチの脆弱性: PVE アップグレード時、不完全なアップグレードによって Perl モジュールが壊れ、パッチ適用が行われなくなるリスクがあります。**常にフル
**を行ってください。dist-upgrade - ルートデバイスへの依存: 設定では
を使用しますが、PVE のマイナーバグで一部ケースroot=/dev/vda
として認識され、起動できない可能性があります。最新のパッチで改善されています。/dev/sda - グラフィカルインターフェースなし: シリアルコンソール(Web UI との接続)のみです。GUI が不要なサーバー用途向き。
- USB スタンダードサポートなし: コントローラやパススルーは利用不可。Zigbee などの USB デバイスは使えません。
- カスタム内核必須: 著者の 6.12.22 カーネルが基本です。標準 Debian カーネルは大きくなりすぎて意味がないため、推奨されません(3 倍大きく起動も遅くなる)。
- GPU パススルー不可: PCI ページテーブルなどの制限により、現時点では GPU のパススルーサポートは OFF に設定されています(将来的に実装可能性があります)。
インストール手順
PVE 9.x ノードへのインストールと、テンプレート作成の例です。
-
パッケージインストール:
wget https://github.com/rcarmo/pve-microvm/releases/latest/download/pve-microvm_0.3.12-1_all.deb dpkg -i pve-microvm_0.3.12-1_all.deb -
Debian マイクロVM テンプレートの作成:
pve-microvm-template --vmid 9000 --storage local-lvm --profile standard -
真の VM としてクローン・設定:
qm clone 9000 100 --name my-microvm --full qm set 100 --machine microvm --memory 1024 --cores 2 qm start 100
まとめ
pve-microvm は、**「コンテナスピードの VM」**を追求したオープンソースプロジェクトです。ホームラベルサーバー運用や、異なる内核/OS を必要とするワークロードにおいて、標準 VM と LXC の両方の長所を取り入れた代替案として機能します。 著者はこれを無料で配布しており、将来的には ARM アーキテクチャ対応などへの拡張も予定されています。