軽量 VM - Firecracker / gVisor / Kata
Firecracker・gVisor・Kata Containers はコンテナの軽さと VM の強い隔離を両立させるための技術。AWS Lambda など、信頼できないコードを大量に安全に動かす場面で使われる。
概念図
構文
なぜ軽量 VM が生まれたか
コンテナは速く軽い一方でカーネル共有ゆえの隔離の弱さを抱え、VM は隔離は強いものの起動が遅く密度が低いという対照的な弱点があります。
マルチテナントで信頼できないコードを動かすクラウド事業者(AWS Lambda のようなサーバーレス基盤、CI の共有ランナー、FaaS、サンドボックス実行環境)は、この 2 つの中間にあたる「VM 並みの隔離で、コンテナ並みに軽い実行環境」を必要としました。
この要求に応える形で登場したのが、不要なデバイス・BIOS を削り込んだ軽量ハイパーバイザ(Firecracker)、ユーザー空間でシステムコールを肩代わりするサンドボックス(gVisor)、OCI 互換のまま裏で VM を使うランタイム(Kata Containers)です。
Firecracker / gVisor / Kata の違い
3 つは「軽い隔離」という目標は同じですが、アプローチがまったく違います。
| 技術 | 作り方 | カーネル | 隔離モデル | 主なユースケース |
|---|---|---|---|---|
| Firecracker | KVM ベースの最小ハイパーバイザ(AWS 製、Rust 実装) | ゲスト Linux カーネル(マイクロ VM ごと) | ハードウェア仮想化 | AWS Lambda、Fargate |
| gVisor | Go で書かれたユーザー空間カーネル(sentry / gofer) | ユーザー空間に再実装 | システムコールを横取りして解釈 | Google App Engine、信頼できないコードのサンドボックス |
| Kata Containers | 軽量 VM(QEMU / Firecracker / Cloud Hypervisor)の中でコンテナを動かす | ゲスト Linux カーネル(コンテナごと/Pod ごと) | VM 隔離 + OCI 互換 | Kubernetes のマルチテナント基盤、RuntimeClass kata |
Firecracker は「薄い VM」、gVisor は「カーネルを模倣したサンドボックス」、Kata は「VM をコンテナのふりをさせる橋」と覚えると整理しやすいです。
どんなユースケースで使うか(AWS Lambda 等)
AWS Lambda と Fargate は Firecracker を使っており、数百ミリ秒で起動する micro-VM が 1 顧客 1 インスタンス単位で立ち上がります。
これにより「他の顧客のコードが自分のメモリを覗く」リスクを事実上 VM 境界で封じ込めつつ、コールドスタートの待ち時間もコンテナ並みに抑えられます。
gVisor は Google App Engine Standard や Cloud Run で利用されており、ユーザーコードが直接ホストカーネルを呼ばないためカーネル脆弱性の攻撃面を大幅に削減します。
代わりに一部のシステムコールが遅くなる・非対応のトレードオフがあります。
Kata Containers は Kubernetes に RuntimeClass: kata を設定するだけで、従来の Pod と同じ書き方のまま裏で VM 隔離に切り替えられます。
SaaS 型のマルチテナント Kubernetes や、業務上の規制(PCI DSS、金融系の分離要件など)で強い隔離が必要な場面で選ばれます。
関連トピック
container vs VM- コンテナと VM はどちらもワークロードを隔離する技術だが、カーネル共有の有無で性能・密度・隔離強度が大きく変わる。用途ごとに使い分ける。 OCI spec- OCI はコンテナのイメージ・実行・配布形式を標準化する業界団体。Image Spec / Runtime Spec / Distribution Spec の 3 本柱で、Docker・Podman・containerd などが同じ成果物を扱える。 linux namespaces- Linux Namespaces はプロセスごとに「見える世界」を分離する仕組み。PID・Mount・Network・UTS・IPC・User・cgroup の 7 種があり、コンテナのプロセス隔離の中核を担う。 cgroups- cgroups(Control Groups)はプロセス群の CPU・メモリ・IO などのリソース使用量を制限・計測する Linux カーネルの仕組み。namespace と対になってコンテナの基盤を成す。 