Kubernetes v1.36 Alpha: Pod-Level Resource Managers for Smarter Resource Allocation
By
<p>Welcome to the next evolution of resource management in Kubernetes! With v1.36, an alpha feature called <strong>Pod-Level Resource Managers</strong> redefines how performance-sensitive workloads handle CPU, memory, and topology. Instead of forcing every container to ask for resources individually, this enhancement lets the kubelet treat the whole pod as a single resource unit. You get NUMA alignment for your main app, while sidecars share a flexible pool—no more wasted cores or lost Guaranteed QoS. Let’s dive into the details with some common questions.</p>
<h2 id="q1">1. What are Pod-Level Resource Managers in Kubernetes v1.36?</h2>
<p>Pod-Level Resource Managers are an alpha feature in Kubernetes v1.36 that extend the kubelet’s Topology, CPU, and Memory Managers to work at the pod level rather than the container level. They allow you to specify resource requests and limits directly in the pod spec (<code>.spec.resources</code>), creating a hybrid allocation model. The entire pod receives a NUMA-aligned budget, and within that budget, your primary container gets exclusive slices while auxiliary containers (like sidecars) share a pool of leftovers. This is enabled via the <code>PodLevelResourceManagers</code> and <code>PodLevelResources</code> feature gates. It’s designed for high-performance workloads that need both predictability and efficiency.</p><figure style="margin:20px 0"><img src="https://picsum.photos/seed/3260570146/800/450" alt="Kubernetes v1.36 Alpha: Pod-Level Resource Managers for Smarter Resource Allocation" style="width:100%;height:auto;border-radius:8px" loading="lazy"><figcaption style="font-size:12px;color:#666;margin-top:5px"></figcaption></figure>
<h2 id="q2">2. Why were Pod-Level Resource Managers introduced?</h2>
<p>Before this feature, Kubernetes resource allocation was strictly per-container. If you wanted NUMA-aligned exclusive CPUs for your main application—essential for ML training, high-frequency trading, or low-latency databases—you had to assign integer CPU requests to every container in the pod, even lightweight sidecars. That wasted resources and often forced you to choose between performance (Guaranteed QoS) and efficiency. Pod-Level Resource Managers solve this by letting the kubelet make a single NUMA alignment for the entire pod, then carve out exclusive slices for the main container while giving sidecars a shared pool. This eliminates the trade-off and preserves both NUMA alignment and Guaranteed QoS without waste.</p>
<h2 id="q3">3. How do Pod-Level Resource Managers change resource allocation?</h2>
<p>Instead of each container declaring its own resource needs, the pod itself defines an overall budget via <code>.spec.resources</code>. The kubelet’s Topology Manager aligns that budget to a single NUMA node. From that budget, the primary container gets exclusive, integer-based CPU and memory slices as defined in its own container-level resources. The remaining resources from the pod’s budget form a new <strong>pod shared pool</strong>. Any sidecars—like metrics exporters or logging agents—run in this shared pool. They share the leftover CPUs and memory among themselves, but they are strictly isolated from the main container’s exclusive slices and from other pods on the node. This hybrid model brings flexibility without sacrificing performance.</p>
<h2 id="q4">4. What is the 'pod shared pool' and how does it work?</h2>
<p>The <strong>pod shared pool</strong> is a new resource concept introduced by Pod-Level Resource Managers. After the kubelet allocates exclusive, integer-based resources to the pod’s primary container (based on its container-level requests), the remaining CPU and memory from the pod’s overall budget are pooled together. Any sidecar containers in the pod automatically draw from this pool. They can share the resources among themselves, but they cannot access the primary container’s exclusive slices. This pool is also isolated from other pods on the node. The result: lightweight auxiliary containers get the resources they need without requiring dedicated cores, and the main workload keeps its NUMA alignment and Guaranteed QoS class. The shared pool size scales dynamically based on what the main container doesn’t use.</p>
<h2 id="q5">5. Can you provide a real-world example of using Pod-Level Resource Managers?</h2>
<p>Sure! Consider a latency-sensitive database pod with three containers: a main database engine, a metrics exporter, and a backup agent. With the Topology Manager scope set to <code>Pod</code>, you define a pod-level resource budget of 8 CPUs and 16 GiB of memory. The database container requests 6 CPUs and 12 GiB exclusively. The kubelet aligns the entire pod to a single NUMA node. The remaining 2 CPUs and 4 GiB become the pod shared pool. The metrics exporter and backup agent run in this pool, sharing those resources. They cannot touch the database’s exclusive slices, and the database maintains strict NUMA alignment. This setup avoids wasting dedicated cores on sidecars while keeping high performance for the main workload. A YAML example would look like the one in the original blog, with <code>spec.resources</code> defining the budget.</p>
<h2 id="q6">6. How do you enable Pod-Level Resource Managers?</h2>
<p>Pod-Level Resource Managers are an alpha feature in Kubernetes v1.36, so you need to enable two feature gates on your kubelet: <code>PodLevelResourceManagers</code> and <code>PodLevelResources</code>. Additionally, you must configure the Topology Manager scope to either <code>Pod</code> or use the default <code>Container</code> scope depending on your needs. For a pod-level alignment, set <code>--topology-manager-scope=pod</code>. Once enabled, you can define <code>.spec.resources</code> in any pod spec. Remember that this is alpha software, so test thoroughly in non-production clusters. Check the official Kubernetes documentation for the latest setup instructions and compatibility notes.</p>
<h2 id="q7">7. What are the key benefits of Pod-Level Resource Managers?</h2>
<p>The main benefits are <strong>efficiency</strong> and <strong>flexibility</strong> for high-performance workloads. You no longer have to overallocate CPU or memory to get NUMA alignment and Guaranteed QoS for your primary container. Sidecars can share a pool of resources, reducing waste. The hybrid model allows you to colocate auxiliary containers on the same NUMA node as your main app without interfering with its performance. This makes Kubernetes suitable for more demanding, latency-sensitive applications like ML training, trading platforms, and real-time databases. It also simplifies cluster management because you don’t need to manually tune each container’s resource requests to achieve optimal alignment.</p>
Tags: