Kata Containers, gVisor or Firecracker?
| Dimension | Kata Containers | gVisor | Firecracker |
|---|---|---|---|
| In one line | Containers that each get their own small VM | Containers that talk to a user-space kernel instead of the host’s | A tiny VM monitor that other platforms build sandboxes on |
| What it is | An OCI runtime that boots a VM per pod, using QEMU, Cloud Hypervisor, Firecracker or the built-in Dragonball | An application kernel written in Go (the Sentry) plus runsc, an OCI runtime | A virtual machine monitor in Rust: one process runs one microVM, configured through a REST API |
| Isolation boundary | Hardware virtualisation: a separate guest kernel for each pod | Software: the Sentry serves system calls itself and runs under a seccomp filter; no hardware boundary | Hardware virtualisation: a separate guest kernel per microVM, with the jailer sandboxing the monitor process |
| Where it plugs in | containerd or CRI-O as the shim v2 runtime containerd-shim-kata-v2; Docker with --runtime io.containerd.kata.v2 | Docker with --runtime=runsc; containerd through containerd-shim-runsc-v1; CRI-O | Your own code, over the API socket; containers only through Kata or firecracker-containerd |
| Kubernetes | Yes, as a RuntimeClass; managed in AKS Pod Sandboxing and GKE Sandbox microVMs | Yes, as a RuntimeClass named gvisor; managed in GKE Sandbox, on by default in Autopilot | Not by itself: only underneath Kata or another runtime |
| Host requirements | Linux with KVM: bare metal, or VMs with nested virtualisation | Any Linux host, including cloud VMs without nested virtualisation; the KVM platform is faster on bare metal | Linux with KVM; on EC2 that means .metal instances |
| Start-up and overhead | On GKE (with Cloud Hypervisor): about 1 to 2 s to start and a fixed 250 mCPU and 130 MiB per pod | On GKE: under 200 ms to start and memory that grows with the app, but every system call costs more than on Linux | Under 125 ms to boot and under 5 MiB of overhead; up to 150 microVMs per second on one host |
| Compatibility | A real Linux kernel inside, so almost anything runs; gaps are at the VM edge, such as no host networking or subPath mounts | 290 of 352 amd64 system calls and not every /proc or /sys file; no privileged containers on GKE | Linux guests (and OSv) with a handful of virtio devices; you supply the kernel and root filesystem |
| GPUs | Yes, with QEMU, which also supports confidential computing (Intel TDX, AMD SEV-SNP) | Some NVIDIA GPUs through nvproxy; specific GPUs and TPUs on GKE | No: device passthrough (VFIO) is still an open feature request |
| Who runs it in production | Azure (AKS Pod Sandboxing), Google (GKE Sandbox microVMs), Baidu | Google (GKE Sandbox, Cloud Run first generation, App Engine), Ant Group, OpenAI, Anthropic, Cloudflare | AWS Lambda, Fly.io Machines, E2B sandboxes |
Rule of thumb
These aren’t three rival products. Firecracker is a building block, and Kata can use it as its hypervisor, so “Kata or Firecracker” is often “Kata with Firecracker”. The real choice is the boundary: a VM with its own kernel (Kata on any hypervisor, or Firecracker under a platform you build yourself) or gVisor’s user-space kernel. Pick gVisor when your nodes have no KVM, or when start-up time and density matter and your software fits its system-call coverage. Pick Kata when you need a full Linux kernel, privileged containers or GPUs, and can run on bare metal or nested virtualisation. Use Firecracker directly only if you’re building your own sandbox or functions platform and are ready to supply the kernel, root filesystem, networking and scheduler.
Sources
- GKE docs: About GKE Sandbox (gVisor vs Kata microVMs: start time, overhead, nested virtualisation, privileged containers, GPUs)
- AKS docs: Pod Sandboxing with Kata Containers
- Kata Containers: About (hypervisors, Baidu in production)
- Kata Containers docs: Architecture (OCI, CRI, shim v2)
- Kata Containers docs: Hypervisors (QEMU for GPUs, TDX and SEV-SNP)
- Kata Containers docs: runtime-rs README (Dragonball, Firecracker, Cloud Hypervisor, QEMU)
- Kata Containers docs: Limitations (host network, subPath, Docker runtime flag)
- Kata Containers docs: Configure Kata Containers to use Firecracker
- Kubernetes docs: Runtime Class
- gVisor docs: What is gVisor? (Sentry, Gofer, runsc)
- gVisor docs: Platform guide (systrap, KVM)
- gVisor docs: Performance guide (per-system-call costs)
- gVisor docs: Linux/amd64 syscall compatibility
- gVisor docs: Containerd quick start (containerd-shim-runsc-v1)
- gVisor docs: CRI-O quick start
- gVisor docs: Docker quick start (--runtime=runsc)
- gVisor docs: GPU support (nvproxy)
- gVisor: Who’s using gVisor
- Firecracker website: boot time, overhead and microVMs per second
- Firecracker FAQ: devices and supported guests
- Firecracker docs: Design (one microVM per process)
- Firecracker docs: Getting started (KVM, `.metal` instances, API socket)
- Firecracker docs: Jailer
- Firecracker issue #5679: VFIO device passthrough support (open)
- firecracker-containerd on GitHub
- Lambda docs: Tenant isolation (execution environments use Firecracker)
- Fly.io docs: Architecture (apps run in Firecracker microVMs)
- E2B infra on GitHub (Firecracker microVM runtime)