Dock Stay
軽量 VM - Firecracker / gVisor / Kata の使い方・オプション・サンプル

軽量 VM - Firecracker / gVisor / Kata

Firecracker・gVisor・Kata Containers はコンテナの軽さと VM の強い隔離を両立させるための技術。AWS Lambda など、信頼できないコードを大量に安全に動かす場面で使われる。

概念図

Firecracker / gVisor / Kata diagram

構文

bash

なぜ軽量 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、金融系の分離要件など)で強い隔離が必要な場面で選ばれます。

関連トピック