One direct approach is to treat each agent as a first-class Kubernetes workload, with its own Pod, Service, and ServiceAccount. kagent initially ran multiple agents in a single runtime, but later adopted this approach to gain process and container isolation, ServiceAccount identity, network and admission policies, per-agent attribution of logs, metrics, and traces, as well as Kubernetes-native scheduling and resource management. kagent subsequently added stronger isolation support through the Kubernetes Agent Sandbox project.
However, agent behavior differs from the microservices these abstractions were designed for. Agents may only wake up when a task arrives, run for seconds or minutes, and then idle, so reserving a dedicated Pod for every potential agent is wasteful. Agents may also spawn sub-agents to execute subtasks in parallel, act on behalf of users, and pause indefinitely while waiting for human approval. Pods are excellent execution environments, but not necessarily the right lifecycle abstraction for short, bursty work.
Another approach is to introduce a control plane on top of Kubernetes. Google's Agent Substrate, introduced in the Agent Sandbox and Agent Substrate announcements, takes this approach, and kagent supports it as well. Agent Sandbox provides isolated execution environments, while Agent Substrate manages how logical agents are placed onto workers and moved between them. Kubernetes continues to manage Pods, Services, networking, storage, and compute, while the upper layer manages the lifecycle and placement of AI roles. Its abstractions correspond to concepts familiar to platform engineers: WorkerPool is similar to NodePool, Worker is similar to Node, and ActorTemplate is similar to a declarative Pod specification.