Before touching Kata Containers, you need to master the basics of Kubernetes (Pods, nodes, RuntimeClass), containerd, and the concepts of container versus VM isolation. In this episode you'll prepare a node with KVM support, install the Kata tooling, and verify that the entire environment is ready for this series.

Welcome to the Learn Kata Containers series! This series will take you through mastering Kata Containers — the microVM-based container runtime that brings "the speed of containers, the security of VMs" to Kubernetes. There are 23 episodes in total, arranged into six phases, from conceptual foundations all the way to production readiness.
Before you run your first kata-runtime command, there are foundational skills and hardware you must prepare. Why does this matter? Kata Containers is different from runc: every pod running on top of it isn't just a process isolated by namespaces — it's a small virtual machine that must be backed by a hypervisor on the node. Without KVM, without properly configured containerd, and without an understanding of RuntimeClass, all the upcoming episodes will feel like holding a tool without knowing how to use it.
Episode 0 is your roadmap: we'll make sure the foundational skills are in place, prepare a node with KVM support, install the Kata tooling, and verify the environment for the first time.
You must understand the core Kubernetes objects: Pod as the smallest unit that wraps containers, Node as the machine where pods get scheduled, and kubectl as your main control tool. The most important one for this series is RuntimeClass — the Kubernetes object that connects a pod to a specific runtime. In episode 4 we'll use RuntimeClass to tell Kubernetes to run pods with Kata instead of plain runc.
Kata Containers integrates through the Container Runtime Interface (CRI), implemented by both containerd and CRI-O. Understand the basic flow: kubelet calls CRI, containerd handles the container, and for Kata pods, containerd hands sandbox creation over to the Kata shim. You should also understand the difference between an image, a container, and a pod sandbox — these concepts are the foundation of the architecture in episode 2.
This is the most critical concept. A container shares the host kernel and is isolated with namespaces and cgroups — lightweight, but its isolation boundary is software. A virtual machine runs its own kernel on top of a hypervisor and is isolated at the hardware level — heavier, but with a firm boundary. Kata Containers combines both: container APIs, but VM execution.
KVM (Kernel-based Virtual Machine) is a Linux kernel module that lets a hypervisor take advantage of hardware virtualization extensions. Kata requires it because without hardware acceleration, a microVM can't boot in the hundreds of milliseconds range.
The most fundamental requirement: a node whose CPU supports virtualization — Intel VT-x, AMD SVM, or ARM Virtualization Extensions on aarch64. Verify directly on the node:
lscpu | grep -i virtualization
ls -l /dev/kvmls -l /dev/kvm should show a character device. If it doesn't exist, either the kvm module hasn't been loaded or virtualization isn't enabled in the BIOS:
grep -E "(vmx|svm)" /proc/cpuinfo
modprobe kvm_intel || modprobe kvm_amdUse kvm-ok from the cpu-checker package on Ubuntu, or kvm-ok from libvirt on other distros. For cloud clusters, make sure the instance type supports nested virtualization — not every provider enables it by default.
Use a local Kubernetes cluster such as k3s, kind, or minikube for testing, or a bare-metal node with full Kubernetes. Make sure containerd (or CRI-O) is installed and the CRI is running normally:
kubectl get nodes -o wide
containerd version
ctr versionkubectl get nodes -o wide shows node status along with the containerd version used by kubelet. The containerd version line gives you the containerd version and commit.
There are two main ways to set up Kata on a node. The first: download the release tarball from the official release page, which contains the kata-runtime binary, containerd-shim-kata-v2, the hypervisor, and the guest kernel. The second: use kata-deploy — a DaemonSet or Helm chart that automates installation to every node in the cluster at once. Both are covered in depth in episode 3.
Kata supports several VMM backends: QEMU (default, broadest compatibility), Cloud Hypervisor, Firecracker, and Dragonball (built-in Rust). To get started, QEMU is the safest choice. Episode 6 covers when to pick each one.
Before moving on to episode 1, run a thorough verification:
uname -r
lscpu | grep -i virtualization
ls -l /dev/kvm
kubectl get nodes
kubectl get runtimeclass
ctr versionThe seven commands above must all succeed without errors. kubectl get runtimeclass will be empty at first — that's normal, because the Kata RuntimeClass will be created in episode 4. What matters now: the node is Ready, KVM is detected, and containerd responds.
Warning
Kata Containers requires a node with hardware virtualization enabled. Cheap cloud VMs or nodes without nested virtualization often fail with a "KVM is not available" error. Always verify /dev/kvm before continuing to the next episode.
Here's a summary of what you prepared in episode 0:
If anything is missing, stop and complete it before moving on. The 22-episode journey ahead will be much smoother with this solid foundation.
Key takeaways:
/dev/kvm from the start.kubectl, ctr, and KVM checks.In the next episode, episode 1, we'll discuss the history, background, and why you need Kata Containers — from the merger of Intel Clear Containers and Hyper.sh runV in December 2017, its status as an OpenInfra project, to the real problems it solves: containers that share a kernel aren't secure enough for untrusted workloads. Make sure your node is KVM-ready, because the Learn Kata Containers journey has just begun!