Tags

Tags give the ability to mark specific points in history as being important
  • v0.15.8

    Changes since `v0.15.7`:
    
    - Helm: Add kueueViz.backend.ingress.enabled and kueueViz.frontend.ingress.enabled Helm values to allow disabling KueueViz ingress resources. (#10064, @david-gang)
    - Helm: Add support to pass in custom issuerRef to allow for configuration of Issuers. (#10213, @MatteoFari)
    - Introduced the `WorkloadNameShorten` feature gate to ensure generated Workload names do not exceed 63 characters. This prevents issues where Workload labels were invalid due to length. When enabled, the owner-based prefix is truncated to fit within the limit while maintaining uniqueness via a hash suffix. (#10130, @mbobrovskyi)
    
    - FairSharing: Fix `FairSharingPrioritizeNonBorrowing` to check per-flavor borrowing at every hierarchy level in hierarchical cohorts, not just at the ClusterQueue level. (#10201, @mukund-wayve)
    - RayJob integration: fix the autosaling scenarios when using ElasticJobsViaWorkloadSlices. In particular when
      two consecutive scale ups happen. (#10162, @hiboyang)
    - Scheduling: fix the bug that scheduler could get stuck trying to preempt a workload due to the corruption of the
      in-memory state tracking the pending preemptions (called preemptionExpectations). (#10208, @mimowo)
    - Strip managedFields from informer cache via DefaultTransform to reduce memory footprint on large clusters. (#10128, @jzhaojieh)
    - TAS: Fix a bug where preemption with multiple resources sometimes fails (#10205, @mimowo)
    - TAS: Fix nil pointer panic in TAS node reconciler when unadmitted workloads exist in the cluster. (#10038, @kannon92)
    - TAS: Improved the performance of the node_controller Reconcile loop by introducing a new field indexer for Workloads. (#10052, @j-skiba)
    - TAS: Workloads that require TAS but have a PodSet with a failed TAS request (e.g., more than one flavor assigned) are correctly rejected at admission with a clear Pending reason and message, rather than being admitted without TopologyAssignment. (#10227, @j-skiba)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, after Kueue restart, responsible for NodeHotSwap and ProvisioningRequests. (#10176, @mimowo)
    
    - Observability: Increased log level from 3 to 5 for TAS node filtering-related log events. (#10020, @mwysokin)
    
  • v0.16.5

    Changes since `v0.16.4`:
    
    - Helm: Add kueueViz.backend.ingress.enabled and kueueViz.frontend.ingress.enabled Helm values to allow disabling KueueViz ingress resources. (#10065, @david-gang)
    - Helm: Add support to pass in custom issuerRef to allow for configuration of Issuers. (#10212, @MatteoFari)
    - Introduced the `WorkloadNameShorten` feature gate to ensure generated Workload names do not exceed 63 characters. This prevents issues where Workload labels were invalid due to length. When enabled, the owner-based prefix is truncated to fit within the limit while maintaining uniqueness via a hash suffix. (#10129, @mbobrovskyi)
    
    - FairSharing: Fix `FairSharingPrioritizeNonBorrowing` to check per-flavor borrowing at every hierarchy level in hierarchical cohorts, not just at the ClusterQueue level. (#10203, @mukund-wayve)
    - RayJob integration: fix the autosaling scenarios when using ElasticJobsViaWorkloadSlices. In particular when
      two consecutive scale ups happen. (#10160, @hiboyang)
    - Scheduling: fix the bug that scheduler could get stuck trying to preempt a workload due to the corruption of the
      in-memory state tracking the pending preemptions (called preemptionExpectations). (#10206, @mimowo)
    - Strip managedFields from informer cache via DefaultTransform to reduce memory footprint on large clusters. (#10125, @jzhaojieh)
    - TAS: Fix a bug where preemption with multiple resources sometimes fails (#10204, @mimowo)
    - TAS: Fix nil pointer panic in TAS node reconciler when unadmitted workloads exist in the cluster. (#10039, @kannon92)
    - TAS: Improved the performance of the node_controller Reconcile loop by introducing a new field indexer for Workloads. (#10051, @j-skiba)
    - TAS: Workloads that require TAS but have a PodSet with a failed TAS request (e.g., more than one flavor assigned) are correctly rejected at admission with a clear Pending reason and message, rather than being admitted without TopologyAssignment. (#10228, @j-skiba)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, after Kueue restart, responsible for NodeHotSwap and ProvisioningRequests. (#10177, @mimowo)
    
    - Observability: Increased log level from 3 to 5 for TAS node filtering-related log events. (#10021, @mwysokin)
    
  • v0.17.0

    Changes since `v0.16.0`:
    
    - TAS: Stop kueue.x-k8s.io/tas label evaluation.
    
      ACTION REQUIRED
      Before you upgrade the Kueue version to v0.17.0, we highly recommend that there are no TAS workloads created before Kueue v0.14.0. (#8770, @tenzen-y)
    
    - KueueViz: The backend WebSocket URL is no longer configured via a container environment variable. It is now automatically derived from the backend ingress configuration and mounted as a ConfigMap. (#9397, @ziadmoubayed)
    - TAS: Relax ResourceFlavor spec immutability to only topology-sensitive fields (nodeLabels, tolerations, topologyName), allowing nodeTaints and future spec fields to be updated in-place. (#9427, @mukund-wayve)
    
    - Add support to Kubeflow Trainer v2.2 (#10127, @kaisoz)
    - DRA: Add support for extended resources in alpha. The feature is enabled by the DRAExtendedResources feature gate. (#8597, @sohankunkerkar)
    - ElasticWorkloads & TAS: enable the integration with the ElasticJobsViaWorkloadSlicesWithTAS feature gate (alpha) (#8580, @sohankunkerkar)
    - Graduated LendingLimit to GA. The feature gate is now locked to true and cannot be disabled. (#9258, @kannon92)
    - Graduated LocalQueueDefaulting to GA. (#9299, @kannon92)
    - Graduated ObjectRetentionPolicies to GA (#9300, @kannon92)
    - Graduated SanitizePodSets feature gate to GA. (#9260, @kannon92)
    - HC: Graduated HierarchicalCohorts to GA (#9618, @PannagaRao)
    - Helm: Add kueueViz.backend.ingress.enabled and kueueViz.frontend.ingress.enabled Helm values to allow disabling KueueViz ingress resources. (#8986, @david-gang)
    - Helm: Add support to pass in custom issuerRef to allow for configuration of Issuers. (#9984, @MatteoFari)
    - Helm: Allow setting log level (#9944, @gabesaba)
    - Implements AdmissionGatedBy, a mechanism to prevent admission immediately after creation (#9792, @VassilisVassiliadis)
    - Introduced the `WorkloadNameShorten` feature gate to ensure generated Workload names do not exceed 63 characters. This prevents issues where Workload labels were invalid due to length. When enabled, the owner-based prefix is truncated to fit within the limit while maintaining uniqueness via a hash suffix. (#9973, @mbobrovskyi)
    - KubeRay integration: native support for managing RayService via Kueue. (#9102, @hiboyang)
    - KueueViz Helm: Add podSecurityContext and containerSecurityContext configuration options to KueueViz Helm chart for restricted pod security profile compliance (#9311, @ziadmoubayed)
    - KueueViz backend and frontend resource requests/limits are now configurable via Helm values (kueueViz.backend.resources and kueueViz.frontend.resources). (#8978, @david-gang)
    - KueueViz: Add token-based authentication as opt-in. (#9684, @samzong)
    - KueueViz: Added resource utilization reporting  and small UI improvements. (#10073, @ziadmoubayed)
    - Kueueviz: support hierarchical cohorts with tree view (#9725, @samzong)
    - Kueueviz: use informers instead of polling for WebSocket updates (#8707, @thejoeejoee)
    - MultiKueue: Add support for LeaderWorkerSet workloads (#8670, @IrvingMg)
    - MultiKueue: Add the  `MultiKueueOrchestratedPreemption` alpha feature gate proposed in KEP-8303, which enables the orchestration of preemptions within MultiKueue worker clusters, guaranteeing that the preemptions are executed sequentially.
      Introduce a new `PreemptionGate` API to `Workload`, which governs whether a workload can execute preemptions. (#9721, @kshalot)
    - MultiKueue: Deprecate MultiKueueAllowInsecureKubeconfig feature gate. (#9297, @kannon92)
    - MultiKueue: Enabling RayService workloads to be dispatched across multiple Kueue-managed clusters. (#10025, @hiboyang)
    - MultiKueue: Promote MultiKueueBatchJobWithManagedBy to stable (#8877, @kannon92)
    - Observability:  Introduce the cohort nominal quota metric. (#9132, @mszadkow)
    - Observability:  Introduce the cohort resource reservations metric. (#9833, @mszadkow)
    - Observability: Add custom Prometheus metric labels from CQ/LQ/Cohort metadata via metrics.customLabels config. (#9774, @IrvingMg)
    - Observability: Add scheduler logs for the scheduling cycle phase boundaries. (#9795, @sohankunkerkar)
    - Observability: Increased the maximum finite bucket boundary for admission_wait_time_seconds histogram from ~2.84 hours to ~11.3 hours for better observability of long queue times. (#9493, @mukund-wayve)
    - Observability: Introduce "kueue.x-k8s.io/cluster-queue-name" and "kueue.x-k8s.io/local-queue-name" labels for pods created or managed by Kueue. (#9348, @dkaluza)
    - Observability: Introduce kueue_cohort_admitted_workloads_total metric (#9999, @mbobrovskyi)
    - Observability: Introduce kueue_cohort_subtree_admitted_active_workloads metric (#10013, @mbobrovskyi)
    - Observability: added LocalQueueMetrics configuration to control which metrics should be displayed. (#9371, @mykysha)
    - Observability: clean local queue metrics if the labels are not matching with the configuration after update. (#10097, @mykysha)
    - Observability: graduated LocalQueueMetrics to Beta. (#9700, @mykysha)
    - Pod integration: introduce the FastQuotaReleaseInPodIntegration feature gate (alpha, disabled by default)
      which allows to release quota as soon as all Pods in a group are terminating. (#8992, @tskillian)
    - Promote PropagateBatchJobLabelsToWorkload to stable (#8876, @kannon92)
    - Scheduling: Add the alpha SchedulerLongRequeueInterval feature gate (disabled by default) to increase the
      inadmissible workload requeue interval from 1s to 10s. This may help to mitigate, on large environments with
      many pending workloads, issues with frequent re-queues that prevent the scheduler from reaching schedulable
      workloads deeper in the queue and result in constant re-evaluation of the same top workloads. (#9812, @mbobrovskyi)
    - Scheduling: Add the alpha SchedulerTimestampPreemptionBuffer feature gate (disabled by default) to use
      5-minute buffer so that workloads with scheduling timestamps within this buffer don’t preempt each other
      based on LowerOrNewerEqualPriority. (#9835, @mbobrovskyi)
    - Scheduling: support the kueue.k8s-x.io/priority-boost annotation to increase the effective priority of a workload.
      The annotation is meant for the use of external controllers on the Workload object. (#9120, @vladikkuzn)
    - Support kubeflow/spark-operator's SparkApplication integration without Elastic Job Support (i.e., no support for Dynamic Allocation in SparkApplication) behind the SparkApplicationIntegration feature gate (#7268, @everpeace)
    - TAS: Extend the support for handling NoSchedule taints when the TASReplaceNodeOnNodeTaints feature gate is enabled. (#8997, @j-skiba)
    - TAS: Introduce the TASReplaceNodeOnNodeTaints feature gate (enabled by default) which allows
      TAS workloads to be evicted or replaced when a node is tainted with NoExecute. (#9450, @j-skiba)
    - TAS: Introduce the `TASMultiLayerTopology` feature gate (alpha) to support up to 3 hierarchical slice layers (#9506, @Huang-Wei)
    - VisibilityOnDemand: Introduce a new Kueue deployment argument, --visibility-server-port, which allows passing custom port when starting the visibility server. (#9863, @Nilsachy)
    - VisibilityOnDemand: Introduce a new configuration type: "VisibilityServer" which allows passing custom "VisibilityServerConfiguration" limited to BindAddress and BindPort as a first iteration. Removing the deprecated "visibility-server-port" flag. (#9850, @Nilsachy)
    
    - Add documentation for common Grafana queries to monitor Kueue metrics. (#8968, @IrvingMg)
    
    - ElasticJobs: fix the temporary double-counting of quota during workload replacement.
      In particular it was causing double-counting of quota requests for unchanged PodSets. (#9322, @benkermani)
    - FailureRecoveryPolicy: forcefully delete stuck pods (without grace period) in addition to transitioning them
      to the `Failed` phase. This fixes a scenario where foreground propagating deletions were blocked by a stuck pod. (#9651, @kshalot)
    - FairSharing: Fix `FairSharingPrioritizeNonBorrowing` to check per-flavor borrowing at every hierarchy level in hierarchical cohorts, not just at the ClusterQueue level. (#10149, @mukund-wayve)
    - FairSharing: workloads fitting within their ClusterQueue's nominal quota are now preferred over workloads that require borrowing, preventing heavy borrowing on one flavor from deprioritizing a CQ's nominal entitlement on another flavor. (#9484, @mukund-wayve)
    - Fix a bug where finished or deactivated workloads blocked ClusterQueue deletion and finalizer removal. (#8919, @sohankunkerkar)
    - Fix non-deterministic workload ordering in ClusterQueue by adding UID tie-breaker to queue ordering function. (#9101, @sohankunkerkar)
    - Fix serverName substitution in kustomize prometheus ServiceMonitor TLS patch for cert-manager deployments. (#9180, @IrvingMg)
    - Fixed invalid field name in the `ClusterQueue` printer columns. The "Cohort" column will now correctly display the assigned cohort in kubectl, k9s, and other UI tools instead of being blank. (#9394, @polinasand)
    - Fixed the bug that prevented managing workloads with duplicated environment variable names in initContainers. This issue manifested when creating the Workload via the API. (#9118, @monabil08)
    - FlavorFungability: fix the bug that the semantics for the `flavorFungability.preference` enum values
      (ie. PreemptionOverBorrowing and BorrowingOverPreemption) were swapped. (#9464, @tenzen-y)
    - In fair sharing preemption, bypass DRS strategy gates when the preemptor ClusterQueue is within nominal quota for contested resources, allowing preemption even if the CQ's aggregate DRS is high due to borrowing on other flavors. (#9494, @mukund-wayve)
    - Kueueviz: fetch Cohort CRD directly, instead of deriving from ClusterQueues (#9719, @samzong)
    - LeaderWorkerSet: Fix the bug where rolling updates with maxSurge could get stuck. (#8801, @PannagaRao)
    - LeaderWorkerSet: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#9898, @mbobrovskyi)
    - LeaderWorkerSet: Fixed bug that doesn't allow to delete Pod after LeaderWorkerSet delete (#8862, @mbobrovskyi)
    - LeaderWorkerSet: fix an occasional race condition resulting in workload deletion getting stuck during scale down. (#9135, @PannagaRao)
    - LeaderWorkerSet: fix workload recreation delay during rolling updates by watching for workload deletions. (#9631, @PannagaRao)
    - Metrics certificate is now reloaded when certificate data is updated. (#9071, @MaysaMacedo)
    - MultiKueue & ElasticJobs: fix the bug that the new size of a Job was not reflected on the worker cluster. (#9044, @ichekrygin)
    - MultiKueue: Enable AllowWatchBookmarks for remote client watches to prevent idle watch connections from being terminated by HTTP proxies with idle timeouts (e.g., Cloudflare 524 errors). (#9968, @trilamsr)
    - MultiKueue: Fix a bug that the remote Job object was occasionally left by MultiKueue GC,
      even when the corresponding Job object on the management cluster was deleted.
      This issue was observed for LeaderWorkerSet. (#9201, @sohankunkerkar)
    - MultiKueue: for the StatefulSet integration copy the entire StatefulSet onto the worker clusters. This allows
      for proper management (and replacements) of Pods on the worker clusters. (#9344, @IrvingMg)
    - Observability: Fix Prometheus ServiceMonitor selector and RBAC to enable metrics scraping. (#8977, @IrvingMg)
    - Observability: Fix missing "replica-role" in the logs from the NonTasUsageReconciler. (#9433, @IrvingMg)
    - Observability: Fix missing replica_role=leader gauge metrics after HA role transition. (#9487, @IrvingMg)
    - Observability: Fix the stale "replica-role" value in scheduler logs after leader election. (#9429, @IrvingMg)
    - Observability: Fixed a bug where workloads that finished before a Kueue restart were not tracked in the gauge metrics for finished workloads. (#8818, @mbobrovskyi)
    - Observability: do not use "error" for logging when an update request fails because the underlying object was modified
      concurrently. Now we use V3 logging level for such cases and don't print stracktrace.
    
      This is an example log message: "Operation cannot be fulfilled on podtemplates \"job\": the object has been modified;
      please apply your changes to the latest version and try again" (#8708, @dkaluza)
    - Observability: fix the bug that the "replica-role" (leader / follower) log decorator was missing in the log lines output by
      the  webhooks for LeaderWorkerSet and StatefulSet . (#8815, @mszadkow)
    - PodIntegration: Fix the bug that Kueue would occasionally remove the custom finalizers when
      removing the `kueue.x-k8s.io/managed` finalizer. (#3912, @mykysha)
    - RayJob integration: Make RayJob top level workload managed by Kueue when autoscaling via
      ElasticJobsViaWorkloadSlices is enabled.
    
      If you are an alpha user of the ElasticJobsViaWorkloadSlices feature for RayJobs, then upgrading Kueue may impact running live jobs which have autoscaling / workload slicing enabled. For example, if you upgrade Kueue, before
      scaling-up completes,  the new pods will be stuck in SchedulingGated state. (#8341, @hiboyang)
    - RayJob integration: fix the autosaling scenarios when using ElasticJobsViaWorkloadSlices. In particular when
      two consecutive scale ups happen. (#9960, @hiboyang)
    - RoleTracker: fix missing replica-role in logs for LWS, StatefulSet, and MultiKueue handlers. (#9445, @IrvingMg)
    - Scheduling: Fix a BestEffortFIFO performance issue where many equivalent workloads could
      prevent the scheduler from reaching schedulable workloads deeper in the queue. Kueue now
      skips redundant evaluation by bulk-moving same-hash workloads to inadmissible when one
      representative is categorized as NoFit. (#9698, @sohankunkerkar)
    - Scheduling: Fix a race where updated workload priority could remain stuck in the inadmissible queue and delay rescheduling. (#9661, @sohankunkerkar)
    - Scheduling: Fix that the Kueue's scheduler could issue duplicate preemption requests and events for the same workload. (#9437, @sohankunkerkar)
    - Scheduling: Fix the bug where inadmissible workloads would be re-queued too frequently at scale.
      This resulted in excessive processing, lock contention, and starvation of workloads deeper in the queue.
      The fix is to throttle the process with a batch period of 1s per CQ or Cohort. (#9232, @gabesaba)
    - Scheduling: Fixed a race condition where a workload could simultaneously exist in the scheduler's heap
      and the "inadmissible workloads" list. This fix prevents unnecessary scheduler cycles and prevents temporary
      double counting for the metric of pending workloads. (#9598, @sohankunkerkar)
    - Scheduling: fix the bug that scheduler could get stuck trying to preempt a workload due to the corruption of the
      in-memory state tracking the pending preemptions (called preemptionExpectations). (#10185, @mimowo)
    - Scheduling: fix the issue that scheduler could indefinitely try re-queueing a workload which was once
      inadmissible, but is admissible after an update. The issue affected workloads which don't specify
      resource requests explicitly, but rely on defaulting based on limits. (#9894, @mimowo)
    - Scheduling: fixed SchedulingEquivalenceHashing so equivalent workloads that become inadmissible through
      the preemption path with no candidates are also covered by the mechanism.
    
      As a safety measure while the broader fix is validated, the beta SchedulingEquivalenceHashing feature gate
      is temporarily disabled by default. (#10001, @mimowo)
    - StatefulSet integration: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#9897, @mbobrovskyi)
    - StatefulSet integration: fix the bug that when using `generateName` the Workload names generated
      for two different StatefulSets would conflict, not allowing to run the second StatefulSet. (#9091, @IrvingMg)
    - Strip managedFields from informer cache via DefaultTransform to reduce memory footprint on large clusters. (#10078, @jzhaojieh)
    - TAS: Fix a bug that LeaderWorkerSet with multiple PodTemplates (`.spec.leaderWorkerTemplate.leaderTemplate` and `.spec.leaderWorkerTemplate.workerTemplate`), Pod indexes are not correctly evaluated during rank-based ordering assignments. (#8685, @tenzen-y)
    - TAS: Fix a bug that TAS ignored resources excluded by excludeResourcePrefixes for node placement. (#8865, @sohankunkerkar)
    - TAS: Fix a bug where preemption with multiple resources sometimes fails (#10193, @pajakd)
    - TAS: Fix nil pointer panic in TAS node reconciler when unadmitted workloads exist in the cluster. (#10036, @kannon92)
    - TAS: Fix performance bug where snapshotting would take very long due to List and DeepCopy
      of all Nodes. Now the cached set of nodes is maintained in event-driven fashion. (#9712, @mbobrovskyi)
    - TAS: Fixed a bug that pending workloads could be stuck, not being considered by the Kueue's scheduler,
      after the restart of Kueue. The workloads would be considered for scheduling again after any update to their
      ClusterQueue. (#9029, @sohankunkerkar)
    - TAS: Fixed a bug where pods could become stuck in a `Pending` state during node replacement.
      This may occur when a node gets tainted or `NotReady` after the topology assignment phase, but before
      the pods are ungated. (#9615, @j-skiba)
    - TAS: Improved the performance of the node_controller Reconcile loop by introducing a new field indexer for Workloads. (#10042, @j-skiba)
    - TAS: Workloads that require TAS but have a PodSet with a failed TAS request (e.g., more than one flavor assigned) are correctly rejected at admission with a clear Pending reason and message, rather than being admitted without TopologyAssignment. (#8945, @zhifei92)
    - TAS: fix a bug where NodeHotSwap may assign a Pod, based on rank-ordering, to a node which is already
      occupied by another running Pod. (#9211, @j-skiba)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, after Kueue restart, responsible for NodeHotSwap and ProvisioningRequests. (#10158, @mimowo)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, responsible for NodeHotSwap and ProvisioningRequests. (#9939, @mimowo)
    - TAS: support ResourceTransformations to define "virtual" resources which allow putting a cap on
      some "virtual" credits across multiple-flavors, see [sharing quotas](https://kueue.sigs.k8s.io/docs/tasks/manage/share_quotas_across_flavors/) for quota-only resources.
      This is considered a bug since there was no validation preventing such configuration before. (#8963, @mbobrovskyi)
    - VisibilityOnDemand: Fix Visibility API OpenAPI schema generation to prevent schema resolution errors when visibility v1beta1/v1beta2 APIServices are installed.
    
      The visibility schema issues result in the following error when re-applying the manifest for Kueue 0.16.0:
      `failed to load open api schema while syncing cluster cache: error getting openapi resources: SchemaError(sigs.k8s.io/kueue/apis/visibility/v1beta1.PendingWorkloadsSummary.items): unknown model in reference: "sigs.k8s.io~1kueue~1apis~1visibility~1v1beta1.PendingWorkload"` (#8885, @vladikkuzn)
    - VisibilityOnDemand: Fix non-deterministic workload ordering with UsageBasedAdmissionFairSharing enabled. (#9899, @sohankunkerkar)
    - VisibilityOnDemand: Fix the bug that when running Kueue with the custom `--kubeconfig` flag the visibility server
      fails to initialize, because the custom value of the flag is not propagated to it, leading to errors such as:
      "Unable to create and start visibility server","error":"unable to apply VisibilityServerOptions: failed to get delegated authentication kubeconfig:  failed to get delegated authentication kubeconfig: ..." (#9619, @Nilsachy)
    
    - KueueViz: It switches to the v1beta2 API (#8784, @mbobrovskyi)
    - Observability: Increased log level from 3 to 5 for TAS node filtering-related log events. (#10017, @mwysokin)
    - Observability: Update the name of cohort metric from `kueue_cohort_nominal_quota` to `kueue_cohort_subtree_quota`. (#9787, @mszadkow)
    - Scheduling: Reduced the maximum sleep time between scheduling cycles from 100ms to 10ms.
      This change fixes a bug where the 100ms delay was excessive on busy systems, in which completed
      workloads can trigger requeue events every second. In such cases, the scheduler could spend up to 10%
      of the time between requeue events sleeping. Reducing the delay allows the scheduler to spend more time
      progressing through the ClusterQueue heap between requeue events. (#9697, @mimowo)
    - TAS: Remove the deprecated TASProfileLeastFreeCapacity feature gate. (#9298, @kannon92)
    - V1beta2: Optimized migration script to allow migration of namespaced resources by namespace. (#9340, @mbobrovskyi)
    
    
  • v0.16.4

    Changes since `v0.16.3`:
    
    - Helm: Allow setting log level (#9944, @gabesaba)
    - TAS: Extend the support for handling NoSchedule taints when the TASReplaceNodeOnNodeTaints feature gate is enabled. (#10003, @j-skiba)
    - VisibilityOnDemand: Introduce a new Kueue deployment argument, --visibility-server-port, which allows passing custom port when starting the visibility server. (#9976, @Nilsachy)
    
    - LWS integration: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#10010, @mbobrovskyi)
    - MultiKueue: Enable AllowWatchBookmarks for remote client watches to prevent idle watch connections from being terminated by HTTP proxies with idle timeouts (e.g., Cloudflare 524 errors). (#9990, @trilamsr)
    - Scheduling: fix the issue that scheduler could indefinitely try re-queueing a workload which was once
      inadmissible, but is admissible after an update. The issue affected workloads which don't specify
      resource requests explicitly, but rely on defaulting based on limits. (#9913, @mimowo)
    - Scheduling: fixed SchedulingEquivalenceHashing so equivalent workloads that become inadmissible through
      the preemption path with no candidates are also covered by the mechanism.
    
      As a safety measure while the broader fix is validated, the beta SchedulingEquivalenceHashing feature gate
      is temporarily disabled by default. (#10007, @mimowo)
    - StatefulSet integration: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#9902, @mbobrovskyi)
    - TAS: Fixed a bug where pods could become stuck in a `Pending` state during node replacement.
      This may occur when a node gets tainted or `NotReady` after the topology assignment phase, but before
      the pods are ungated. (#9978, @j-skiba)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, responsible for NodeHotSwap and ProvisioningRequests. (#9947, @mimowo)
    - VisibilityOnDemand: Fix non-deterministic workload ordering with UsageBasedAdmissionFairSharing enabled. (#9955, @sohankunkerkar)
    
    - Restore the FlavorFungibilityImplicitPreferenceDefault feature gate. (#9991, @mimowo)
    
  • v0.15.7

    Changes since `v0.15.6`:
    
    - Helm: Allow setting log level (#9944, @gabesaba)
    - TAS: Extend the support for handling NoSchedule taints when the TASReplaceNodeOnNodeTaints feature gate is enabled. (#10002, @j-skiba)
    - VisibilityOnDemand: Introduce a new Kueue deployment argument, --visibility-server-port, which allows passing custom port when starting the visibility server. (#9975, @Nilsachy)
    
    - LWS integration: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#10011, @mbobrovskyi)
    - MultiKueue: Enable AllowWatchBookmarks for remote client watches to prevent idle watch connections from being terminated by HTTP proxies with idle timeouts (e.g., Cloudflare 524 errors). (#9989, @trilamsr)
    - Scheduling: fix the issue that scheduler could indefinitely try re-queueing a workload which was once
      inadmissible, but is admissible after an update. The issue affected workloads which don't specify
      resource requests explicitly, but rely on defaulting based on limits. (#9912, @mimowo)
    - Scheduling: fixed SchedulingEquivalenceHashing so equivalent workloads that become inadmissible through
      the preemption path with no candidates are also covered by the mechanism.
    
      As a safety measure while the broader fix is validated, the beta SchedulingEquivalenceHashing feature gate
      is temporarily disabled by default. (#10008, @mimowo)
    - StatefulSet integration: Fixed a bug that the `kueue.x-k8s.io/job-uid` label was not set on the workloads. (#9903, @mbobrovskyi)
    - TAS: Fixed a bug where pods could become stuck in a `Pending` state during node replacement.
      This may occur when a node gets tainted or `NotReady` after the topology assignment phase, but before
      the pods are ungated. (#9977, @j-skiba)
    - TAS: fix the bug that workloads which only specify resource limits, without requests, are not able to perform
      the second-pass scheduling correctly, responsible for NodeHotSwap and ProvisioningRequests. (#9948, @mimowo)
    - VisibilityOnDemand: Fix non-deterministic workload ordering with UsageBasedAdmissionFairSharing enabled. (#9956, @sohankunkerkar)
    
  • v0.15.6

    Changes since `v0.15.5`:
    
    - Observability: Add scheduler logs for the scheduling cycle phase boundaries. (#9815, @sohankunkerkar)
    - Scheduling: Add the alpha SchedulerLongRequeueInterval feature gate (disabled by default) to increase the
      inadmissible workload requeue interval from 1s to 10s. This may help to mitigate, on large environments with
      many pending workloads, issues with frequent re-queues that prevent the scheduler from reaching schedulable
      workloads deeper in the queue and result in constant re-evaluation of the same top workloads. (#9820, @mbobrovskyi)
    - Scheduling: Add the alpha SchedulerTimestampPreemptionBuffer feature gate (disabled by default) to use
      5-minute buffer so that workloads with scheduling timestamps within this buffer don’t preempt each other
      based on LowerOrNewerEqualPriority. (#9838, @mbobrovskyi)
    
    - FailureRecoveryPolicy: forcefully delete stuck pods (without grace period) in addition to transitioning them
      to the `Failed` phase. This fixes a scenario where foreground propagating deletions were blocked by a stuck pod. (#9672, @kshalot)
    - Fix a race where updated workload priority could remain stuck in the inadmissible queue and delay rescheduling. (#9661, @sohankunkerkar)
    - In fair sharing preemption, bypass DRS strategy gates when the preemptor ClusterQueue is within nominal quota for contested resources, allowing preemption even if the CQ's aggregate DRS is high due to borrowing on other flavors. (#9593, @mukund-wayve)
    - Kueueviz: fetch Cohort CRD directly, instead of deriving from ClusterQueue (#9744, @samzong)
    - LeaderWorkerSet: fix workload recreation delay during rolling updates by watching for workload deletions. (#9631, @PannagaRao)
    - Scheduling: Fix a BestEffortFIFO performance issue where many equivalent workloads could
      prevent the scheduler from reaching schedulable workloads deeper in the queue. Kueue now
      skips redundant evaluation by bulk-moving same-hash workloads to inadmissible when one
      representative is categorized as NoFit. (#9698, @sohankunkerkar)
    - Scheduling: Fix that the Kueue's scheduler could issue duplicate preemption requests and events for the same workload. (#9641, @sohankunkerkar)
    - Scheduling: Fixed a race condition where a workload could simultaneously exist in the scheduler's heap
      and the "inadmissible workloads" list. This fix prevents unnecessary scheduler cycles and prevents temporary
      double counting for the metric of pending workloads. (#9639, @sohankunkerkar)
    - Scheduling: Reduced the maximum sleep time between scheduling cycles from 100ms to 10ms.
      This change fixes a bug where the 100ms delay was excessive on busy systems, in which completed
      workloads can trigger requeue events every second. In such cases, the scheduler could spend up to 10%
      of the time between requeue events sleeping. Reducing the delay allows the scheduler to spend more time
      progressing through the ClusterQueue heap between requeue events. (#9762, @mimowo)
    - StatefulSet integration: fix the bug that when using `generateName` the Workload names generated
      for two different StatefulSets would conflict, not allowing to run the second StatefulSet. (#9695, @IrvingMg)
    - TAS: Fix performance bug where snapshotting would take very long due to List and DeepCopy
      of all Nodes. Now the cached set of nodes is maintained in event-driven fashion. (#9786, @mbobrovskyi)
    - TAS: support ResourceTransformations to define "virtual" resources which allow putting a cap on
      some "virtual" credits across multiple-flavors, see [sharing quotas](https://kueue.sigs.k8s.io/docs/tasks/manage/share_quotas_across_flavors/) for quota-only resources.
      This is considered a bug since there was no validation preventing such configuration before. (#9691, @mbobrovskyi)
    - VisibilityOnDemand: Fix the bug that when running Kueue with the custom `--kubeconfig` flag the visibility server
      fails to initialize, because the custom value of the flag is not propagated to it, leading to errors such as:
      "Unable to create and start visibility server","error":"unable to apply VisibilityServerOptions: failed to get delegated authentication kubeconfig:  failed to get delegated authentication kubeconfig: ..." (#9806, @Nilsachy)
    
  • v0.16.3

    Changes since `v0.16.2`:
    
    - Observability: Add scheduler logs for the scheduling cycle phase boundaries. (#9813, @sohankunkerkar)
    - Scheduling: Add the alpha SchedulerLongRequeueInterval feature gate (disabled by default) to increase the
      inadmissible workload requeue interval from 1s to 10s. This may help to mitigate, on large environments with
      many pending workloads, issues with frequent re-queues that prevent the scheduler from reaching schedulable
      workloads deeper in the queue and result in constant re-evaluation of the same top workloads. (#9819, @mbobrovskyi)
    - Scheduling: Add the alpha SchedulerTimestampPreemptionBuffer feature gate (disabled by default) to use
      5-minute buffer so that workloads with scheduling timestamps within this buffer don’t preempt each other
      based on LowerOrNewerEqualPriority. (#9837, @mbobrovskyi)
    
    - FailureRecoveryPolicy: forcefully delete stuck pods (without grace period) in addition to transitioning them
      to the `Failed` phase. This fixes a scenario where foreground propagating deletions were blocked by a stuck pod. (#9673, @kshalot)
    - Fix a race where updated workload priority could remain stuck in the inadmissible queue and delay rescheduling. (#9678, @sohankunkerkar)
    - In fair sharing preemption, bypass DRS strategy gates when the preemptor ClusterQueue is within nominal quota for contested resources, allowing preemption even if the CQ's aggregate DRS is high due to borrowing on other flavors. (#9592, @mukund-wayve)
    - Kueueviz: fetch Cohort CRD directly, instead of deriving from ClusterQueues (#9720, @samzong)
    - LeaderWorkerSet: fix workload recreation delay during rolling updates by watching for workload deletions. (#9680, @PannagaRao)
    - Observability: Fix missing replica_role=leader gauge metrics after HA role transition. (#9794, @IrvingMg)
    - Scheduling: Fix a BestEffortFIFO performance issue where many equivalent workloads could
      prevent the scheduler from reaching schedulable workloads deeper in the queue. Kueue now
      skips redundant evaluation by bulk-moving same-hash workloads to inadmissible when one
      representative is categorized as NoFit. (#9698, @sohankunkerkar)
    - Scheduling: Fix that the Kueue's scheduler could issue duplicate preemption requests and events for the same workload. (#9627, @sohankunkerkar)
    - Scheduling: Fixed a race condition where a workload could simultaneously exist in the scheduler's heap
      and the "inadmissible workloads" list. This fix prevents unnecessary scheduler cycles and prevents temporary
      double counting for the metric of pending workloads. (#9638, @sohankunkerkar)
    - Scheduling: Reduced the maximum sleep time between scheduling cycles from 100ms to 10ms.
      This change fixes a bug where the 100ms delay was excessive on busy systems, in which completed
      workloads can trigger requeue events every second. In such cases, the scheduler could spend up to 10%
      of the time between requeue events sleeping. Reducing the delay allows the scheduler to spend more time
      progressing through the ClusterQueue heap between requeue events. (#9763, @mimowo)
    - StatefulSet integration: fix the bug that when using `generateName` the Workload names generated
      for two different StatefulSets would conflict, not allowing to run the second StatefulSet. (#9693, @IrvingMg)
    - TAS: Fix performance bug where snapshotting would take very long due to List and DeepCopy
      of all Nodes. Now the cached set of nodes is maintained in event-driven fashion. (#9783, @mbobrovskyi)
    - TAS: support ResourceTransformations to define "virtual" resources which allow putting a cap on
      some "virtual" credits across multiple-flavors, see [sharing quotas](https://kueue.sigs.k8s.io/docs/tasks/manage/share_quotas_across_flavors/) for quota-only resources.
      This is considered a bug since there was no validation preventing such configuration before. (#9688, @mbobrovskyi)
    - VisibilityOnDemand: Fix the bug that when running Kueue with the custom `--kubeconfig` flag the visibility server
      fails to initialize, because the custom value of the flag is not propagated to it, leading to errors such as:
      "Unable to create and start visibility server","error":"unable to apply VisibilityServerOptions: failed to get delegated authentication kubeconfig:  failed to get delegated authentication kubeconfig: ..." (#9805, @Nilsachy)
    
  • v0.15.5

    Changes since `v0.15.4`:
    
    - KueueViz Helm: Add podSecurityContext and containerSecurityContext configuration options to KueueViz Helm chart for restricted pod security profile compliance (#9320, @ziadmoubayed)
    - Observability: Increased the maximum finite bucket boundary for admission_wait_time_seconds histogram from ~2.84 hours to ~11.3 hours for better observability of long queue times. (#9530, @mukund-wayve)
    - TAS: Introduce the TASReplaceNodeOnNodeTaints feature gate (alpha) to allow TAS workloads to be evicted or replaced when a node is tainted with NoExecute. (#9441, @j-skiba)
    
    - ElasticJobs: fix the temporary double-counting of quota during workload replacement.
      In particular it was causing double-counting of quota requests for unchanged PodSets. (#9365, @benkermani)
    - FairSharing: workloads fitting within their ClusterQueue's nominal quota are now preferred over workloads that require borrowing, preventing heavy borrowing on one flavor from deprioritizing a CQ's nominal entitlement on another flavor. (#9533, @mukund-wayve)
    - Fix non-deterministic workload ordering in ClusterQueue by adding UID tie-breaker to queue ordering function. (#9164, @sohankunkerkar)
    - Fix serverName substitution in kustomize prometheus ServiceMonitor TLS patch for cert-manager deployments. (#9190, @IrvingMg)
    - Fixed invalid field name in the `ClusterQueue` printer columns. The "Cohort" column will now correctly display the assigned cohort in kubectl, k9s, and other UI tools instead of being blank. (#9447, @polinasand)
    - Fixed the bug that prevented managing workloads with duplicated environment variable names in initContainers. This issue manifested when creating the Workload via the API. (#9127, @monabil08)
    - LeaderWorkerSet: fix an occasional race condition resulting in workload deletion getting stuck during scale down. (#9135, @PannagaRao)
    - MultiKueue: Fix a bug that the remote Job object was occasionally left by MultiKueue GC,
      even when the corresponding Job object on the management cluster was deleted.
      This issue was observed for LeaderWorkerSet. (#9309, @sohankunkerkar)
    - Scheduling: Fix the bug where inadmissible workloads would be re-queued too frequently at scale.
      This resulted in excessive processing, lock contention, and starvation of workloads deeper in the queue.
      The fix is to throttle the process with a batch period of 1s per CQ or Cohort. (#9232, @gabesaba)
    - TAS: Fix a bug that LeaderWorkerSet with multiple PodTemplates (`.spec.leaderWorkerTemplate.leaderTemplate` and `.spec.leaderWorkerTemplate.workerTemplate`), Pod indexes are not correctly evaluated during rank-based ordering assignments. (#9369, @tenzen-y)
    - TAS: fix a bug where NodeHotSwap may assign a Pod, based on rank-ordering, to a node which is already
      occupied by another running Pod. (#9283, @j-skiba)
    
  • v0.16.2

    Changes since `v0.16.1`:
    
    - KueueViz Helm: Add podSecurityContext and containerSecurityContext configuration options to KueueViz Helm chart for restricted pod security profile compliance (#9319, @ziadmoubayed)
    - Observability: Increased the maximum finite bucket boundary for admission_wait_time_seconds histogram from ~2.84 hours to ~11.3 hours for better observability of long queue times. (#9507, @mukund-wayve)
    
    - ElasticJobs: fix the temporary double-counting of quota during workload replacement.
      In particular it was causing double-counting of quota requests for unchanged PodSets. (#9364, @benkermani)
    - FairSharing: workloads fitting within their ClusterQueue's nominal quota are now preferred over workloads that require borrowing, preventing heavy borrowing on one flavor from deprioritizing a CQ's nominal entitlement on another flavor. (#9532, @mukund-wayve)
    - Fix non-deterministic workload ordering in ClusterQueue by adding UID tie-breaker to queue ordering function. (#9140, @sohankunkerkar)
    - Fix serverName substitution in kustomize prometheus ServiceMonitor TLS patch for cert-manager deployments. (#9188, @IrvingMg)
    - Fixed invalid field name in the `ClusterQueue` printer columns. The "Cohort" column will now correctly display the assigned cohort in kubectl, k9s, and other UI tools instead of being blank. (#9422, @polinasand)
    - Fixed the bug that prevented managing workloads with duplicated environment variable names in initContainers. This issue manifested when creating the Workload via the API. (#9126, @monabil08)
    - FlavorFungability: fix the bug that the semantics for the `flavorFungability.preference` enum values
      (ie. PreemptionOverBorrowing and BorrowingOverPreemption) were swapped. (#9486, @tenzen-y)
    - LeaderWorkerSet: fix an occasional race condition resulting in workload deletion getting stuck during scale down. (#9135, @PannagaRao)
    - MultiKueue: Fix a bug that the remote Job object was occasionally left by MultiKueue GC,
      even when the corresponding Job object on the management cluster was deleted.
      This issue was observed for LeaderWorkerSet. (#9310, @sohankunkerkar)
    - MultiKueue: for the StatefulSet integration copy the entire StatefulSet onto the worker clusters. This allows
      for proper management (and replacements) of Pods on the worker clusters. (#9539, @IrvingMg)
    - Observability: Fix missing "replica-role" in the logs from the NonTasUsageReconciler. (#9456, @IrvingMg)
    - Observability: Fix the stale "replica-role" value in scheduler logs after leader election. (#9431, @IrvingMg)
    - Scheduling: Fix the bug where inadmissible workloads would be re-queued too frequently at scale.
      This resulted in excessive processing, lock contention, and starvation of workloads deeper in the queue.
      The fix is to throttle the process with a batch period of 1s per CQ or Cohort. (#9490, @gabesaba)
    - TAS: Fix a bug that LeaderWorkerSet with multiple PodTemplates (`.spec.leaderWorkerTemplate.leaderTemplate` and `.spec.leaderWorkerTemplate.workerTemplate`), Pod indexes are not correctly evaluated during rank-based ordering assignments. (#9368, @tenzen-y)
    - TAS: fix a bug where NodeHotSwap may assign a Pod, based on rank-ordering, to a node which is already
      occupied by another running Pod. (#9282, @j-skiba)
    
  • v0.15.4

    Changes since `v0.15.3`:
    
    - KueueViz backend and frontend resource requests/limits are now configurable via Helm values (kueueViz.backend.resources and kueueViz.frontend.resources). (#8982, @david-gang)
    
    - Fix a bug where finished or deactivated workloads blocked ClusterQueue deletion and finalizer removal. (#8940, @sohankunkerkar)
    - LeaderWorkerSet: Fix the bug where rolling updates with maxSurge could get stuck. (#8887, @PannagaRao)
    - LeaderWorkerSet: Fixed bug that doesn't allow to delete Pod after LeaderWorkerSet delete (#8883, @mbobrovskyi)
    - Metrics certificate is now reloaded when certificate data is updated. (#9100, @MaysaMacedo)
    - MultiKueue & ElasticJobs: fix the bug that the new size of a Job was not reflected on the worker cluster. (#9044, @ichekrygin)
    - Observability: Fix Prometheus ServiceMonitor selector and RBAC to enable metrics scraping. (#8979, @IrvingMg)
    - PodIntegration: Fix the bug that Kueue would occasionally remove the custom finalizers when
      removing the `kueue.x-k8s.io/managed` finalizer. (#8905, @mykysha)
    - RayJob integration: Make RayJob top level workload managed by Kueue when autoscaling via
      ElasticJobsViaWorkloadSlices is enabled.
    
      If you are an alpha user of the ElasticJobsViaWorkloadSlices feature for RayJobs, then upgrading Kueue may impact running live jobs which have autoscaling / workload slicing enabled. For example, if you upgrade Kueue, before
      scaling-up completes,  the new pods will be stuck in SchedulingGated state. After Kueue version update, cluster admins probably should migrate from the old RayJob with ElasticJobsViaWorkloadSlices to the new one (recreating). (#9070, @mimowo)
    - TAS: Fix a bug that TAS ignored resources excluded by excludeResourcePrefixes for node placement. (#8991, @sohankunkerkar)
    - TAS: Fixed a bug that pending workloads could be stuck, not being considered by the Kueue's scheduler,
      after the restart of Kueue. The workloads would be considered for scheduling again after any update to their
      ClusterQueue. (#9057, @sohankunkerkar)
    - TAS: Fixed handling of the scenario where a Topology instance is re-created (for example, to add a new Topology level).
      Previously, this would cause cache corruption, leading to issues such as:
      1. Scheduling a workload on nodes that are fully occupied by already running workloads.
      2. Scheduling two or more pods of the same workload on the same node (even when the node cannot host both). (#8765, @mimowo)
    - TAS: Lower verbosity of expected missing pod index label logs. (#8702, @IrvingMg)
    
  • v0.16.1

    Changes since `v0.16.0`:
    
    - KueueViz backend and frontend resource requests/limits are now configurable via Helm values (kueueViz.backend.resources and kueueViz.frontend.resources). (#8981, @david-gang)
    
    - Fix Visibility API OpenAPI schema generation to prevent schema resolution errors when visibility v1beta1/v1beta2 APIServices are installed.
    
      The visibility schema issues result in the following error when re-applying the manifest for Kueue 0.16.0:
      `failed to load open api schema while syncing cluster cache: error getting openapi resources: SchemaError(sigs.k8s.io/kueue/apis/visibility/v1beta1.PendingWorkloadsSummary.items): unknown model in reference: "sigs.k8s.io~1kueue~1apis~1visibility~1v1beta1.PendingWorkload"` (#8901, @vladikkuzn)
    - Fix a bug where finished or deactivated workloads blocked ClusterQueue deletion and finalizer removal. (#8936, @sohankunkerkar)
    - LeaderWorkerSet: Fix the bug where rolling updates with maxSurge could get stuck. (#8886, @PannagaRao)
    - LeaderWorkerSet: Fixed bug that doesn't allow to delete Pod after LeaderWorkerSet delete (#8882, @mbobrovskyi)
    - Metrics certificate is now reloaded when certificate data is updated. (#9099, @MaysaMacedo)
    - MultiKueue & ElasticJobs: fix the bug that the new size of a Job was not reflected on the worker cluster. (#9055, @ichekrygin)
    - Observability: Fix Prometheus ServiceMonitor selector and RBAC to enable metrics scraping. (#8980, @IrvingMg)
    - Observability: Fixed a bug where workloads that finished before a Kueue restart were not tracked in the gauge metrics for finished workloads. (#8827, @mbobrovskyi)
    - Observability: fix the bug that the "replica-role" (leader / follower) log decorator was missing in the log lines output by
      the  webhooks for LeaderWorkerSet and StatefulSet . (#8820, @mszadkow)
    - PodIntegration: Fix the bug that Kueue would occasionally remove the custom finalizers when
      removing the `kueue.x-k8s.io/managed` finalizer. (#8903, @mykysha)
    - RayJob integration: Make RayJob top level workload managed by Kueue when autoscaling via
      ElasticJobsViaWorkloadSlices is enabled.
    
      If you are an alpha user of the ElasticJobsViaWorkloadSlices feature for RayJobs, then upgrading Kueue may impact running live jobs which have autoscaling / workload slicing enabled. For example, if you upgrade Kueue, before
      scaling-up completes,  the new pods will be stuck in SchedulingGated state. (#9039, @hiboyang)
    - TAS: Fix a bug that TAS ignored resources excluded by excludeResourcePrefixes for node placement. (#8990, @sohankunkerkar)
    - TAS: Fixed a bug that pending workloads could be stuck, not being considered by the Kueue's scheduler,
      after the restart of Kueue. The workloads would be considered for scheduling again after any update to their
      ClusterQueue. (#9056, @sohankunkerkar)
    
    - KueueViz: It switches to the v1beta2 API (#8804, @mbobrovskyi)
    
  • v0.16.0

    Changes since `v0.15.0`:
    
    - Removed FlavorFungibilityImplicitPreferenceDefault feature gate.
    
      Configure flavor selection preference using the ClusterQueue field `spec.flavorFungibility.preference` instead. (#8134, @mbobrovskyi)
    - The short name "wl" for workloads has been removed to avoid potential conflicts with the in-tree workload object coming into Kubernetes.
    
      If you rely on "wl" in your "kubectl" command, you need to migrate to other short names ("kwl", "kueueworkload") or a full resource name ("workloads.kueue.x-k8s.io"). (#8472, @kannon92)
    
    - Add field multiplyBy for ResourceTransformation (#7599, @calvin0327)
    - Kueue v0.16 starts using `v1beta2` API version for storage. The new API brings an optimization for the internal representation of TopologyAssignment (in WorkloadStatus) which allows using TAS for larger workloads (under the assumptions described in issue #7220, it allows to increase the maximal workload size from approx. 20k to approx. 60k nodes).
    
      All new Kueue objects created after the upgrade will be stored using `v1beta2`.
    
      However, existing objects are only auto-converted to the new storage version by Kubernetes during a write request. This means that Kueue API objects that rarely receive updates - such as Topologies, ResourceFlavors, or long-running Workloads - may remain in the older `v1beta1` format indefinitely.
    
      Ensuring all objects are migrated to `v1beta2` is essential for compatibility with future Kueue upgrades. We tentatively plan to discontinue support for `v1beta1` in version 0.18.
    
      To ensure your environment is consistent, we recommend running the following migration script after installing Kueue v0.16 and verifying cluster stability: https://raw.githubusercontent.com/kubernetes-sigs/kueue/main/hack/migrate-to-v1beta2.sh. The script triggers a "no-op" update for all existing Kueue objects, forcing the API server to pass them through conversion webhooks and save them in the `v1beta2` version.
      Migration instructions (including the official script): https://github.com/kubernetes-sigs/kueue/issues/8018#issuecomment-3729056171. (#8020, @mbobrovskyi)
    - MultiKueue: Allow up to 20 clusters per MultiKueueConfig. (#8614, @IrvingMg)
    
    - CLI: Support "kwl" and "kueueworkload" as a shortname for Kueue Workloads. (#8379, @kannon92)
    - ElasticJobs: Support RayJob InTreeAutoscaling by using the ElasticJobsViaWorkloadSlices feature. (#8082, @hiboyang)
    - Enable Pod-based integrations by default (#8096, @sohankunkerkar)
    - Logs now include `replica-role` field to identify Kueue instance roles (leader/follower/standalone). (#8107, @IrvingMg)
    - MultiKueue: Add support for StatefulSet workloads (#8611, @IrvingMg)
    - MultiKueue: ClusterQueues with both MultiKueue and ProvisioningRequest admission checks are marked as inactive with reason "MultiKueueWithProvisioningRequest", as this configuration is invalid on manager clusters. (#8451, @IrvingMg)
    - MultiKueue: trigger workload eviction on the management cluster when the corresponding workload is evicted
      on the remote worker cluster. In particular this is fixing the issue with workloads using ProvisioningRequests,
      which could get stuck in a worker cluster which does not have enough capacity to ever admit the workloads. (#8477, @mszadkow)
    - Observability: Add more details (the preemptionMode) to the QuotaReserved condition message,
      and the related event, about the skipped flavors which were considered for preemption.
      Before: "Quota reserved in ClusterQueue preempt-attempts-cq, wait time since queued was 9223372037s; Flavors considered: main: on-demand(Preempt;insufficient unused quota for cpu in flavor on-demand, 1 more needed)"
      After: "Quota reserved in ClusterQueue preempt-attempts-cq, wait time since queued was 9223372037s; Flavors considered: main: on-demand(preemptionMode=Preempt;insufficient unused quota for cpu in flavor on-demand, 1 more needed)" (#8024, @mykysha)
    - Observability: Introduce the counter metrics for finished workloads: kueue_finished_workloads_total and kueue_local_queue_finished_workloads_total. (#8694, @mbobrovskyi)
    - Observability: Introduce the gauge metrics for finished workloads: kueue_finished_workloads and kueue_local_queue_finished_workloads. (#8724, @mbobrovskyi)
    - Security: Support customization (TLSMinVersion and CipherSuites) for TLS used by the Kueue's webhooks server,
      and the visibility server. (#8563, @kannon92)
    - TAS: extend the information in condition messages and events about nodes excluded from calculating the
      assignment due to various recognized reasons like: taints, node affinity, node resource constraints. (#8043, @sohankunkerkar)
    - WaitForPodsReady.recoveryTimeout now defaults to the value of waitForPodsReady.timeout when not specified. (#8493, @IrvingMg)
    
    - DRA: fix the race condition bug leading to undefined behavior due to concurrent operations
      on the Workload object, manifested by the "WARNING: DATA RACE" in test logs. (#8073, @mbobrovskyi)
    - FailureRecovery: Fix Pod Termination Controller's MaxConcurrentReconciles (#8664, @gabesaba)
    - Fix ClusterQueue deletion getting stuck when pending workloads are deleted after being assumed by the scheduler. (#8543, @sohankunkerkar)
    - Fix EnsureWorkloadSlices to finish old slice when new is admitted as replacement (#8456, @sohankunkerkar)
    - Fix `TrainJob` controller not correctly setting the `PodSet` count value based on `numNodes` for the expected number of training nodes. (#8135, @kaisoz)
    - Fix a bug that WorkloadPriorityClass value changes do not trigger Workload priority updates. (#8442, @ASverdlov)
    - Fix a performance bug as some "read-only" functions would be taking unnecessary "write" lock. (#8181, @ErikJiang)
    - Fix the race condition bug where the kueue_pending_workloads metric may not be updated to 0 after the last
      workload is admitted and there are no new workloads incoming. (#8037, @Singularity23x0)
    - Fixed a bug that Kueue's scheduler would re-evaluate and update already finished workloads, significantly
      impacting overall scheduling throughput. This re-evaluation of a finished workload would be triggered when:
      1. Kueue is restarted
      2. There is any event related to LimitRange or RuntimeClass instances referenced by the workload (#8186, @mbobrovskyi)
    - Fixed a bug where workloads requesting zero quantity of a resource not defined in the ClusterQueue were incorrectly rejected. (#8241, @IrvingMg)
    - Fixed the following bugs for the StatefulSet integration by ensuring the Workload object
      has the ownerReference to the StatefulSet:
      1. Kueue doesn't keep the StatefulSet as deactivated
      2. Kueue marks the Workload as Finished if all StatefulSet's Pods are deleted
      3. changing the "queue-name" label could occasionally result in the StatefulSet getting stuck (#4799, @mbobrovskyi)
    - HC: Avoid redundant requeuing of inadmissible workloads when multiple ClusterQueues in the same cohort hierarchy are processed. (#8441, @sohankunkerkar)
    - Integrations based on Pods: skip using finalizers on the Pods created and managed by integrations.
    
      In particular we skip setting finalizers for Pods managed by the built in Serving Workloads  Deployments,
      StatefulSets, and LeaderWorkerSets.
    
      This improves performance of suspending the workloads, and fixes occasional race conditions when a StatefulSet
      could get stuck when deactivating and re-activating in a short interval. (#8530, @mbobrovskyi)
    - JobFramework: Fixed a bug that allowed a deactivated workload to be activated. (#8424, @chengjoey)
    - Kubeflow TrainJob v2: fix the bug to prevent duplicate pod template overrides when starting the Job is retried. (#8269, @j-skiba)
    - LeaderWorkerSet: Fixed a bug that prevented deleting the workload when the LeaderWorkerSet was scaled down. (#8671, @mbobrovskyi)
    - LeaderWorkerSet: add missing RBAC configuration for editor and viewer roles to kustomize and helm. (#8513, @kannon92)
    - MultiKueue now waits for WorkloadAdmitted (instead of QuotaReserved) before deleting workloads from non-selected worker clusters. To revert to the previous behavior, disable the `MultiKueueWaitForWorkloadAdmitted` feature gate. (#8592, @IrvingMg)
    - MultiKueue via ClusterProfile: Fix the panic if the configuration for ClusterProfiles wasn't provided in the configMap. (#8071, @mszadkow)
    - MultiKueue: Fix a bug that the priority change by mutating the `kueue.x-k8s.io/priority-class` label on the management cluster is not propagated to the worker clusters. (#8464, @mbobrovskyi)
    - MultiKueue: Fixed status sync for CRD-based jobs (JobSet, Kubeflow, Ray, etc.) that was blocked while the local job was suspended. (#8308, @IrvingMg)
    - MultiKueue: fix the bug that for Pod integration the AdmissionCheck status would be kept Pending indefinitely,
      even when the Pods are already running.
    
      The analogous fix is also done for the batch/Job when the MultiKueueBatchJobWithManagedBy feature gate  is disabled. (#8189, @IrvingMg)
    - MultiKueue: fix the eviction when initiated by the manager cluster (due to eg. Preemption or WaitForPodsReady timeout). (#8151, @mbobrovskyi)
    - Observability: Revert the changes in PR https://github.com/kubernetes-sigs/kueue/pull/8599 for transitioning
      the QuotaReserved, Admitted conditions to `False` for Finished workloads. This introduced a regression,
      because users lost the useful information about the timestamp of the last transitioning of these
      conditions to True, without an API replacement to serve the information. (#8599, @mbobrovskyi)
    - ProvisioningRequest: Fixed a bug that prevented events from being updated when the AdmissionCheck state changed. (#8394, @mbobrovskyi)
    - Scheduling: fix a bug that evictions submitted by scheduler (preemptions and eviction due to TAS NodeHotSwap failing)
      could result in conflict in case of concurrent workload modification by another controller.
      This could lead to indefinite failing requests sent by scheduler in some scenarios when eviction is initiated by
      TAS NodeHotSwap. (#7933, @mbobrovskyi)
    - Scheduling: fix the bug that setting (none -> some) a workload priority class label (kueue.x-k8s.io/priority-class) was ignored. (#8480, @andrewseif)
    - TAS NodeHotSwap: fixed the bug that allows workload to requeue by scheduler even if already deleted on TAS NodeHotSwap eviction. (#8278, @mbobrovskyi)
    - TAS: Fix a bug that MPIJob with runLauncherAsWorker Pod indexes are not correctly evaluated during rank-based ordering assignments. (#8618, @tenzen-y)
    - TAS: Fix handling of admission for workloads using the LeastFreeCapacity algorithm when the  "unconstrained"
      mode is used. In that case scheduling would fail if there is at least one node in the cluster which does not have
      enough capacity to accommodate at least one Pod. (#8168, @PBundyra)
    - TAS: Fixed an issue where workloads could remain in the second-pass scheduling queue (used for integration
      or TAS with ProvisioningRequests, and for TAS Node Hot Swap) even if they no longer require to be in the queue. (#8431, @skools-here)
    - TAS: Fixed handling of the scenario where a Topology instance is re-created (for example, to add a new Topology level).
      Previously, this would cause cache corruption, leading to issues such as:
      1. Scheduling a workload on nodes that are fully occupied by already running workloads.
      2. Scheduling two or more pods of the same workload on the same node (even when the node cannot host both). (#8755, @mimowo)
    - TAS: Lower verbosity of expected missing pod index label logs. (#8689, @IrvingMg)
    - TAS: fix TAS resource flavor controller to extract only scheduling-relevant node updates to prevent unnecessary reconciliation. (#8452, @Ladicle)
    - TAS: fix a performance bug that continues reconciles of TAS ResourceFlavor (and related ClusterQueues)
      were triggered by updates to Nodes' heartbeat times. (#8342, @PBundyra)
    - TAS: fix bug that when TopologyAwareScheduling is disabled, but there is a ResourceFlavor configured with topologyName, then preemptions fail with "workload requires Topology, but there is no TAS cache information". (#8167, @zhifei92)
    - TAS: fixed performance issue due to unnecessary (empty) request by TopologyUngater (#8279, @mbobrovskyi)
    - TAS: significantly improves scheduling performance by replacing Pod listing with an event-driven
      cache for non-TAS Pods, thereby avoiding expensive DeepCopy operations during each scheduling cycle. (#8484, @gabesaba)
    
    - Fix: Removed outdated comments incorrectly stating that deployment, statefulset, and leaderworkerset integrations require pod integration to be enabled. (#8053, @IrvingMg)
    - Improve error messages for validation errors regarding WorkloadPriorityClass changes in workloads. (#8334, @olekzabl)
    - MultiKueue: improve the MultiKueueCluster reconciler to skip attempting to reconcile and throw errors
      when the corresponding Secret or ClusterProfile objects don't exist. The reconcile will be triggered on
      creation of the objects. (#8144, @mszadkow)
    - Removes ConfigurableResourceTransformations feature gate. (#8133, @mbobrovskyi)
    
    
  • v0.14.8

    Changes since `v0.14.7`:
    
    - LWS: disable testing the mutating of the `kueue.x-k8s.io/workloadpriorityclass` label as the functionality is broken on
      Kueue 0.14 with Kubernetes 1.35+.
    
      If you are using this functionality, please migrate to use Kueue 0.15+. (#8541, @mimowo)
    
    - CLI: Support "kwl" and "kueueworkload" as a shortname for Kueue Workloads. (#8473, @kannon92)
    
    - Add lws editer and viewer roles to kustomize and helm (#8554, @kannon92)
    - Fix ClusterQueue deletion getting stuck when pending workloads are deleted after being assumed by the scheduler (#8552, @sohankunkerkar)
    - HC: Avoid redundant requeuing of inadmissible workloads when multiple ClusterQueues in the same cohort hierarchy are processed. (#8512, @sohankunkerkar)
    - Integrations based on Pods: skip using finalizers on the Pods created and managed by integrations.
    
      In particular we skip setting finalizers for Pods managed by the built in Serving Workloads  Deployments,
      StatefulSets, and LeaderWorkerSets.
    
      This improves performance of suspending the workloads, and fixes occasional race conditions when a StatefulSet
      could get stuck when deactivating and re-activating in a short interval. (#8568, @mbobrovskyi)
    - JobFramework: Fixed a bug that allowed a deactivated workload to be activated. (#8445, @chengjoey)
    - Kubeflow TrainJob v2: fix the bug to prevent duplicate pod template overrides when starting the Job is retried. (#8488, @j-skiba)
    - LeaderWorkerSet: Fixed a bug that prevented deleting the workload when the LeaderWorkerSet was scaled down. (#8672, @mbobrovskyi)
    - MultiKueue now waits for WorkloadAdmitted (instead of QuotaReserved) before deleting workloads from non-selected worker clusters. To revert to the previous behavior, disable the `MultiKueueWaitForWorkloadAdmitted` feature gate. (#8601, @IrvingMg)
    - MultiKueue: fix the eviction when initiated by the manager cluster (due to eg. Preemption or WairForPodsReady timeout). (#8403, @mbobrovskyi)
    - ProvisioningRequest: Fixed a bug that prevented events from being updated when the AdmissionCheck state changed. (#8405, @mbobrovskyi)
    - TAS: Fix a bug that MPIJob with runLauncherAsWorker Pod indexes are not correctly evaluated during rank-based ordering assignments. (#8662, @tenzen-y)
    - TAS: Fixed an issue where workloads could remain in the second-pass scheduling queue (used for integration
      or TAS with ProvisioningRequests, and for TAS Node Hot Swap) even if they no longer require to be in the queue. (#8431, @skools-here)
    - TAS: fix TAS resource flavor controller to extract only scheduling-relevant node updates to prevent unnecessary reconciliation. (#8454, @Ladicle)
    - TAS: significantly improves scheduling performance by replacing Pod listing with an event-driven
      cache for non-TAS Pods, thereby avoiding expensive DeepCopy operations during each scheduling cycle. (#8484, @gabesaba)
    
  • v0.16.0-rc.0

    Changes since `v0.15.0`:
    
    - Removed FlavorFungibilityImplicitPreferenceDefault feature gate.
    
      Configure flavor selection preference using the ClusterQueue field `spec.flavorFungibility.preference` instead. (#8134, @mbobrovskyi)
     - The short name "wl" for workloads has been removed to avoid potential conflicts with the in-tree workload object coming into Kubernetes (#8472, @kannon92)
    
    - Add field multiplyBy for ResourceTransformation (#7599, @calvin0327)
    - V1beta2: Use v1beta2 as storage version in v0.16
    
      The v1beta1 API version will no longer be served in v0.17 (new resources cannot be created with v1beta1) and will be fully removed in v0.18.
    
      Migrate all existing Kueue resources from `kueue.x-k8s.io/v1beta1` to `kueue.x-k8s.io/v1beta2` after upgrading to v0.16 and **before** upgrading to v0.17.
    
      Kueue conversion webhooks handle structural changes automatically – the migration only updates the stored apiVersion.
    
      Migration instructions (including the official script): https://github.com/kubernetes-sigs/kueue/issues/8018. (#8020, @mbobrovskyi)
    
    - Adds support for PodsReady when JobSet dependsOn is used. (#7889, @MaysaMacedo)
    - CLI: Support "kwl" and "kueueworkload" as a shortname for Kueue Workloads. (#8379, @kannon92)
    - ClusterQueues with both MultiKueue and ProvisioningRequest admission checks are now marked as inactive with reason "MultiKueueWithProvisioningRequest", as this configuration is invalid on manager clusters. (#8451, @IrvingMg)
    - Enable Pod-based integrations by default (#8096, @sohankunkerkar)
    - Logs now include `replica-role` field to identify Kueue instance roles (leader/follower/standalone). (#8107, @IrvingMg)
    - MultiKueue: trigger workload eviction on the management cluster when the corresponding workload is evicted
      on the worker remote cluster. In particular this is fixing the issue with workloads using ProvisioningRequests,
      which could get stuck in a worker cluster which does not have enough capacity to ever admit the workloads. (#8477, @mszadkow)
    - Observability: Add more details (the preemptionMode) to the QuotaReserved condition message,
      and the related event, about the skipped flavors which were considered for preemption.
      Before: "Quota reserved in ClusterQueue preempt-attempts-cq, wait time since queued was 9223372037s; Flavors considered: main: on-demand(Preempt;insufficient unused quota for cpu in flavor on-demand, 1 more needed)"
      After: "Quota reserved in ClusterQueue preempt-attempts-cq, wait time since queued was 9223372037s; Flavors considered: main: on-demand(preemptionMode=Preempt;insufficient unused quota for cpu in flavor on-demand, 1 more needed)" (#8024, @mykysha)
    - Ray: Support RayJob InTreeAutoscaling by using the ElasticJobsViaWorkloadSlices feature. (#8082, @hiboyang)
    - TAS: extend the information in condition messages and events about nodes excluded from calculating the
      assignment due to various recognized reasons like: taints, node affinity, node resource constraints. (#8043, @sohankunkerkar)
    
    - Add lws editer and viewer roles to kustomize and helm (#8513, @kannon92)
    - DRA: fix the race condition bug leading to undefined behavior due to concurrent operations
      on the Workload object, manifested by the "WARNING: DATA RACE" in test logs. (#8073, @mbobrovskyi)
    - Fix ClusterQueue deletion getting stuck when pending workloads are deleted after being assumed by the scheduler. (#8543, @sohankunkerkar)
    - Fix EnsureWorkloadSlices to finish old slice when new is admitted as replacement (#8456, @sohankunkerkar)
    - Fix `TrainJob` controller not correctly setting the `PodSet` count value based on `numNodes` for the expected number of training nodes. (#8135, @kaisoz)
    - Fix a bug that WorkloadPriorityClass value changes do not trigger Workload priority updates. (#8442, @ASverdlov)
    - Fix a performance bug as some "read-only" functions would be taking unnecessary "write" lock. (#8181, @ErikJiang)
    - Fix the race condition bug where the kueue_pending_workloads metric may not be updated to 0 after the last
      workload is admitted and there are no new workloads incoming. (#8037, @Singularity23x0)
    - Fixed a bug that Kueue's scheduler would re-evaluate and update already finished workloads, significantly
      impacting overall scheduling throughput. This re-evaluation of a finished workload would be triggered when:
      1. Kueue is restarted
      2. There is any event related to LimitRange or RuntimeClass instances referenced by the workload (#8186, @mbobrovskyi)
    - Fixed the following bugs for the StatefulSet integration by ensuring the Workload object
      has the ownerReference to the StatefulSet:
      1. Kueue doesn't keep the StatefulSet as deactivated
      2. Kueue marks the Workload as Finished if all StatefulSet's Pods are deleted
      3. changing the "queue-name" label could occasionally result in the StatefulSet getting stuck (#4799, @mbobrovskyi)
    - HC: Avoid redundant requeuing of inadmissible workloads when multiple ClusterQueues in the same cohort hierarchy are processed. (#8441, @sohankunkerkar)
    - Integrations based on Pods: skip using finalizers on the Pods created and managed by integrations.
    
      In particular we skip setting finalizers for Pods managed by the built in Serving Workloads  Deployments,
      StatefulSets, and LeaderWorkerSets.
    
      This improves performance of suspending the workloads, and fixes occasional race conditions when a StatefulSet
      could get stuck when deactivating and re-activating in a short interval. (#8530, @mbobrovskyi)
    - JobFramework: Fixed a bug that allowed a deactivated workload to be activated. (#8424, @chengjoey)
    - Kubeflow TrainJob v2: fix the bug to prevent duplicate pod template overrides when starting the Job is retried. (#8269, @j-skiba)
    - MultiKueue now waits for WorkloadAdmitted (instead of QuotaReserved) before deleting workloads from non-selected worker clusters. To revert to the previous behavior, disable the `MultiKueueWaitForWorkloadAdmitted` feature gate. (#8592, @IrvingMg)
    - MultiKueue via ClusterProfile: Fix the panic if the configuration for ClusterProfiles wasn't not provided in the configMap. (#8071, @mszadkow)
    - MultiKueue: Fix a bug that the priority change by mutating the `kueue.x-k8s.io/priority-class` label on the management cluster is not propagated to the worker clusters. (#8464, @mbobrovskyi)
    - MultiKueue: Fixed status sync for CRD-based jobs (JobSet, Kubeflow, Ray, etc.) that was blocked while the local job was suspended. (#8308, @IrvingMg)
    - MultiKueue: fix the bug that for Pod integration the AdmissionCheck status would be kept Pending indefinitely,
      even when the Pods are already running.
    
      The analogous fix is also done for the batch/Job when the MultiKueueBatchJobWithManagedBy feature gate  is disabled. (#8189, @IrvingMg)
    - MultiKueue: fix the eviction when initiated by the manager cluster (due to eg. Preemption or WairForPodsReady timeout). (#8151, @mbobrovskyi)
    - ProvisioningRequest: Fixed a bug that prevented events from being updated when the AdmissionCheck state changed. (#8394, @mbobrovskyi)
    - Revert the changes in PR https://github.com/kubernetes-sigs/kueue/pull/8599 for transitioning
      the QuotaReserved, Admitted conditions to `False` for Finished workloads. This introduced a regression,
      because users lost the useful information about the timestamp of the last transitioning of these
      conditions to True, without an API replacement to serve the information. (#8599, @mbobrovskyi)
    - Scheduling: fix a bug that evictions submitted by scheduler (preemptions and eviction due to TAS NodeHotSwap failing)
      could result in conflict in case of concurrent workload modification by another controller.
      This could lead to indefinite failing requests sent by scheduler in some scenarios when eviction is initiated by
      TAS NodeHotSwap. (#7933, @mbobrovskyi)
    - Scheduling: fix the bug that setting (none -> some) a workload priority class label (kueue.x-k8s.io/priority-class) was ignored. (#8480, @andrewseif)
    - TAS NodeHotSwap: fixed the bug that allows workload to requeue by scheduler even if already deleted on TAS NodeHotSwap eviction. (#8278, @mbobrovskyi)
    - TAS: Fix handling of admission for workloads using the LeastFreeCapacity algorithm when the  "unconstrained"
      mode is used. In that case scheduling would fail if there is at least one node in the cluster which does not have
      enough capacity to accommodate at least one Pod. (#8168, @PBundyra)
    - TAS: fix TAS resource flavor controller to extract only scheduling-relevant node updates to prevent unnecessary reconciliation. (#8452, @Ladicle)
    - TAS: fix a performance bug that continues reconciles of TAS ResourceFlavor (and related ClusterQueues)
      were triggered by updates to Nodes' heartbeat times. (#8342, @PBundyra)
    - TAS: fix bug that when TopologyAwareScheduling is disabled, but there is a ResourceFlavor configured with topologyName, then preemptions fail with "workload requires Topology, but there is no TAS cache information". (#8167, @zhifei92)
    - TAS: fixed performance issue due to unncessary (empty) request by TopologyUngater (#8279, @mbobrovskyi)
    
    - Fix: Removed outdated comments incorrectly stating that deployment, statefulset, and leaderworkerset integrations require pod integration to be enabled. (#8053, @IrvingMg)
    - Improve error messages for validation errors regarding WorkloadPriorityClass changes in workloads. (#8334, @olekzabl)
    - MultiKueue: improve the MultiKueueCluster reconciler to skip attempting to reconcile and throw errors
      when the corresponding Secret or ClusterProfile objects don't exist. The reconcile will be triggered on
      creation of the objects. (#8144, @mszadkow)
    - Removes ConfigurableResourceTransformations feature gate. (#8133, @mbobrovskyi)
    
    
  • v0.14.7

    Changes since `v0.14.6`:
    
    - Ray: Support RayJob InTreeAutoscaling by using the ElasticJobsViaWorkloadSlices feature. (#8282, @hiboyang)
    
    - MultiKueue: Fixed status sync for CRD-based jobs (JobSet, Kubeflow, Ray, etc.) that was blocked while the local job was suspended. (#8346, @IrvingMg)
    - MultiKueue: fix the bug that for Pod integration the AdmissionCheck status would be kept Pending indefinitely,
      even when the Pods are already running.
    
      The analogous fix is also done for the batch/Job when the MultiKueueBatchJobWithManagedBy feature gate  is disabled. (#8293, @IrvingMg)
    - Scheduling: fix a bug that evictions submitted by scheduler (preemptions and eviction due to TAS NodeHotSwap failing)
      could result in conflict in case of concurrent workload modification by another controller.
      This could lead to indefinite failing requests sent by scheduler in some scenarios when eviction is initiated by
      TAS NodeHotSwap. (#8314, @mbobrovskyi)
    - TAS NodeHotSwap: fixed the bug that allows workload to requeue by scheduler even if already deleted on TAS NodeHotSwap eviction. (#8306, @mbobrovskyi)
    - TAS: fix a performance bug that continues reconciles of TAS ResourceFlavor (and related ClusterQueues)
      were triggered by updates to Nodes' heartbeat times. (#8356, @PBundyra)
    - TAS: fixed performance issue due to unncessary (empty) request by TopologyUngater (#8337, @mbobrovskyi)
    
  • v0.15.2

    Changes since `v0.15.1`:
    
    - Ray: Support RayJob InTreeAutoscaling by using the ElasticJobsViaWorkloadSlices feature. (#8284, @hiboyang)
    
    - Kubeflow TrainJob v2: fix the bug to prevent duplicate pod template overrides when starting the Job is retried. (#8271, @j-skiba)
    - MultiKueue: Fixed status sync for CRD-based jobs (JobSet, Kubeflow, Ray, etc.) that was blocked while the local job was suspended. (#8344, @IrvingMg)
    - MultiKueue: fix the bug that for Pod integration the AdmissionCheck status would be kept Pending indefinitely,
      even when the Pods are already running.
    
      The analogous fix is also done for the batch/Job when the MultiKueueBatchJobWithManagedBy feature gate  is disabled. (#8288, @IrvingMg)
    - Scheduling: fix a bug that evictions submitted by scheduler (preemptions and eviction due to TAS NodeHotSwap failing)
      could result in conflict in case of concurrent workload modification by another controller.
      This could lead to indefinite failing requests sent by scheduler in some scenarios when eviction is initiated by
      TAS NodeHotSwap. (#8313, @mbobrovskyi)
    - TAS NodeHotSwap: fixed the bug that allows workload to requeue by scheduler even if already deleted on TAS NodeHotSwap eviction. (#8310, @mbobrovskyi)
    - TAS: fix a performance bug that continues reconciles of TAS ResourceFlavor (and related ClusterQueues)
      were triggered by updates to Nodes' heartbeat times. (#8355, @PBundyra)
    - TAS: fixed performance issue due to unncessary (empty) request by TopologyUngater (#8333, @mbobrovskyi)
    
    - Improve error messages for validation errors regarding WorkloadPriorityClass changes in workloads. (#8352, @olekzabl)
    - MultiKueue: improve the MultiKueueCluster reconciler to skip attempting to reconcile and throw errors
      when the corresponding Secret or ClusterProfile objects don't exist. The reconcile will be triggered on
      creation of the objects. (#8290, @mszadkow)
    
  • v0.15.1

    Changes since `v0.15.0`:
    
    - TAS: extend the information in condition messages and events about nodes excluded from calculating the
      assignment due to various recognized reasons like: taints, node affinity, node resource constraints. (#8132, @sohankunkerkar)
    
    - Fix `TrainJob` controller not correctly setting the `PodSet` count value based on `numNodes` for the expected number of training nodes. (#8145, @kaisoz)
    - Fix a performance bug as some "read-only" functions would be taking unnecessary "write" lock. (#8183, @ErikJiang)
    - Fix the race condition bug where the kueue_pending_workloads metric may not be updated to 0 after the last
      workload is admitted and there are no new workloads incoming. (#8049, @Singularity23x0)
    - Fixed a bug that Kueue's scheduler would re-evaluate and update already finished workloads, significantly
      impacting overall scheduling throughput. This re-evaluation of a finished workload would be triggered when:
      1. Kueue is restarted
      2. There is any event related to LimitRange or RuntimeClass instances referenced by the workload (#8198, @mimowo)
    - Fixed the following bugs for the StatefulSet integration by ensuring the Workload object
      has the ownerReference to the StatefulSet:
      1. Kueue doesn't keep the StatefulSet as deactivated
      2. Kueue marks the Workload as Finished if all StatefulSet's Pods are deleted
      3. changing the "queue-name" label could occasionally result in the StatefulSet getting stuck (#8105, @mbobrovskyi)
    - MultiKueue via ClusterProfile: Fix the panic if the configuration for ClusterProfiles wasn't not provided in the configMap. (#8097, @mszadkow)
    - TAS: Fix handling of admission for workloads using the LeastFreeCapacity algorithm when the  "unconstrained"
      mode is used. In that case scheduling would fail if there is at least one node in the cluster which does not have
      enough capacity to accommodate at least one Pod. (#8172, @PBundyra)
    - TAS: fix bug that when TopologyAwareScheduling is disabled, but there is a ResourceFlavor configured with topologyName, then preemptions fail with "workload requires Topology, but there is no TAS cache information". (#8195, @zhifei92)
    
    - Fix: Removed outdated comments incorrectly stating that deployment, statefulset, and leaderworkerset integrations require pod integration to be enabled. (#8054, @IrvingMg)
    
  • v0.14.6

    Changes since `v0.14.5`:
    
    - TAS: extend the information in condition messages and events about nodes excluded from calculating the
      assignment due to various recognized reasons like: taints, node affinity, node resource constraints. (#8169, @sohankunkerkar)
    
    - Fix `TrainJob` controller not correctly setting the `PodSet` count value based on `numNodes` for the expected number of training nodes. (#8146, @kaisoz)
    - Fix a performance bug as some "read-only" functions would be taking unnecessary "write" lock. (#8182, @ErikJiang)
    - Fix the race condition bug where the kueue_pending_workloads metric may not be updated to 0 after the last
      workload is admitted and there are no new workloads incoming. (#8048, @Singularity23x0)
    - Fixed the following bugs for the StatefulSet integration by ensuring the Workload object
      has the ownerReference to the StatefulSet:
      1. Kueue doesn't keep the StatefulSet as deactivated
      2. Kueue marks the Workload as Finished if all StatefulSet's Pods are deleted
      3. changing the "queue-name" label could occasionally result in the StatefulSet getting stuck (#8104, @mbobrovskyi)
    - TAS: Fix handling of admission for workloads using the LeastFreeCapacity algorithm when the  "unconstrained"
      mode is used. In that case scheduling would fail if there is at least one node in the cluster which does not have
      enough capacity to accommodate at least one Pod. (#8171, @PBundyra)
    - TAS: fix bug that when TopologyAwareScheduling is disabled, but there is a ResourceFlavor configured with topologyName, then preemptions fail with "workload requires Topology, but there is no TAS cache information". (#8196, @zhifei92)
    
    - Add safe-guard to protect against re-evaluating Finished workloads by scheduler which caused a bug. (#8199, @mimowo)
    
  • v0.15.0

    Changes since `v0.14.0`:
    
    - MultiKueue: validate remote client kubeconfigs and reject insecure kubeconfigs by default; add feature gate MultiKueueAllowInsecureKubeconfigs to temporarily allow insecure kubeconfigs until v0.17.0.
    
      if you are using MultiKueue kubeconfigs which are not passing the new validation please
      enable the `MultiKueueAllowInsecureKubeconfigs` feature gate and let us know so that we can re-consider
      the deprecation plans for the feature gate. (#7439, @mszadkow)
     - The .status.flavors in LocalQueue is deprecated, which will be removed in the future release.
    
      You can consider migrating from the field usage to VisibilityOnDemand. (#7337, @iomarsayed)
     - Update DRA API used from `v1beta2` to `v1`
    
      in order to use DRA integration by enabling the DynamicResourceAllocation feature gate in Kueue you need to use k8s 1.34+. (#7212, @harche)
     - V1beta2: Expose the v1beta2 API for CRD serving.
    
      V1beta1 remains supported in this release and used as storage, but please plan for migration.
    
      We would highly recommend preparing the Kueue CustomResources API version upgrade (v1beta1 -> v1beta2)
      since we plan to use v1beta2 for storage in 0.16, and discontinue the support for v1beta1 in 0.17. (#7304, @mimowo)
    
    - Removed the deprecated workload annotation key "kueue.x-k8s.io/queue-name".
    
      Please ensure you are using the workload label "kueue.x-k8s.io/queue-name" instead. (#7271, @ganczak-commits)
    - V1beta2: Delete .enable field from FairSharing API in config (#7583, @mbobrovskyi)
    - V1beta2: Delete .enable field from WaitForPodsReady API in config (#7628, @mbobrovskyi)
    - V1beta2: FlavorFungibility: introduce `MayStopSearch` in place of `Borrow`/`Preempt`, which are now deprecated in v1beta1. (#7117, @ganczak-commits)
    - V1beta2: Graduate Config API to v1beta2. v1beta1 remains supported for this release, but please plan for migration. (#7375, @mbobrovskyi)
    - V1beta2: Make .waitForPodsReady.timeout required field in the Config API (#7952, @tenzen-y)
    - V1beta2: Make fairSharing.premptionStrategies required field in Config API (#7948, @tenzen-y)
    - V1beta2: Remove deprecated PodIntegrationOptions (podOptions field) from v1beta2 Configuration.
    
       If you are using the podOptions in the configMap, you need to migrate to using  managedJobsNamespaceSelector (https://kueue.sigs.k8s.io/docs/tasks/run/plain_pods/) before
      the upgrade. (#7406, @nerdeveloper)
    - V1beta2: Remove deprecated QueueVisibility in configMap (it was already non-functional). (#7319, @bobsongplus)
    - V1beta2: Remove deprecated retryDelayMinutes field from v1beta2 AdmissionCheckSpec (it was already non-functional). (#7407, @nerdeveloper)
    - V1beta2: Remove never used .status.fairSharing.admissionFairSharing field from ClusterQueue and Cohort (#7793, @tenzen-y)
    - V1beta2: Removed deprecated Preempt/Borrow from FlavorFungibility API (#7527, @mbobrovskyi)
    - V1beta2: The internal representation of TopologyAssignment (in WorkloadStatus) has been reorganized to allow using TAS for larger workloads. (More specifically, under the assumptions described in issue #7220, it allows to increase the maximal workload size from approx. 20k to approx. 60k nodes). (#7544, @olekzabl)
    - V1beta2: change default for waitForPodsReady.blockAdmission to false (#7687, @mbobrovskyi)
    - V1beta2: drop deprecated Flavors field from LocalQueueStatus (#7449, @mbobrovskyi)
    - V1beta2: graduate the visibility API (#7411, @mbobrovskyi)
    - V1beta2: introduce PriorityClassRef instead of PriorityClassSource and PriorityClassName (#7540, @mbobrovskyi)
    - V1beta2: remove deprecated .spec.admissionChecks field from ClusterQueue API in favor of .spec.admissionChecksStrategy. (#7490, @nerdeveloper)
    - `ReclaimablePods` feature gate is introduced to enable users switching on and off the reclaimable Pods feature (#7525, @PBundyra)
    
    - AdmissionChecks: introduce new optional fields in the workload status for admission checks to control the delay by
      external and internal admission check controllers:
      - requeueAfterSeconds: specifies minimum wait time before retry
      - retryCount: Tracks retry attempts per admission check (#7620, @sohankunkerkar)
    - AdmissionFairSharing: promote the feature to beta (enabled by default). (#7463, @kannon92)
    - FailureRecovery: Introduce a mechanism to terminate Pods "stuck" in a terminating state due to node failures.
      The feature is activated by enabling the alpha FailureRecoveryPolicy feature gate (disabled by default).
      Only Pods with the kueue.x-k8s.io/safe-to-forcefully-terminate annotation are handled by the mechanism. (#7312, @kshalot)
    - FlavorFungability: introduce the ClusterQueue's API for flavorFungability: `.spec.flavorFungability.preference` to indicate
      the user's preference for borrowing or preemption when there is no flavor which avoids both.
      This new field is a replacement for the alpha feature gate FlavorFungibilityImplicitPreferenceDefault which is considered as deprecated in 0.15 and will be removed in 0.16. (#7316, @vladikkuzn)
    - Integrations: the Pod integration is no longer required to be enabled explicitly in the configMap when you are using LeaderWorkerSet, StatefulSet, or Deployment frameworks. (#6736, @IrvingMg)
    - JobFramework: Introduce an optional interface for custom Jobs, called JobWithCustomWorkloadActivation, which can be used to deactivate or active a custom CRD workload. (#7199, @tg123)
    - KueuePopulator: release of the new experimental sub-project called "kueue-populator". It allows to create the default ClusterQueue, ResourceFlavor and Topology. It also creates default LocalQueues in all namespaces managed by Kueue. (#7940, @mbobrovskyi)
    - MultiKueue: Graduate the support for running external jobs to Beta. (#7669, @khrm)
    - MultiKueue: It supports Topology Aware Scheduling (TAS) and ProvisioningRequest integration. (#5361, @IrvingMg)
    - MultiKueue: Promote MultiKueueBatchJobWithManagedBy to beta which allows to synchronize the Job status periodically during Job execution between the worker and the management cluster for k8s batch Jobs. (#7341, @kannon92)
    - MultiKueue: Support for authentication to worker clusters using ClusterProfile API. (#7570, @hdp617)
    - Observability: Adjust the `cluster_queue_weighted_share` and `cohort_weighted_share` metrics to report the precise value for the Weighted share, rather than the value rounded to an integer. Also, expand the `cluster_queue_weighted_share` metric with the "cohort" label. (#7338, @j-skiba)
    - Observability: Improve the messages presented to the user in scheduling events, by clarifying the reason for "insufficient quota" in case of workloads with multiple PodSets.
      Before: "insufficient quota for resource-type in flavor example-flavor, request > maximum capacity (24 > 16)"
      After: "insufficient quota for resource-type in flavor example-flavor, previously considered podsets requests (16) + current podset request (8) > maximum capacity (16)" (#7232, @iomarsayed)
    - Observability: Summarize the list of flavors considered for admission in the release cycle, but not used eventually for a workload which reserved the quota.
      The summary is present in the message for the QuotaReserved condition, and in the event.
      Before: "Quota reserved in ClusterQueue tas-main, wait time since queued was 9223372037s"
      After: "Quota reserved in ClusterQueue tas-main, wait time since queued was 9223372037s; Flavors considered: one: default(NoFit;Flavor \"default\" does not support TopologyAwareScheduling)" (#7646, @mykysha)
    - Observability: improve the message for the Preempted condition: include preemptor and preemptee object paths to make it easier to locate the objects involved in a preemption.
      Before: "Preempted to accommodate a workload (UID: wl-in, JobUID: job-in) due to reclamation within the cohort"
      After: "Preempted to accommodate a workload (UID: wl-in, JobUID: job-in) due to reclamation within the cohort; preemptor path: /r/c/q; preemptee path: /r/q_borrowing" (#7522, @mszadkow)
    - Promote ManagedJobsNamespaceSelectorAlwaysRespected feature to Beta (#7493, @PannagaRao)
    - Scheduling: support mutating the "kueue.x-k8s.io/workloadpriorityclass" label for Jobs with reserved quota. (#7289, @mbobrovskyi)
    - TAS: It supports the Kubeflow TrainJob (#7249, @kaisoz)
    - TAS: The balanced placement is introduced with the TASBalancedPlacement feature gate. (#6851, @pajakd)
    - TAS: change the algorithm used in case of "unconstrained" mode (enabled by the kueue.x-k8s.io/podset-unconstrained-topology annotation, or when the "implicit" mode s used) from "BestFit" to "LeastFreeCapacity".
    
      This allows to optimize the fragmentation for workloads which don't require bin-packing. (#7416, @iomarsayed)
    - Transition QuotaReserved to false whenever setting Finished conditions (#7724, @mbobrovskyi)
    
    - V1beta2: Adjust the documentation examples to use v1beta2 consistently. (#7910, @mszadkow)
    
    - AdmissionFairSharing: Fix the bug that occasionally a workload may get admitted from a busy LocalQueue,
      bypassing the entry penalties. (#7780, @IrvingMg)
    - Fix a bug that an error during workload preemption could leave the scheduler stuck without retrying. (#7665, @olekzabl)
    - Fix a bug that the cohort client-go lib is for a Namespaced resource, even though the cohort is a Cluster-scoped resource. (#7799, @tenzen-y)
    - Fix a bug where a workload would not get requeued after eviction due to failed hotswap. (#7376, @pajakd)
    - Fix eviction of jobs with memory requests in decimal format (#7430, @brejman)
    - Fix existing workloads not being re-evaluated when new clusters are added to MultiKueueConfig. Previously, only newly created workloads would see updated cluster lists. (#6732, @ravisantoshgudimetla)
    - Fix handling of RayJobs which specify the spec.clusterSelector and the "queue-name" label for Kueue. These jobs should be ignored by kueue as they are being submitted to a RayCluster which is where the resources are being used and was likely already admitted by kueue. No need to double admit.
      Fix on a panic on kueue managed jobs if spec.rayClusterSpec wasn't specified. (#7218, @laurafitzgerald)
    - Fix integration of `manageJobWithoutQueueName` and `managedJobsNamespaceSelector` with JobSet by ensuring that jobSets without a queue are  not managed by Kueue if are not selected by the  `managedJobsNamespaceSelector`. (#7703, @MaysaMacedo)
    - Fix invalid annotations path being reported in `JobSet` topology validations. (#7189, @kshalot)
    - Fix issue #6711 where an inactive workload could transiently get admitted into a queue. (#7913, @olekzabl)
    - Fix malformed annotations paths being reported for `RayJob` and `RayCluster` head group specs. (#7183, @kshalot)
    - Fix the bug for the StatefulSet integration that the scale up could get stuck if
      triggered immediately after scale down to zero. (#7479, @IrvingMg)
    - Fix the bug that a workload which was deactivated by setting the `spec.active=false` would not have the
      `wl.Status.RequeueState` cleared. (#7734, @sohankunkerkar)
    - Fix the bug that the kubernetes.io/job-name label was not propagated from the k8s Job to the PodTemplate in
      the Workload object, and later to the pod template in the ProvisioningRequest.
    
      As a consequence the ClusterAutoscaler could not properly resolve pod affinities referring to that label,
      via podAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelector. For example,
      such pod affinities can be used to request ClusterAutoscaler to provision a single node which is large enough
      to accommodate all Pods on a single Node.
    
      We also introduce the PropagateBatchJobLabelsToWorkload feature gate to disable the new behavior in case of
      complications. (#7613, @yaroslava-serdiuk)
    - Fix the kueue-controller-manager startup failures.
    
      This fixed the Kueue CrashLoopBackOff due to the log message: "Unable to setup indexes","error":"could not setup multikueue indexer: setting index on workloads admission checks: indexer conflict. (#7432, @IrvingMg)
    - Fix the race condition which could result that the Kueue scheduler occasionally does not record the reason
      for admission failure of a workload if the workload was modified in the meanwhile by another controller. (#7845, @mbobrovskyi)
    - Fixed a bug that Kueue would keep sending empty updates to a Workload, along with sending the "UpdatedWorkload" event, even if the Workload didn't change. This would happen for Workloads using any other mechanism for setting
      the priority than the WorkloadPriorityClass, eg. for Workloads for PodGroups. (#7299, @mbobrovskyi)
    - Fixed the bug that prevented managing workloads with duplicated environment variable names in containers. This issue manifested when creating the Workload via the API. (#7425, @mbobrovskyi)
    - Kueue now properly validates and rejects unsupported DRA (Dynamic Resource Allocation) features with clear error messages instead of silently failing or producing misleading "DeviceClass not mapped" errors. Unsupported features include: AllocationMode 'All', CEL Selectors, Device Constraints, Device Config, FirstAvailable device selection, and AdminAccess. (#7226, @harche)
    - MultiKueue x ElasticJobs: fix webhook validation bug which prevented scale up operation when any other
      than the default "AllAtOnce" MultiKueue dispatcher was used. (#7278, @mszadkow)
    - MultiKueue: Remove remoteClient from clusterReconciler when kubeconfig is detected as invalid or insecure, preventing workloads from being admitted to misconfigured clusters. (#7486, @mszadkow)
    - RBAC: Add rbac for train job for kueue-batch-admin and kueue-batch-user. (#7196, @kannon92)
    - Scheduling: With BestEffortFIFO enabled, we will keep attempting to schedule a workload as long as
      it is waiting for preemption targets to complete. This fixes a bugs where an inadmissible
      workload went back to head of queue, in front of the preempting workload, allowing
      preempted workloads to reschedule (#7157, @gabesaba)
    - Services: fix the setting of the `app.kubernetes.io/component` label to discriminate between different service components within Kueue as follows:
      - controller-manager-metrics-service for kueue-controller-manager-metrics-service
      - visibility-service for kueue-visibility-server
      - webhook-service for kueue-webhook-service (#7371, @rphillips)
    - TAS: Fix the `requiredDuringSchedulingIgnoredDuringExecution` node affinity setting being ignored in topology-aware scheduling. (#7899, @kshalot)
    - TAS: Increase the number of Topology levels limitations for localqueue and workloads to 16 (#7423, @kannon92)
    - TAS: Introduce missing validation against using incompatible `PodSet` grouping configuration in `JobSet, `MPIJob`, `LeaderWorkerSet`, `RayJob` and `RayCluster`.
    
      Now, only groups of two `PodSet`s can be defined and one of the grouped `PodSet`s has to have only a single `Pod`.
      The `PodSet`s within a group must specify the same topology request via one of the `kueue.x-k8s.io/podset-required-topology` and `kueue.x-k8s.io/podset-preferred-topology` annotations. (#7061, @kshalot)
    - Visibility API: Fix a bug that the Config clientConnection is not respected in the visibility server. (#7223, @tenzen-y)
    - WorkloadRequestUseMergePatch: use "strict" mode for admission patches during scheduling which
      sends the ResourceVersion of the workload being admitted for comparing by kube-apiserver.
      This fixes the race-condition issue that Workload conditions added concurrently by other controllers
      could be removed during scheduling. (#7246, @mszadkow)
    
    - RBAC: Restrict access to secrets for the Kueue controller manager only to secrets in the Kueue system namespace, ie
      kueue-system by default, or the one specified during installation with Helm. (#7188, @sbgla-sas)
    
    
  • v0.14.5

    Changes since `v0.14.4`:
    
    - TAS: It supports the Kubeflow TrainJob.
    
      You should update Kubeflow Trainer to v2.1.0 at least when using Trainer v2. (#7755, @IrvingMg)
    
    - AdmissionFairSharing: Fix the bug that occasionally a workload may get admitted from a busy LocalQueue,
      bypassing the entry penalties. (#7914, @IrvingMg)
    - Fix a bug that an error during workload preemption could leave the scheduler stuck without retrying. (#7818, @olekzabl)
    - Fix a bug that the cohort client-go lib is for a Namespaced resource, even though the cohort is a Cluster-scoped resource. (#7802, @tenzen-y)
    - Fix integration of `manageJobWithoutQueueName` and `managedJobsNamespaceSelector` with JobSet by ensuring that jobSets without a queue are  not managed by Kueue if are not selected by the  `managedJobsNamespaceSelector`. (#7762, @MaysaMacedo)
    - Fix issue #6711 where an inactive workload could transiently get admitted into a queue. (#7939, @olekzabl)
    - Fix the bug that a workload which was deactivated by setting the `spec.active=false` would not have the
      `wl.Status.RequeueState` cleared. (#7768, @sohankunkerkar)
    - Fix the bug that the kubernetes.io/job-name label was not propagated from the k8s Job to the PodTemplate in
      the Workload object, and later to the pod template in the ProvisioningRequest.
    
      As a consequence the ClusterAutoscaler could not properly resolve pod affinities referring to that label,
      via podAffinity.requiredDuringSchedulingIgnoredDuringExecution.labelSelector. For example,
      such pod affinities can be used to request ClusterAutoscaler to provision a single node which is large enough
      to accommodate all Pods on a single Node.
    
      We also introduce the PropagateBatchJobLabelsToWorkload feature gate to disable the new behavior in case of
      complications. (#7613, @yaroslava-serdiuk)
    - Fix the race condition which could result that the Kueue scheduler occasionally does not record the reason
      for admission failure of a workload if the workload was modified in the meanwhile by another controller. (#7884, @mbobrovskyi)
    - TAS: Fix the `requiredDuringSchedulingIgnoredDuringExecution` node affinity setting being ignored in topology-aware scheduling. (#7937, @kshalot)