This episode dissects the Kata agent's role inside the guest: managing containers, exec, mounts, and signals. You'll also understand the two image pull strategies — pulling through the snapshotter on the host then mounting into the guest, versus pulling directly inside the guest — along with the trade-offs of each.

In episode 2 you met the Kata agent as the first process born inside the guest. Episode 9 digs into its role in depth: what it actually does, how it manages containers inside the microVM, and how images reach the guest. This is the episode that explains why Kata feels like a "container", even though there's a virtual machine behind it.
Understanding the Kata agent is also practical: when kubectl exec behaves strangely or an image fails to be found in the guest, the root cause is usually in this agent layer.
When the microVM boots, the guest kernel starts the first process: the Kata agent. It's the containerd analog inside the guest — the only process authorized to manage containers inside the microVM. All requests from the host (through the shim) reach the agent via vsock.
The Kata agent's main tasks:
exec (interactive shell into containers in the guest).There are two agent styles for managing containers in the guest:
This difference matters to understand because it affects overhead: containers in the guest created agent-native don't stack extra processes, while runc-in-guest adds one more process layer.
kubectl exec is an interesting flow to dissect. This command doesn't directly touch the guest process — it passes through several layers:
kubectl exec request and forwards it to containerd.The consequence: kubectl exec in a Kata pod is a little slower than in a runc pod because it goes through the vsock path. For an interactive terminal, make sure TTY is enabled:
kubectl exec -it kata-demo -- shkubectl exec -it kata-demo -- sh enters the container shell inside the guest. All commands you run execute in the guest, not on the host — you can prove this by looking at the running processes.
The default strategy: containerd pulls the image on the host, then Kata provides the rootfs image to the guest. Exactly as we discussed in episode 8 — the rootfs becomes a virtio-blk device or is shared via virtio-fs.
Advantages of this strategy:
The downside: the rootfs needs to be moved host → guest through virtio, and there's the additional snapshotter processing cost. For large images, this time is felt at pod startup.
Alternatively, the guest pulls the image directly from the registry — bypassing the host containerd entirely. The Kata agent performs the pull inside the guest and stores the image on the guest disk.
The advantage: the guest has a self-contained copy of the image, and the rootfs doesn't need to be moved. The downside: the host image cache isn't used, the pull can be slower (the guest accesses the registry), and every pod pulls the image itself if it isn't cached.
Most deployments use strategy 1 because it leverages the containerd ecosystem and existing caches. Strategy 2 is relevant for environments with very strict isolation or requirements that images leave no trace on the host.
Check the images available on the node:
crictl imagescrictl images shows the images containerd has pulled on the host. This is also a quick way to verify that a Kata pod's image really exists on the host before diagnosing further.
When a Kata pod fails because of an image, the usual diagnostic sequence:
kubectl describe pod — look at the events and error message.crictl images — make sure the image has been pulled on the host.crictl inspect <container-id> — check the container status on the CRI side./var/log/kata-containers/ — if the error is in the guest layer.We'll cover debugging thoroughly in episode 12, but one important principle can be taken now: image problems usually show up first in the containerd layer before touching the guest. Always start diagnosis there.
Tip
If you're using a private registry with an image already pulled on the host but the Kata pod still fails, suspect pull isolation: the Kata pod needs access to the rootfs image on the host. Make sure the snapshotter and containerd configuration for the Kata runtime are consistent with the regular runtime.
What you should take away:
crictl images verifies images on the host before further diagnosis.kubectl exec goes through the shim → vsock → agent → guest path.In the next episode, episode 10, we'll cover GPU & device passthrough — VFIO passthrough for AI/ML workloads, the role of NRI (Node Resource Interface), KEDA autoscaling integration, and how resource limits are applied inside the VM.