Skip to content

Commit 20f0e19

Browse files
committed
[SPARK-59503] Upgrade Kueue Workload CRD model to v1beta2
### What changes were proposed in this pull request? This PR upgrades the Kueue `Workload` CRD model from `v1beta1` to `v1beta2`. - Bump `Constants.KUEUE_API_VERSION` to `v1beta2` and move the model package to `org.apache.spark.k8s.operator.kueue.v1beta2`. - `WorkloadSpec`: replace `priorityClassName` with `priorityClassRef` (new `PriorityClassRef` type with `group`, `kind`, `name`). - `Admission`: rename `podSetFlavors` to `podSetAssignments` and replace `PodSetFlavors` with `PodSetAssignment` (`name`, `flavors`, `resourceUsage`, `count`) to match the `v1beta2` schema. - Update `KueueWorkloadFactory` imports and `WorkloadTest` accordingly. ### Why are the changes needed? Kueue exposed the `v1beta2` API in [v0.15.0](https://github.com/kubernetes-sigs/kueue/releases/tag/v0.15.0) (2025-11-28) and switched to `v1beta2` as the storage version in [v0.16.0](https://github.com/kubernetes-sigs/kueue/releases/tag/v0.16.0) (2026-01-26), with `v1beta1` scheduled to be dropped in an upcoming release (already `served: false` in the v0.20.0 release candidate). Since the Kueue integration is not released yet, we should start with the current `v1beta2` API instead of the deprecated `v1beta1`. ### Does this PR introduce _any_ user-facing change? No, the Kueue integration is not released yet. ### How was this patch tested? Pass the CIs. ### Was this patch authored or co-authored using generative AI tooling? Generated-by: Claude Fable 5.1 Closes #824 from dongjoon-hyun/SPARK-59503. Authored-by: Dongjoon Hyun <dongjoon@apache.org> Signed-off-by: Dongjoon Hyun <dongjoon@apache.org>
1 parent 5c3b91b commit 20f0e19

12 files changed

Lines changed: 89 additions & 48 deletions

File tree

‎spark-operator-api/src/main/java/org/apache/spark/k8s/operator/Constants.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class Constants {
5151
public static final String KUEUE_API_GROUP = "kueue.x-k8s.io";
5252

5353
/** The API version for Kueue resources. */
54-
public static final String KUEUE_API_VERSION = "v1beta1";
54+
public static final String KUEUE_API_VERSION = "v1beta2";
5555

5656
/** The CRD name for Kueue Workload. */
5757
public static final String KUEUE_WORKLOAD_CRD_NAME = "workloads.kueue.x-k8s.io";

‎spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/KueueWorkloadFactory.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@
4545
import org.apache.spark.k8s.operator.SparkCluster;
4646
import org.apache.spark.k8s.operator.SparkClusterResourceSpec;
4747
import org.apache.spark.k8s.operator.SparkClusterSubmissionWorker;
48-
import org.apache.spark.k8s.operator.kueue.v1beta1.PodSet;
49-
import org.apache.spark.k8s.operator.kueue.v1beta1.Workload;
50-
import org.apache.spark.k8s.operator.kueue.v1beta1.WorkloadSpec;
48+
import org.apache.spark.k8s.operator.kueue.v1beta2.PodSet;
49+
import org.apache.spark.k8s.operator.kueue.v1beta2.Workload;
50+
import org.apache.spark.k8s.operator.kueue.v1beta2.WorkloadSpec;
5151
import org.apache.spark.k8s.operator.reconciler.SparkClusterResourceSpecFactory;
5252
import org.apache.spark.k8s.operator.spec.ApplicationSpec;
5353
import org.apache.spark.k8s.operator.spec.BaseApplicationTemplateSpec;

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/Admission.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/Admission.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import java.util.ArrayList;
2323
import java.util.List;
@@ -41,5 +41,5 @@
4141
public class Admission {
4242
private String clusterQueue;
4343
@Builder.Default
44-
private List<PodSetFlavors> podSetFlavors = new ArrayList<>();
44+
private List<PodSetAssignment> podSetAssignments = new ArrayList<>();
4545
}

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/PodSet.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/PodSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2323
import com.fasterxml.jackson.annotation.JsonInclude;

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/PodSetFlavors.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/PodSetAssignment.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,34 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

22-
import java.util.ArrayList;
2322
import java.util.HashMap;
24-
import java.util.List;
2523
import java.util.Map;
2624

2725
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2826
import com.fasterxml.jackson.annotation.JsonInclude;
29-
import io.fabric8.kubernetes.api.model.Toleration;
27+
import io.fabric8.kubernetes.api.model.Quantity;
3028
import lombok.AllArgsConstructor;
3129
import lombok.Builder;
3230
import lombok.Data;
3331
import lombok.NoArgsConstructor;
3432

3533
/**
36-
* PodSetFlavors represents the resource flavors and scheduling constraints assigned to a PodSet.
34+
* PodSetAssignment represents the admission result (flavors and resource usage) for a PodSet.
3735
*/
36+
3837
@Data
3938
@NoArgsConstructor
4039
@AllArgsConstructor
4140
@Builder
4241
@JsonInclude(JsonInclude.Include.NON_NULL)
4342
@JsonIgnoreProperties(ignoreUnknown = true)
44-
public class PodSetFlavors {
43+
public class PodSetAssignment {
4544
private String name;
4645
@Builder.Default
4746
private Map<String, String> flavors = new HashMap<>();
4847
@Builder.Default
49-
private Map<String, String> nodeSelector = new HashMap<>();
50-
@Builder.Default
51-
private List<Toleration> tolerations = new ArrayList<>();
48+
private Map<String, Quantity> resourceUsage = new HashMap<>();
49+
private Integer count;
5250
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
21+
22+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
23+
import com.fasterxml.jackson.annotation.JsonInclude;
24+
import lombok.AllArgsConstructor;
25+
import lombok.Builder;
26+
import lombok.Data;
27+
import lombok.NoArgsConstructor;
28+
29+
/**
30+
* PriorityClassRef references a PriorityClass in a specific API group.
31+
* Use group "kueue.x-k8s.io" with kind "WorkloadPriorityClass",
32+
* or group "scheduling.k8s.io" with kind "PriorityClass".
33+
*/
34+
35+
@Data
36+
@NoArgsConstructor
37+
@AllArgsConstructor
38+
@Builder
39+
@JsonInclude(JsonInclude.Include.NON_NULL)
40+
@JsonIgnoreProperties(ignoreUnknown = true)
41+
public class PriorityClassRef {
42+
private String group;
43+
private String kind;
44+
private String name;
45+
}

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/Workload.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/Workload.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
2323
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -32,7 +32,7 @@
3232
import org.apache.spark.k8s.operator.Constants;
3333

3434
/**
35-
* Fabric8 CustomResource representation of a Kueue Workload (kueue.x-k8s.io/v1beta1).
35+
* Fabric8 CustomResource representation of a Kueue Workload (kueue.x-k8s.io/v1beta2).
3636
*/
3737
@JsonInclude(JsonInclude.Include.NON_NULL)
3838
@JsonDeserialize

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/WorkloadList.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/WorkloadList.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import io.fabric8.kubernetes.api.model.DefaultKubernetesResourceList;
2323
import lombok.NoArgsConstructor;

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/WorkloadSpec.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/WorkloadSpec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import java.util.ArrayList;
2323
import java.util.List;
@@ -44,6 +44,6 @@ public class WorkloadSpec {
4444
private Boolean active = true;
4545
@Builder.Default
4646
private List<PodSet> podSets = new ArrayList<>();
47-
private String priorityClassName;
47+
private PriorityClassRef priorityClassRef;
4848
private Integer priority;
4949
}

spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta1/WorkloadStatus.java renamed to spark-operator/src/main/java/org/apache/spark/k8s/operator/kueue/v1beta2/WorkloadStatus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* under the License.
1818
*/
1919

20-
package org.apache.spark.k8s.operator.kueue.v1beta1;
20+
package org.apache.spark.k8s.operator.kueue.v1beta2;
2121

2222
import java.util.ArrayList;
2323
import java.util.List;

0 commit comments

Comments
 (0)