Kubernetes Blog

The official homepage of Kubernetes, a container orchestration system for automating deployment, scaling, and management of containerized applications. This platform offers comprehensive documentation on Kubernetes, a project maintained by Cloud Native Computing Foundation. It includes details about running stateless and stateful applications, batch jobs, and CI/CD workflows using Kubernetes. The site includes detailed guides, tutorials, reference material, API documentation, and community engagement initiatives to help users get started with Kubernetes and leverage its features effectively to manage cloud-based applications efficiently.

Thread Of Notes

Kubernetes adoption has led to managing complex application lifecycles, supporting diverse workloads and ensuring reliability. SIG Apps, comprising controllers like Deployments and StatefulSets, forms the bedrock of application management in Kubernetes. The group focuses on enhancing workload resilience, refining lifecycle management, and solving operational challenges. Janet Kuo and Maciej Szulik, SIG Apps chairs, discuss the evolution of workload management and future directions. SIG Apps is fundamental for how applications run on Kubernetes, managing their creation, updates, scaling, and recovery. As Kubernetes supports more varied workloads like AI and batch processing, SIG Apps evolves its APIs for reliability and simplicity. Current efforts prioritize serving workloads, improving rollout and scaling performance, and addressing user-reported issues. A major focus is improving workload resilience, particularly concerning node failures and their impact on workloads like DaemonSets and Jobs. New subprojects like JobSet and LeaderWorkerSet aim to handle failures in large-scale AI training and inference. Successful delivery of these improvements will reduce manual intervention for platform teams operating Kubernetes. A key challenge for SIG Apps is balancing aggressive controller behavior, necessary signals, and critical backward compatibility for existing user automation. To avoid breaking legacy systems, SIG Apps prefers opt-in features and introducing new paradigms via CRDs. The group also revisits proposals like KEP-4443 to enhance the Job API with more specific failure reasons for improved automation. New contributors are encouraged to join the #sig-apps Slack channel or contribute to evolving subprojects like the Agent Sandbox.
Kubernetes v1.37 introduces crucial storage security enhancements to bolster workload protection. These features enable the configuration of emptyDir volume permission modes and bind mount options directly within Kubernetes. This allows developers and security professionals to implement stringent security policies without complex workarounds. The improvements are built upon fundamental Linux security mechanisms like bind mount flags and directory permissions.Bind mount flags, such as noexec, nosuid, and nodev, control actions permitted on mounted filesystems. Directory permissions, including the sticky bit, regulate access and prevent unauthorized file deletions in shared directories. The primary motivation for these features is to enhance Kubernetes workload security by allowing security-relevant bind mount options. Previously, volumes were mounted without these protective flags, creating security vulnerabilities.A significant gap addressed is the inability to set mount options for emptyDir volumes and the default 0777 permission mode for directories. This allowed any process to access, modify, or delete files within emptyDir volumes, regardless of ownership. The new features provide native solutions, for instance, allowing the sticky bit to be set on emptyDir for secure shared workspaces, mirroring /tmp behavior. These enhancements empower application developers to prevent privilege escalation on writable mounts and enforce the principle of least privilege for application data.Use cases include preventing arbitrary binary execution from writable volumes and securing shared scratch space in multi-container pods. Developers can now confidently lock down access to temporary storage by setting specific modes like 0750. Both features are currently Alpha in v1.37 and require enabling feature gates: VolumeBindMountOptions and EmptyDirVolumeMode. These new capabilities are Linux-specific and do not affect Windows nodes.
Kubernetes v1.37 marks the Beta graduation of Memory QoS, now enabled by default on Linux nodes using cgroup v2. This feature enhances container memory management by leveraging the kernel's memory controller for better guidance. Originally introduced as Alpha in v1.22, it received expanded functionality in v1.36 with tiered memory reservation. The Beta promotion means the MemoryQoS feature gate is active in all v1.37 kubelets without requiring explicit configuration changes. Crucially, the default kubelet configuration does not enable memory throttling or reservation unless users explicitly opt-in.Users can enable specific Memory QoS behaviors through kubelet configuration fields. Setting memoryThrottlingFactor, for instance, activates memory.high throttling for Burstable and BestEffort containers. Alternatively, configuring memoryReservationPolicy to TieredReservation enables tiered memory protection via memory.min and memory.low. A significant change in v1.37 is the default for memoryThrottlingFactor shifting from 0.9 to null, preventing automatic memory throttling for existing clusters upon upgrade. This ensures that runtime behavior remains consistent unless explicitly configured otherwise.To configure Memory QoS, cluster operators can set memoryThrottlingFactor for throttling and memoryReservationPolicy for tiered reservation. Both can be enabled simultaneously or independently. Disabling Memory QoS entirely is possible by setting the feature gate to false and adjusting the kubelet configuration accordingly. A known limitation is that memory reservation is node-wide, applying consistently to all pods regardless of their desired behavior, impacting individual pod control. The next development phase for Memory QoS is its graduation to General Availability, with ongoing feedback shaping future adjustments.
Changed Block Tracking (CBT) for Kubernetes storage CSI drivers initially launched as Alpha in September 2025. This feature enhances storage operations by tracking changes within block volumes. The Alpha announcement details its motivation, core components, and usage. CBT currently only supports block volumes, excluding file-based storage. The recent v1.0.0 release of the external-snapshot-metadata project has promoted this functionality to Beta.The primary update in the Beta phase is the upgrade of the SnapshotMetadataService Custom Resource Definition (CRD) from v1alpha1 to v1beta1. While the schema remains the same, the old v1alpha1 version has been removed, requiring users to adapt. To transition from Alpha to Beta, users must re-apply the CRD definition, update their manifests to use the new API version, and adjust any client or controller code. This migration is a manual, one-time process.The Beta version necessitates a minimum Kubernetes version of 1.33 and CSI spec version 1.10 or newer. The compatible container image is csi-snapshot-metadata:v1.0.0. To test the feature, ensure your CSI driver supports snapshots and includes the external-snapshot-metadata sidecar. Install the v1beta1 CRD and create a SnapshotMetadataService resource for your driver. Then, use a lister tool or custom implementation to interact with the GetMetadataAllocated and GetMetadataDelta functions.The development team is now focusing on broader CSI driver adoption and gathering operational feedback during the Beta period. They encourage CSI driver maintainers to evaluate adding support and backup application developers to provide input on streaming clients and the iterator package. Further information can be found in the CSI developer documentation, KEP-3314, the external-snapshot-metadata repository, the gRPC schema, and the snapshot-metadata-lister example. Contributions to this feature have been significant, and interested individuals are encouraged to engage with SIG Storage and the Data Protection Working Group.
Native histograms are graduating to Beta in Kubernetes v1.37, offering high-resolution and low-cardinality observability. This advancement replaces older, static Prometheus histograms which suffered from bucket guessing, high cardinality, and interpolation errors. Prometheus native histograms utilize dynamic, exponential buckets stored within a single time series, reducing time series by up to 90%. This provides high resolution automatically and offers accurate quantile calculations. In Kubernetes, native histograms are integrated into shared metrics with dual exposition, ensuring compatibility with existing observability stacks. Classic buckets are still emitted alongside new native spans for a zero-breaking-change transition. Standard exponential options are automatically applied, ensuring bounded error for quantile calculations. This feature automatically supports major Kubernetes components like the API server, scheduler, and Kubelet. Upgrading to Kubernetes v1.37 enables this functionality, with Prometheus scrape configurations adapting to ingest the new format. Migrating dashboards and alerts involves updating PromQL queries from classic bucket references to direct metric name usage. A recommended migration workflow involves enabling both formats initially, then updating queries, verifying, and finally disabling classic format scraping for storage savings. Opting out or rolling back is flexible by adjusting Prometheus scrape configurations or component feature gates. This feature is moving towards General Availability, with community involvement encouraged.
Kubernetes traditionally lacked a unified way to describe a Node's lifecycle states beyond basic status information. This often led to fragmented understanding and potential conflicts between different cluster components. Kubernetes v1.37 introduces five well-known Node conditions to address this gap. These new conditions are DrainInProgress, Drained, MaintenancePlanned, MaintenanceInProgress, and GracefulNodeShutdownInProgress. Each condition uses a True, False, or Unknown status to indicate its current state. Administrators or authorized controllers are responsible for setting and clearing these conditions. Currently, core workload controllers do not act on these conditions, but they provide operational clarity by signaling Node lifecycle events. For instance, automation can set MaintenancePlanned before work begins and MaintenanceInProgress once it starts. Similarly, drain automation can set DrainInProgress and Drained accordingly. The recommended pattern is to use these conditions for status reporting while still utilizing existing Kubernetes mechanisms for actual operations like cordoning and draining. This shared signal is crucial because various cluster components, from the scheduler to external maintenance systems, need to understand Node status. Without it, components might make conflicting decisions, such as a DaemonSet controller replacing a Pod intentionally terminated during graceful shutdown. These new conditions provide a stable foundation for future enhancements in Node lifecycle management. The Kubernetes community is actively seeking feedback on these new conditions to improve scenarios like graceful node shutdown and maintenance.
Kubernetes v1.37 promotes KubeletInUserNamespace to beta, allowing node components like kubelet and runtimes to run as non-root users. This rootless mode, an evolution from a 2018 experiment, enhances security by confining potential container breakout vulnerabilities. Unlike pod user namespaces, this focuses on the host's node components. The feature mitigates risks from vulnerabilities such as CVE-2022-0811 and CVE-2023-27561, which historically could grant attackers root privileges. By running in a user namespace, an attacker's impact is limited to the non-root user's account, preventing kernel or firmware modification. User namespaces do not protect against kernel vulnerabilities themselves and should be combined with other hardening measures like seccomp. This feature has various use cases, including production clusters, shared machines, laptops, and AI sandboxes. It works by mapping a host non-root user to a fake root inside the namespace, which suffices for most node component tasks. The user namespace must be created externally, for example, using Rootless Docker. The KubeletInUserNamespace feature gate, now enabled by default, allows kubelet to ignore specific permission errors. Recent improvements include better support for idmapped tmpfs, user-namespaced pods, and writable cgroups, enabling nested Kubernetes deployments. Tools like kind, minikube, Usernetes, and k3s offer easy ways to create rootless Kubernetes clusters. The project plans to graduate this feature to General Availability in the future and welcomes community involvement.
Kubernetes 1.37 introduces significant advancements for Dynamic Resource Allocation (DRA), with the Extended Resource support reaching General Availability. This allows DRA drivers to manage traditional extended resources without separate device plugins. ResourceClaims now include a devices field in their status, enabling better visibility into device states like network interface names and IP addresses. DRA device taints and tolerations are now stable, mirroring node taints to manage device availability and maintenance. A standardized numaNode device attribute ensures consistent naming across different drivers.The ResourceClaim workload support has advanced to Beta, allowing a single claim to be shared across multiple Pods, overcoming previous limitations. The DRA Device Attributes Downward API, now in Beta, facilitates injecting device attributes directly into workloads, simplifying custom controller needs. Alpha features include list types for attributes, enabling more complex device matching, and node allocatable resource requests to prevent node oversubscription.Resource availability visibility is in its second Alpha, offering point-in-time snapshots. DRA's Optional Node Operations allows drivers to skip unnecessary node setup calls. Derived Attributes, a new Alpha feature, uses CEL expressions for flexible device matching based on custom rules. DRA Device Compatibility Groups prevent scheduling incompatible device combinations.The PreQueueingHint extension point, also in Alpha, optimizes pod scheduling by reducing the scope of scans during scale-ups. DRA Consumable Capacity now supports fractional values, enhancing precision in resource allocation. These ongoing developments highlight Kubernetes' commitment to improving resource management capabilities.
Kubernetes has introduced Pod Certificates and Cluster Trust Bundles as a new production identity mechanism. This feature, now generally available, integrates X.509 certificate issuance for TLS and mTLS directly into core Kubernetes. This is a significant step beyond the previous primary mechanism, service account JWTs. While JWTs offer ease of use and broad compatibility, they suffer from a crucial weakness: they are bearer tokens, making them susceptible to unauthorized access if compromised. Pod Certificates, on the other hand, leverage proof-of-possession credentials based on asymmetric cryptography, primarily X.509 certificates. This enhances security by requiring a demonstration of possession rather than simply sharing the credential itself.The goal is to make using X.509 certificates from Kubernetes workloads as straightforward as JWTs while maintaining high security standards. Pod Certificates are designed for flexibility, allowing for various certificate types within a single cluster through a pluggable interface. This contrasts with the single, standardized flavor of service account JWTs. Future Kubernetes versions are expected to offer built-in certificate providers for service DNS names and SPIFFE client certificates.The architecture involves the application requesting certificates, Kubelet issuing requests and managing trust bundles, and a signer controller fulfilling these requests and publishing trust bundles. The issuance process is chronological, starting with the pod's scheduling and culminating in the application accessing its keys and certificates. Automatic rotation is built-in, with applications needing to handle these updates. Security checks are integrated into the kube-apiserver to enforce isolation and prevent compromised nodes from gaining undue access. To experiment with these features, users need to install a third-party signer like Tinycert, which provides example signers and a library to help applications load SPIFFE certificates.
Kubernetes controllers, commonly written in Go with kubebuilder and controller-runtime, offer efficient development for distributed workloads. However, as load increases, understanding controller-runtime's internal workings becomes crucial to avoid production issues. The core concept is that r.Get() and r.List() within a reconciler do not directly query the API server; instead, they access a local, in-memory cache. This cache is populated initially by a list operation and subsequently maintained through watches.This design makes local reads exceptionally fast, avoiding strain on the control plane. The trade-off, however, is that the local cache can consume significant memory and may return stale data. Writes, conversely, are always directed to the API server, bypassing the cache. The size of this local cache and the indexing strategies directly impact memory usage. An inefficient List() operation can inadvertently lead to slow linear scans of numerous objects.The reconciliation loop continuously compares desired states with actual states to bring them into alignment. Events are queued, leading to a reconcile function that reads the current state, determines necessary actions, and potentially generates new events. The cache's primary purpose is to provide a rapid, up-to-date view of object states for these reconciliation loops. This watch-based model, originating from client-go, prevents constant API polling by maintaining a single, long-lived connection for updates.controller-runtime abstracts the complexities of lower-level client-go components like Reflector, DeltaFIFO, and Indexer. The Manager orchestrates the shared cache, controllers, and other services. An Informer monitors a specific GVK, maintaining a local store (Indexer) and dispatching events to subscribers. ResourceEventHandlers process these events, updating the store, which is then reflected in the controller's view. A workqueue manages object keys for processing by workers, and Predicates filter events before enqueueing.The Reflector is the sole component directly interacting with the API server, performing an initial list and then establishing a watch. It leverages resourceVersion to resume watches and ensure no events are missed. If a watch connection is lost or the API server indicates an outdated resourceVersion, a relist is performed. DeltaFIFO acts as an ordered buffer for changes, grouping deltas by object key. It provides all accumulated changes for an object since the last Pop() call, ensuring ordered, batched processing. However, it does not collapse consecutive "Added" or "Updated" events, which could lead to multiple processing rounds for rapidly changing objects.
Kubernetes scales based on CPU and memory, but real-world demands often require custom metrics like queue depth or active connections. A Prometheus metrics exporter bridges this gap by exposing application state as plain text on an HTTP /metrics endpoint for Prometheus to scrape.Exporters can be standalone services or embedded directly within an application, depending on the data source and control over application code. Prometheus expects metrics in specific formats: counters for ever-increasing values, gauges for fluctuating values, and histograms for distributions. Metric names should follow a clear " __ " snake_case convention. Building an exporter in Go involves initializing a module, setting up the Prometheus client library, and registering metrics like counters, gauges, and histograms. These metrics are then updated by a polling loop that reads from your application's data sources. An HTTP server exposes the /metrics endpoint, along with a /healthz endpoint for liveness probes. The exporter is packaged into a minimal container image using a multi-stage Docker build, ensuring a small footprint. Deployment to a Kubernetes cluster involves a Deployment for pod management and a Service to provide a stable address for Prometheus. Prometheus discovers these metrics via a ServiceMonitor if using the Prometheus Operator, or through annotation-based discovery on the Pod template. Verification involves checking the Prometheus targets page to ensure the exporter is "UP" and querying the metrics in the expression browser. This foundation allows for autoscaling with the HorizontalPodAutoscaler, which uses a metrics adapter (like the Prometheus Adapter) to integrate custom metrics with the Kubernetes Custom Metrics API. This enables workloads to scale based on business-relevant signals, not just basic resource utilization.
Volcano is a cloud-native batch scheduler for Kubernetes, designed for high-performance computing, AI/ML, and other batch workloads. Kubernetes was originally built for long-running services, whereas batch workloads often require dynamic job arrival, resource competition, and co-starting multiple workers. Volcano extends Kubernetes with concepts like queues, priorities, quotas, and gang scheduling, treating workloads as a whole rather than independent Pods. The Volcano plugin for Headlamp, an extensible Kubernetes web UI, brings these scheduling details into a single interface.The plugin provides dedicated views for Volcano Jobs, Queues, and PodGroups, making it easier to operate and troubleshoot batch workloads. The Job view displays workload status, task details, Pod status, and allows direct actions like suspending/resuming and accessing logs. The Queue view offers insights into resource allocation, capacity, and reservation details. The PodGroup view clarifies gang scheduling states and potential blockers.A key feature is the map view, which visually represents how Jobs, Queues, PodGroups, and Pods are interconnected, helping to quickly identify issues in pending or non-progressing workloads. This plugin enhances the interactive troubleshooting experience by centralizing related resources, structured details, and runtime output, without replacing CLI tools for automation. Future enhancements may include Prometheus integration and richer scheduling insights. Users can install the plugin via Headlamp's Plugin Catalog and provide feedback to shape its development.
CdXz5zHNQW_lVauTs2nj6.png
CdXz5zHNQW_uA3Yt1MH58.png
The article highlights SIG Storage, the Kubernetes Special Interest Group responsible for persistent data and volume management. Xing Yang, a co-chair of SIG Storage, discusses the group's evolution from handling basic persistent volumes to advancing complex storage features. Initially designed for stateless workloads, Kubernetes now supports stateful applications, necessitating dedicated storage solutions. SIG Storage formed to address these challenges, introducing primitives like PersistentVolumes and PersistentVolumeClaims.A significant advancement was the Container Storage Interface (CSI), which enables third-party storage providers to integrate their systems without core Kubernetes modifications. Current work includes Volume Group Snapshot for crash-consistent multi-volume snapshots and Changed Block Tracking for efficient backups, both recently graduated to stable versions. The Container Object Storage Interface (COSI) is also progressing to standardize object storage integration.Recent wins for users include the graduation of VolumeAttributesClass to General Availability, allowing dynamic tuning of storage properties like IOPS. Future roadmaps feature Volume Health for improved operational visibility and potential automated remediation. SIG Storage seeks community help with bug fixes, tests, reviews, and feedback on features like Mutable PV Affinity and volume replication.Challenges for stateful workloads include data gravity, day-2 operational complexity, and data mobility. As AI workloads grow, storage in Kubernetes is expected to become more intelligent, with object storage gaining prominence. High performance, low latency storage, and data-aware scheduling are also anticipated trends. SIG Storage invites community involvement to tackle these evolving storage demands.
Kubernetes v1.35 introduced workload-aware scheduling improvements, including the Workload API and basic gang scheduling for identical Pods. Kubernetes v1.36 refines this architecture by separating the Workload API (static template) from the new PodGroup API (runtime state). This separation streamlines the kube-scheduler, enabling it to directly read PodGroup information for enhanced performance.A new PodGroup scheduling cycle allows atomic processing of workloads, evaluating entire groups as a unified operation to prevent deadlocks. If a valid placement is found and group constraints are met, Pods are bound together; otherwise, the entire group is considered unschedulable and retries later. This forms the foundation for gang scheduling, ensuring all-or-nothing placement for strict workload requirements.Topology-aware scheduling in v1.36 enables defining topology constraints on PodGroups, co-locating Pods within specific physical or logical domains to reduce network latency. This involves generating, evaluating, and scoring candidate placements based on scheduling constraints.Workload-aware preemption is introduced to support the PodGroup scheduling cycle, preempting Pods from multiple Nodes simultaneously to make space for an entire PodGroup. It treats the PodGroup as a single preemptor unit, with PodGroup priority and disruptionMode fields controlling preemption behavior.Finally, v1.36 integrates Dynamic Resource Allocation (DRA) with the Workload API, allowing PodGroups to request and share specialized hardware resources through ResourceClaims. These advancements lay a robust foundation for building advanced workload scheduling capabilities in future Kubernetes releases.
Pressure Stall Information (PSI) has been integrated into the Linux kernel since 2018, providing high-fidelity signals for identifying resource saturation before it leads to outages. Unlike traditional utilization metrics, PSI quantifies stalled tasks and lost time across CPU, memory, and I/O. With Kubernetes v1.36, a stable interface for observing resource contention at node, pod, and container levels is now available. PSI offers cumulative totals of stalled time and moving averages (10s, 60s, 300s) to distinguish between transient spikes and sustained resource tension.Extensive performance testing by SIG Node on high-density workloads (80+ pods) proved PSI's readiness for production. Kubelet overhead, measured by toggling the KubeletPSI feature gate, showed negligible impact on resource usage. The Kubelet's collection logic proved lightweight, blending seamlessly into standard housekeeping cycles, consuming less than 0.1 cores or 2.5% of total node capacity.Regarding kernel overhead, enabling PSI on the Linux kernel (psi=1 vs psi=0) resulted in a consistent delta of 0.037 to 0.125 cores (0.925% - 3.125% of node capacity) under heavy load. The kubelet process, as the primary collector, also maintained remarkably low CPU usage, with spikes not exceeding 0.25 cores (6.25%) for more than a second.Improvements in v1.36 include smarter metric emission; the Kubelet now detects OS-level PSI support via cgroup configurations before reporting, preventing misleading zero-valued metrics. To use PSI, nodes must run Linux kernel 4.20+, use cgroup v2, and have PSI enabled at the OS level (CONFIG_PSI=y, no psi=0 boot parameter).PSI metrics are generally available in v1.36 and require no feature gate opt-in. Users can scrape the /metrics/cadvisor endpoint or query the Summary API. PSI is a Linux-kernel feature and is not available on Windows nodes. Proxying to the Kubelet's HTTP API via the control plane's API server allows real-time pressure data from the Summary API but is a privileged operation.
CdXz5zHNQW_xWB13lRlZh.png
Kubernetes v1.36 introduces General Availability (GA) for volume group snapshots, a feature that was previously an Alpha and then Beta enhancement. This functionality leverages extension APIs to enable crash-consistent snapshots of multiple volumes simultaneously. The system groups PersistentVolumeClaim objects using label selectors, allowing for the restoration of workloads to a consistent recovery point. This feature is exclusively supported for CSI volume drivers, offering a significant advantage for applications utilizing multiple volumes that require write order consistency.Previously, individual volume snapshots could lead to inconsistencies if taken at different times, particularly for multi-volume applications. Group snapshots eliminate the need for manual application quiescence, providing crash consistency across all volumes in the group without tedious, sequential individual snapshots. Kubernetes manages group snapshots through three custom API kinds: VolumeGroupSnapshot, VolumeGroupSnapshotContent, and VolumeGroupSnapshotClass. These CRDs, now promoted to v1 in the GA release, allow users to request group snapshots, track their provisioned resources, and define their creation policies, respectively.The GA release brings enhanced stability, bug fixes, and improved restoreSize reporting based on feedback from prior beta versions. To use this feature, users must label their PersistentVolumeClaims to be grouped and then define a VolumeGroupSnapshot object with a selector matching these labels, along with a VolumeGroupSnapshotClass. For restoration, new PersistentVolumeClaims are created from individual VolumeSnapshot objects that are part of a larger VolumeGroupSnapshot. Storage vendors can add support by implementing new group controller services and RPCs within their CSI drivers.
Dynamic Resource Allocation (DRA) in Kubernetes v1.36 introduces significant advancements, extending its capabilities beyond specialized hardware to native resources like CPU and memory. Driver support for various hardware types, including networking, is expanding, making DRA a more hardware-agnostic solution. Several key features have graduated, enhancing scheduling flexibility and cluster utilization. The Prioritized list feature enables fallback preferences for device requests, improving resource allocation efficiency. Extended resource support allows a gradual transition to DRA by enabling resource requests via traditional extended resources. Partitionable devices provide native DRA support for dynamically carving physical hardware into smaller, logical instances. Device taints empower administrators to manage hardware more effectively by preventing faulty devices from being allocated or reserving specific hardware. Device binding conditions improve scheduling reliability by delaying Pod commitment until external resources are fully prepared. Resource health status exposes device health information directly in Pod status, aiding in quick identification and reaction to hardware failures. New alpha features include ResourceClaim support for workloads, optimizing large-scale AI/ML by managing shared resources across PodGroups. Node allocatable resources integrate CPU and memory allocation under the DRA umbrella, allowing for fine-grained performance tuning. DRA resource availability visibility provides administrators with real-time device capacity information for better planning. Deterministic device selection allows drivers to influence scheduling through lexicographical ordering. Discoverable device metadata in containers provides a standard protocol for drivers to expose device attributes to containers. The future roadmap focuses on maturing existing features, enhancing performance, scalability, and integration with workload-aware and topology-aware scheduling, with a strong emphasis on migrating users from Device Plugin to DRA.
Kubernetes v1.36 introduces Pod-Level Resource Managers as an alpha feature, enhancing resource management for performance-sensitive workloads. It extends kubelet's Topology, CPU, and Memory Managers to a pod-centric resource allocation model, moving beyond per-container specifications. This addresses the challenge of providing exclusive, NUMA-aligned resources for primary application containers while supporting lightweight sidecars efficiently. Previously, achieving predictable performance often meant allocating exclusive resources to all containers, which was wasteful for sidecars. Alternatively, not doing so sacrificed the pod's Guaranteed QoS. Pod-level resource managers enable hybrid allocation, allowing high-performance workloads to achieve NUMA alignment without wasting resources. For example, a latency-sensitive database pod can have its main container receive exclusive CPU and memory, while sidecars share a distinct pod shared pool, isolated from other node resources. Another use case involves ML workloads where the training container gets exclusive NUMA-aligned resources, and a service mesh sidecar runs in the general node-wide shared pool. CPU isolation is managed by disabling CFS quota enforcement for exclusive containers and enforcing it at the pod level for shared pool containers. Enabling requires specific kubelet feature gates, Topology Manager policies, and static CPU and Memory Manager configurations. New kubelet metrics provide observability into resource allocations and container assignments. This feature is currently in alpha, with known limitations and caveats, and user feedback is encouraged through Kubernetes community channels.