The Kubernetes ecosystem never sleeps, and the latest release, v1.35, is here to redefine how we approach application deployment and resource utilization. This iteration isn’t just about incremental improvements; it signals a significant evolution in Kubernetes philosophy, placing greater emphasis on understanding and responding to the unique needs of each workload.
For years, Kubernetes has excelled at orchestrating containers, but managing those containers effectively requires more than just placement – it demands intelligence. Version 1.35 introduces powerful new features that fundamentally change how Kubernetes views and interacts with your applications, moving beyond simple pod distribution to a truly workload-aware approach.
At the heart of this shift lies enhanced workload scheduling capabilities, allowing for finer control over where your applications run based on their specific requirements like performance tiers, resource affinities, and even latency sensitivity. This means better resource allocation, improved application performance, and ultimately, a more efficient Kubernetes cluster.
Think of it as Kubernetes finally understanding the ‘why’ behind each deployment – not just *where* to put it, but *how* to optimize its environment for peak performance. We’ll be diving deep into these exciting new features in this article, exploring how they empower operators and developers alike.
Workload API
The introduction of the Workload API in Kubernetes v1.35 marks a significant shift in how we approach workload scheduling. Traditionally, scheduling decisions have been made at the individual Pod level, often leading to inefficiencies and complexities when dealing with multi-Pod applications like machine learning jobs or distributed databases. The Workload API aims to address this by providing a centralized resource for defining comprehensive scheduling requirements that encompass an entire group of related Pods, rather than treating them as isolated entities.
Unlike Job definitions, which primarily concern themselves with execution and completion criteria, the Workload API focuses solely on *how* these Pods should be scheduled. It allows operators to specify constraints like co-location (placing Pods on the same rack or node), affinity rules across multiple Pods, and resource requirements that apply to the entire workload as a unit. This structured definition simplifies the process of requesting specific placement strategies and enables Kubernetes schedulers to make more intelligent decisions based on these collective needs.
The core idea is to capture the inherent relationships between Pods within a workload – they are often identical from a scheduling perspective, sharing similar resource requirements or dependencies. The Workload API provides a framework to express this shared context in a declarative manner, allowing for consistent and predictable behavior. This moves beyond simply requesting individual Pod placement and enables the creation of custom schedulers tailored to specific workload types while still leveraging Kubernetes’ core infrastructure.
Ultimately, the Workload API represents an evolution towards more sophisticated and efficient scheduling capabilities within Kubernetes, particularly crucial in environments dealing with increasingly complex and resource-intensive workloads. By decoupling scheduling requirements from execution details, it paves the way for improved performance, reduced operational overhead, and greater flexibility in how applications are deployed and managed.
Defining Scheduling Requirements

Kubernetes v1.35 introduces a new `Workload` API resource designed to address the complexities of scheduling interdependent Pods, moving beyond the limitations of traditional Job definitions. While Jobs primarily focus on defining *how* a task is executed – including retries and completion criteria – they offer limited control over the placement or relationships between individual Pods within that job. The Workload API aims to provide a structured mechanism for expressing these scheduling requirements explicitly.
The key distinction lies in the level of abstraction. A `Workload` resource encapsulates a group of Pods intended to function as a cohesive unit, allowing users to define constraints and preferences relating to their collective placement. This includes specifying affinity rules (e.g., co-location on specific nodes or racks), anti-affinity rules (e.g., spreading pods across availability zones), and other scheduling hints that ensure optimal performance and resource utilization for the entire workload rather than individual Pods.
By formalizing these workload-level scheduling needs, the Workload API provides a more declarative and manageable approach compared to implementing custom schedulers or relying on complex annotations. This standardized definition simplifies cluster management, improves portability across Kubernetes distributions, and paves the way for future scheduler optimizations that can leverage this structured information to intelligently place workloads.
How Gang Scheduling Works
Gang scheduling in Kubernetes v1.35 represents a significant shift in how workloads are placed, moving away from independent Pod scheduling towards an ‘all-or-nothing’ approach for groups of related Pods. This new feature directly addresses the challenges faced when deploying large, interconnected jobs – like those common in machine learning or high-performance computing – where performance and efficiency hinge on co-location of components. Rather than attempting to schedule each Pod individually based on its own constraints, gang scheduling treats a group of Pods as a single unit, aiming to place them together on the same node (or set of nodes) if possible.
The core principle behind gang scheduling is ensuring that all Pods within a designated workload are scheduled together or not at all. This prevents scenarios where some Pods are placed and others remain unscheduled, leading to resource wastage or even deadlocks. The process begins with the scheduler blocking until sufficient resources exist on a node to accommodate the entire workload group. A ‘permit gate’ mechanism then ensures that no individual Pod within the group can be scheduled unless all other Pods in the same gang have also been successfully placed.
This ‘all-or-nothing’ placement strategy has several key benefits. First, it dramatically improves performance for workloads requiring tight coordination between Pods, as data transfer and communication overhead are minimized by colocating them. Second, it optimizes resource utilization by preventing partial deployments that would otherwise tie up resources while waiting for other parts of the workload to become available. Finally, gang scheduling simplifies operational management by reducing the complexity of dealing with fragmented or incomplete deployments – a common headache when managing large-scale jobs.
Underlying the implementation are critical steps involving blocking, permit gate enforcement, and potential rejection if suitable placement isn’t found. If no node can satisfy all constraints for the entire workload group, the scheduler will reject the scheduling request entirely, preventing any partial deployment and ensuring a consistent state. This proactive approach to resource allocation is what distinguishes gang scheduling and makes it a powerful tool for efficiently managing demanding workloads in Kubernetes v1.35.
The Scheduling Process

The core of workload scheduling within Kubernetes v1.35 revolves around a novel approach called Gang Scheduling. Unlike traditional scheduling where pods are placed independently, Gang Scheduling treats an entire workload as a single unit, ensuring all component pods are scheduled together on the same nodes. This ‘all-or-nothing’ placement is crucial for maximizing efficiency in scenarios like machine learning jobs or high-performance computing (HPC) where inter-pod communication and data locality are paramount. The process involves a careful blocking phase to prevent partial workload execution.
The scheduling lifecycle begins with the scheduler attempting to find a suitable node for the entire workload group. A ‘permit gate’ mechanism is then employed; before any pod within the workload is actually scheduled, the scheduler verifies that all pods can be accommodated on a single node without violating resource constraints or affinity rules. This check acts as a preventative measure – if even one pod cannot find an appropriate placement, the entire workload scheduling process is blocked for that group. This blocking prevents situations where some pods are placed while others remain unscheduled, which could lead to deadlocks and significant operational issues.
If the permit gate fails, meaning no suitable node can accommodate all pods in the workload simultaneously, the scheduler rejects the entire scheduling request. This rejection is not a permanent failure; it simply means the workload will be retried later. This ‘all-or-nothing’ behavior, while potentially delaying workload initiation, drastically reduces the risk of resource wastage – avoiding partial placement and wasted resources on nodes that can’t support the whole group – and eliminates complex recovery scenarios associated with partially scheduled workloads.
Opportunistic Batching
Kubernetes v1.35 introduces a compelling new beta feature called Opportunistic Batching, designed to significantly reduce scheduling latency for identical Pods – a common scenario in many workloads, particularly those found in AI and machine learning environments. Traditional Kubernetes scheduling often treats each Pod as an independent entity, leading to delays when deploying large groups of similar Pods. This can become a bottleneck when launching computationally intensive tasks like training data pipelines or running distributed inference services.
Opportunistic Batching fundamentally changes this approach by allowing the scheduler to proactively group identical Pods together during scheduling. Instead of waiting for each Pod to request scheduling individually, it anticipates their arrival and attempts to schedule them in batches. This drastically reduces overall scheduling time because the scheduler can make more informed decisions about resource allocation and placement across multiple Pods simultaneously. Crucially, this optimization happens without requiring users to explicitly configure any special affinity rules or constraints – hence the term ‘opportunistic’.
However, it’s important to understand the conditions under which Opportunistic Batching operates effectively. It primarily benefits workloads where Pods share identical scheduling requirements (e.g., same labels, resource requests, and tolerations). If a workload contains significant variations in these attributes, batching may not be possible or beneficial. Furthermore, the feature is disabled by default and requires explicit enabling at the kube-scheduler level. Administrators should also monitor scheduler performance after enabling Opportunistic Batching to ensure it’s providing the intended improvements.
Finally, consider that while Opportunistic Batching aims for efficiency, there’s a trade-off: delaying the scheduling of some Pods slightly to improve overall batch throughput. In scenarios where individual Pod latency is paramount – for example, in highly interactive applications – enabling this feature might not be appropriate and could introduce undesirable delays.
Restrictions and Considerations
Opportunistic Batching, introduced as a beta feature in Kubernetes v1.35, streamlines the scheduling of identical Pods within a workload by allowing the scheduler to process them in batches. This fundamentally reduces scheduling latency compared to individually assessing each Pod, particularly beneficial for large-scale deployments where numerous pods share the same resource requests and affinities. The core principle is that if the scheduler detects multiple Pods with similar or identical scheduling requirements, it groups them together and makes a single scheduling decision for the entire batch, rather than iterating over each one separately.
However, Opportunistic Batching isn’t universally applicable. It operates under specific conditions; primarily, all Pods within a potential batch must have identical resource requests (CPU, memory), affinities, tolerations, and node selector constraints. Any deviation in these parameters will prevent the scheduler from combining them into a single batch. Furthermore, the feature is disabled by default and requires explicit enabling at the kube-scheduler level via command-line flags.
Several factors might lead to Opportunistic Batching being disabled or ineffective. Complex scheduling configurations involving custom schedulers, predicate extensions significantly altering Pod scoring, or situations where Pods within a workload have diverse requirements will all prevent batching from occurring. The feature’s effectiveness is also dependent on the scheduler’s ability to accurately identify identical pods; misidentification can lead to suboptimal placement and negatively impact overall cluster performance.
The North Star Vision
The introduction of Workload Aware Scheduling in Kubernetes v1.35 isn’t just a feature release; it represents a significant shift towards a more holistic approach to cluster resource management – a ‘North Star’ vision for how Kubernetes will handle increasingly complex and demanding application deployments. For years, Kubernetes scheduling has largely operated on a per-Pod basis, often leading to sub-optimal placement of related Pods within larger workloads, especially in scenarios like distributed training or high-performance computing where proximity and resource affinity are critical for performance.
The long-term ambition is to move beyond individual Pod considerations and empower Kubernetes to reason about entire workloads as cohesive units. This means enabling schedulers to understand the dependencies and constraints between Pods within a workload, optimizing placement not just for individual Pod needs but for the overall efficiency of the application. Imagine machine learning training jobs where worker nodes are strategically placed to minimize communication latency or database sharding deployments where data locality is maximized – Workload Aware Scheduling aims to make these scenarios significantly easier and more reliable to achieve natively.
Looking ahead, the roadmap includes several key enhancements designed to solidify this workload-centric approach. Improved Distributed Resource Allocation (DRA) support will allow for finer-grained control over resource distribution across workloads, while workload-level preemption promises a more equitable sharing of cluster resources during contention. Furthermore, tighter integration with autoscaling solutions will ensure that workloads are not only scheduled effectively but also scaled dynamically to meet changing demands, all while maintaining the optimized placement strategy.
Ultimately, Workload Aware Scheduling isn’t just about optimizing performance; it’s about simplifying operations and reducing complexity for Kubernetes users facing increasingly sophisticated application requirements. By shifting the focus from individual Pods to entire workloads, we are building a more intelligent and adaptable scheduling system that can seamlessly handle the challenges of modern distributed applications, particularly those driving innovation in fields like AI and data science.
Future Enhancements
Kubernetes v1.35 introduces significant advancements towards workload-aware scheduling, moving beyond individual Pod placement to consider entire application suites as cohesive units. A key focus is enhancing Dynamic Resource Allocation (DRA) support. Currently, DRA allows schedulers to make decisions based on resource requests and limits, but future iterations will aim for more sophisticated tracking of actual resource utilization across a workload, enabling finer-grained scheduling optimization. This includes improvements to how schedulers represent and reason about workload-level constraints and preferences.
Workload-level preemption is another exciting feature under development. Currently, Pod preemption operates at the individual Pod level. With workload-level preemption, the entire workload can be preempted as a single unit, offering more graceful handling of resource contention or urgent jobs. This prevents scenarios where only some pods in a critical workload are evicted, potentially leaving the remaining pods in an inconsistent state and requiring complex recovery procedures.
Looking ahead, tighter integration with Kubernetes autoscaling capabilities is planned. The goal is to allow schedulers to proactively adjust scheduling decisions based on predicted resource needs of workloads as determined by autoscalers. This proactive approach will move beyond reactive adjustments, enabling more efficient resource utilization and improved application performance. These enhancements are intended to simplify workload management and optimize resource allocation for increasingly demanding AI/ML applications.

Kubernetes v1.35 marks a significant step forward in optimizing resource utilization and application performance, particularly with its enhanced capabilities around workload scheduling. The introduction of features designed to intelligently place pods based on deeper understanding of their needs promises to alleviate common bottlenecks and streamline deployments across diverse environments. We’ve only scratched the surface here; exploring these new functionalities firsthand will undoubtedly reveal even more nuanced benefits tailored to your specific operational landscape.
This release isn’t just about theoretical improvements – it’s about tangible gains in efficiency, stability, and developer productivity. The advancements in workload scheduling represent a practical shift towards more proactive resource management, allowing teams to focus on innovation rather than constantly firefighting infrastructure limitations. We strongly encourage you to experiment with v1.35 in your test environments and begin integrating these changes into your production workflows as you become comfortable.
The Kubernetes community thrives on feedback, and your experiences are invaluable in shaping the future of the platform. We’re eager to hear about your successes, challenges, and suggestions for improvement as you adopt these new features. Your contributions will directly influence how we continue to refine and expand upon workload scheduling capabilities in subsequent releases.
Ready to dive in? Join the conversation and share your insights with fellow users and developers on our dedicated Slack channel: [Slack Link Here]. If you encounter any issues or have suggestions for enhancements, please log them as Github issues so our team can address them promptly: [Github Issues Link Here]!
Continue reading on ByteTrending:
Discover more tech insights on ByteTrending ByteTrending.
Discover more from ByteTrending
Subscribe to get the latest posts sent to your email.












