Repository navigation
Apache Spark™ K8s Operator is a subproject of Apache Spark and aims to extend K8s resource manager to manage Apache Spark applications via Operator Pattern. This release includes Apache Spark K8s Operator 1.1.0 (App Version) with Helm chart 1.9.0 (Chart Version).
Notable Features
- Support K8s v1.35, v1.36, and v1.37
- Built with Spark 4.3.0
- Support Apache Spark 4.0, 4.1, 4.2 and 4.3
- Support Java 27
- Support Kueue (K8s-native job queueing system)
- Deprecated v1beta1 CRDs
- Drop K8s v1.34
Docker Image
docker pull apache/spark-kubernetes-operator:1.1.0
Install Helm Chart
$ helm repo add spark https://apache.github.io/spark-kubernetes-operator
$ helm repo update
$ helm install spark spark-kubernetes-operator/spark-kubernetes-operator
$ helm list
Full Changelog:
Resolved Issues
- [SPARK-58288] Bump version to 1.1.0-SNAPSHOT in
mainbranch - [SPARK-58299] Upgrade
Icebergexample to use Spark 4.1.2 - [SPARK-58301] Upgrade
Apache DataFusion Cometto 0.17.1 - [SPARK-58303] Declare least-privilege
permissionsin GitHub Actions workflows - [SPARK-58304] Simplify examples to show only feature-specific configurations
- [SPARK-58306] Use
ubuntu-26.04(-arm)?in GitHub Action jobs - [SPARK-58331] Use Java-friendly
sparkVersionAPI instead oflabelsoverride inSparkAppDriverConf - [SPARK-58380] Update Spark 4.1/4.0 examples to use 4.1.3 and 4.0.4 docker images
- [SPARK-58426] Render each JVM option as its own command element
- [SPARK-58494] Upgrade spotless-plugin-gradle to 8.9.0
- [SPARK-58495] Use 7077 for
sparknamed container port in master StatefulSet - [SPARK-58527] Update
cyclonedxto 3.3.0 - [SPARK-58565] Run every assertion in the Helm RBAC test hooks
- [SPARK-58596] Remove
spark.dynamicAllocation.shuffleTracking.enabledfrom examples and docs - [SPARK-58597] Add
ExecutorPVCResizePluginexample - [SPARK-58599] Add
Recovery-mode Executorexample - [SPARK-58649] Allow SparkApplication drivers ingress to SparkCluster workers
- [SPARK-58654] Upgrade
Apache DataFusion Cometto 1.0.0 - [SPARK-58655] Upgrade
Gradleto 9.7.0 - [SPARK-58668] Upgrade
operator-frameworkto 5.5.1 - [SPARK-58669] Upgrade
spotbugs-gradle-pluginto 6.5.10 - [SPARK-58670] Upgrade JUnit to 6.1.3
- [SPARK-58676] Upgrade
cyclonedx-gradle-pluginto 3.4.0 - [SPARK-58835] Enable
spark.shuffle.service.enabledby default inSparkCluster - [SPARK-58839] Update
README.mdwith YuniKorn 1.9.0 - [SPARK-58840] Update
word-count-celebornexample to use Celeborn 0.7.0 and Spark 4.2.0 - [SPARK-58952] Upgrade
Gradleto 9.7.1 - [SPARK-58953] Upgrade
spotbugs-gradle-pluginto 6.5.11 - [SPARK-58958] Remove stale entries from
verification-metadata.xml - [SPARK-59002] Upgrade
Nettyto 4.2.17.Final - [SPARK-59003] Upgrade
spotless-plugin-gradleto 8.10.0 - [SPARK-59064] Update CI to test K8s 1.37
- [SPARK-59092] Honor Retry-After when retrying secondary resource creation on Kubernetes API errors
- [SPARK-59220] Pin Minikube
container-runtimetodockerto fix CI failures with Minikube 1.39.0 - [SPARK-59230] Upgrade
setup-gradleGitHub Action to v6.3.0 - [SPARK-59231] Use the latest
docker/*GitHub Actions - [SPARK-59246] Remove
pi-v1beta1.yamlexample - [SPARK-59262] Add Java 27 to GitHub Actions
- [SPARK-59265] Upgrade
spotless-plugin-gradleto 8.10.1 - [SPARK-59266] Upgrade Lombok to 1.18.48
- [SPARK-59267] Upgrade SpotBugs to 4.10.4
- [SPARK-59344] Update operator-sdk version to 5.6.0
- [SPARK-59381] Upgrade
setup-javato v6 - [SPARK-59388] Upgrade Vert.x to 4.5.33
- [SPARK-59392] Upgrade Jackson to 2.22.2
- [SPARK-59423] Upgrade
Nettyto 4.2.18.Final - [SPARK-59475] Add
suspendfield to BaseSpec for SparkApplication and SparkCluster - [SPARK-59486] Add
Kueuev1beta1 Workload CRD model and constants - [SPARK-59490] Add
KueueWorkloadFactoryforSparkApplicationandSparkCluster - [SPARK-59502] Support K8s
Warningevents forSparkApplicationandSparkClusterfailures - [SPARK-59503] Upgrade
KueueWorkload CRD model tov1beta2 - [SPARK-59504] Use
enabledkey convention in Helmvalues.yamlwhile honoring legacyenable - [SPARK-59519] Add opt-in
KueueRBAC rules to Helm chart - [SPARK-59537] Honor
operatorRbac.configManagement.createin Helm chart - [SPARK-59540] Warn about deprecated Helm
enablekeys viaNOTES.txt - [SPARK-59542] Support
spec.suspendto hold driver and master/worker creation inAppInitStepandClusterInitStep - [SPARK-59559] Add
kueueE2E test for resources withoutkueue.x-k8s.io/queue-name - [SPARK-59576] Support K8s
Normalevents for allSparkApplicationandSparkClusterstate transitions - [SPARK-59578] Clarify that Kueue
integrations.externalFrameworksis not needed inoperations.md - [SPARK-59584] Upgrade
actions/checkoutto v7 - [SPARK-59586] Support
spark.kubernetes.operator.events.excludedReasonsto skip K8s events by reason - [SPARK-59587] Narrow Helm RBAC verbs for
eventstocreate|get|patch - [SPARK-59588] Add
KueueWorkloadUtilsto request admission and release Kueue Workloads - [SPARK-59593] Add opt-in Kueue
Workloadinformer - [SPARK-59594] Release Kueue
WorkloadwhenAppCleanUpStepreleasesSparkApplicationresources - [SPARK-59596] Fix Helm chart configuration table in
operations.mdto matchvalues.yaml - [SPARK-59606] Map
SparkClusterpods byspark.operator/spark-cluster-nameinSparkClusterReconciler - [SPARK-59606][FOLLOWUP] Use
spark.operator/spark-cluster-namelabel selector forSparkClusterpod informer - [SPARK-59610] Fill missing
masterandworkerrequests of KueueWorkloadforSparkCluster - [SPARK-59612] Wait for Kueue
Workloadadmission inAppInitStepandClusterInitStep - [SPARK-59635] Requeue immediately when
AppRunningStepchanges the running state - [SPARK-59637] Remove duplicate driver termination check from
AppDriverStartObserver - [SPARK-59638] Support K8s events for
Kueueadmission ofSparkApplicationandSparkCluster - [SPARK-59644] Add Kueue
ResourceFlavorv1beta2 model - [SPARK-59649] Upgrade
slf4jto 2.0.19 - [SPARK-59654] Resolve Kueue
ResourceFlavornode labels and tolerations of admittedWorkload - [SPARK-59655] Fill
priorityClassRefandpriorityof KueueWorkload - [SPARK-59665] Upgrade
operator-sdkto 5.6.1 - [SPARK-59667] Do not treat a failed read as a missing secondary resource
- [SPARK-59676] Use the current branch version as the default JIRA fix version in
merge_spark_pr.py - [SPARK-59677] Support K8s events for suspended
SparkApplicationandSparkCluster - [SPARK-59679] Upgrade PMD to 7.27.0
- [SPARK-59680] Do not release the Kueue quota of a running driver or master on a failed read
- [SPARK-59690] Exclude PMD
GodClassrule - [SPARK-59692] Upgrade the minimum K8s version to v1.35
- [SPARK-59694] Do not treat an unanswered request as a permanent failure
- [SPARK-59700] Add a minimum interval between unchanged K8s event repeats
- [SPARK-59712] Apply Kueue
ResourceFlavornode labels and tolerations to Spark pods - [SPARK-59715] Release the Kueue quota of a terminated application with retained resources
- [SPARK-59720] Stop the infinite status update loop of a failed SparkCluster
- [SPARK-59729] Detect a terminated driver pod without container statuses
- [SPARK-59730] Update
architecture.mdto reflect the current code - [SPARK-59732] Terminate as
ResourceReleasedwhen resources are force released for restart - [SPARK-59734] Deprecate the unused
resourceRetainPolicyparameter ofApplicationStatus.terminateOrRestart - [SPARK-59738] Install Chainsaw from a pinned release binary in CI
- [SPARK-59739] Add
sinceJavadoc tag for all publicspark-operator-apimethods - [SPARK-59742] Build the operator image once and share it via artifact in CI
- [SPARK-59743] Consolidate
Helm Testsmatrix jobs into a single job - [SPARK-59750] Support
spec.suspendfor a runningSparkCluster - [SPARK-59753] Upgrade Java Operator SDK to 5.6.2
- [SPARK-59754] Release the Kueue
Workloadof suspendedSpark(Application|Cluster)regardless of the queue label - [SPARK-59758] Release the Kueue
Workloadof a stoppedSparkApplicationregardless of the queue label - [SPARK-59760] Add
spark.kubernetes.operator.kueue.enabledto disable the Kueue integration by default - [SPARK-59766] Make a pending Kueue
Workloadfollow the changed or removed queue label - [SPARK-59767] Consolidate
Kueueintegration tests into thekueueE2E test - [SPARK-59769] Apply the flavors of an admitted Kueue
Workloadto a resource whose queue label was removed - [SPARK-59770] Add
ValidatingAdmissionPolicyto keep the Kueue queue of startedSpark(Application|Cluster) - [SPARK-59771] Release the Kueue
WorkloadofSparkApplicationonly after its pods are gone - [SPARK-59775] Upgrade
Gradleto 9.8.0 - [SPARK-59780] Use Java 27 toolchain while supporting Java 21+
- [SPARK-59790] Bound the wait for the terminating pods of a suspended
SparkCluster - [SPARK-59795] Respect user-specified terminationGracePeriodSeconds of
SparkClusterpods - [SPARK-59797] Preserve user-specified dnsConfig of SparkCluster worker pods
- [SPARK-59800] Handle an evicted or deactivated Kueue
Workloadbefore requesting the driver or master - [SPARK-59803] Handle an evicted or deactivated Kueue
Workloadof a runningSparkCluster - [SPARK-59809] Remove the
AZULvendor requirement from Java 27 toolchain - [SPARK-59810] Use Ubuntu 26.04 LTS-based
gradleimage for builder stage - [SPARK-59811] Check the live driver of a suspended
SparkApplicationbefore releasing its admitted KueueWorkload - [SPARK-59814] Clarify when the
SubmittedK8s event is published inconfiguration.md - [SPARK-59815] Add
eventsE2E test for state transition events ofSpark(Application|Cluster) - [SPARK-59826] Do not serialize
is(Admitted|QuotaReserved|Finished)of KueueWorkloadStatus - [SPARK-59830] Unify K8s event sources into
spark-kubernetes-operator - [SPARK-59833] Upgrade Jackson to 2.22.3
- [SPARK-59834] Upgrade the base image to
alpine:3.24 - [SPARK-59836] Remove unused
libstdc++package from Docker image - [SPARK-59838] Upgrade Mockito to 5.24.0
- [SPARK-59846] Record the Kueue
PodsReadycondition of startedSpark(Application|Cluster) - [SPARK-59848] Use a sequential stream in
PodUtils.isPodReady - [SPARK-59866] Support K8s events for Kueue eviction of running
SparkApplication - [SPARK-59868] Update GitHub Actions to the latest approved versions
- [SPARK-59870] Clarify the
Failedmessage ofSparkClusterand the K8s events docs - [SPARK-59876] Suspend and requeue a running
SparkClusteron KueuePodsReadyTimeout - [SPARK-59878] Exclude
(UWF|NP)_UNWRITTEN_FIELDfor test classes inspotbugs_exclude.xml - [SPARK-59879] Close PrintWriter with try-with-resources in ConfOptionDocGenerator
- [SPARK-59892] Honor non-positive
spark.kubernetes.operator.reconciler.retry.maxIntervalSecondsas unlimited - [SPARK-59895] Add
migration_guide.md - [SPARK-59903] Upgrade
Icebergexample to use Iceberg 1.12.0 - [SPARK-59926] Do not retry failed K8s event writes
- [SPARK-59930] Upgrade Kueue to v0.20.0 in CI
- [SPARK-59931] Simplify the K8s event messages of errors and
SchedulingFailure - [SPARK-59932] Document Kueue v0.20.0+ as the recommended version
- [SPARK-59935] Fix Prometheus
_sumand quantiles of histograms and timers - [SPARK-59937] Recommend
spark.driver.timeoutinstead of Kueuemax-exec-time-secondslabel - [SPARK-59939] Deprecate
v1beta1version of SparkApp and SparkCluster CRDs - [SPARK-59953] Add Kueue examples and use them as the Kueue E2E fixtures
- [SPARK-59957] Use
sparkformeta.helm.sh/release-nameof the dynamic config E2E fixtures - [SPARK-59958] Deduplicate E2E fixtures and state transition assertions
- [SPARK-59960] Fix Helm command examples to use
sparkrelease name consistently - [SPARK-59963] Fix RBAC to allow
Sparkdriver to createDeploymentand scale executors - [SPARK-59964] Fix workload RBAC to grant
deletecollectionto Spark drivers - [SPARK-59976] Use
sparkrelease name forhelm uninstallinwatched-namespacesE2E test - [SPARK-59979] Fix
podLogsselectors and collect all log lines in E2E tests - [SPARK-59980] Upgrade
spotbugs-gradle-pluginto 6.5.12 - [SPARK-59984] Parse Boolean config values like Apache Spark and use the default value for null
- [SPARK-59990] Fix the documented precedence of system properties in
configuration.md - [SPARK-59991] Remove unused
operatorConfiguration.appendand fix brokenconf/links - [SPARK-60004] Upgrade
Apache DataFusion Cometto 1.1.0 - [SPARK-60006] Upgrade
Nettyto 4.2.19.Final - [SPARK-60007] Upgrade
Apache Glutento 1.7.0 - [SPARK-60008] Enable K8s events by default
- [SPARK-60014] Upgrade PMD to 7.28.0
- [SPARK-60015] Remove JIRA IDs from
migration_guide.md - [SPARK-60017] Fix
Workloadaccess revocation andSuspendeddowngrade notes - [SPARK-60018] Add
ApplicationStateSummary.SuspendedandApplicationStatus#resume - [SPARK-60020] Fix
KubernetesMetricsInterceptorexceptions fornamespacespaths and out-of-range response codes - [SPARK-60025] Support
spec.suspendfor a runningSparkApplication - [SPARK-60039] Upgrade
checkstyleto 13.11.0 - [SPARK-60042] Support Kueue admission check
podSetUpdates - [SPARK-60052] Suspend and requeue a running
SparkApplicationon Kueue eviction - [SPARK-60056] Split
kueueE2E test group intokueueandkueue-pods-ready - [SPARK-60057] Add
suspendReasontoSuspendedstates - [SPARK-60065] Build the operator image without Gradle in the build-image CI job
- [SPARK-60068] Run unit tests on each matrix JDK and skip linters in
build-testCI - [SPARK-60080] Add
Kueue Admission and Workload Lifecyclesection toarchitecture.md - [SPARK-60082] Deduplicate the remaining E2E
SparkApplicationfixtures - [SPARK-60086] Document Kueue v0.20.0+ as the required version
- [SPARK-60087] Add Kueue feature support table to
spark_custom_resources.md - [SPARK-60116] Document Kueue default
LocalQueueas not supported - [SPARK-60184] Fix workload RBAC to allow
ExecutorResizePluginto resize executor pods - [SPARK-60191] Add
ExecutorResizePluginE2E test topi-java25group - [SPARK-60224] Upgrade
Gradleto 9.8.1 - [SPARK-60225] Support dynamic allocation with Kueue by reserving
maxExecutorson opt-in - [SPARK-60236] Document Kueue v0.20.0+ as the required version in
spark_custom_resources.md - [SPARK-60284] Use
Eclipse Temurininstead ofAzul Zuluin CIs and Docker image - [SPARK-60287] Support Java 27
- [SPARK-60291] Drop Java 26 Support
- [SPARK-60302] Change the default value of
spark.redaction.regexlike Spark 4.3.0 - [SPARK-60307] Exclude
org.fusesource.leveldbjniadditionally - [SPARK-60401] Stop the infinite status update loop of a
ClientModeSparkApplication - [SPARK-60402] Ignore sidecar containers when observing the driver pod
- [SPARK-60408] Migrate
notify_test_workflow.ymlfrompull_request_targettoworkflow_run - [SPARK-60427] Update GitHub Actions to the latest approved versions and pin
setup-minikubeto a commit SHA - [SPARK-60429] Fix Helm chart to create sentinel resources in all sentinel namespaces
- [SPARK-60438] Add the name getters of the Services and NetworkPolicy of SparkCluster
- [SPARK-60463] Release the resources of a
SparkClusteronSchedulingFailureand end it asResourceReleased - [SPARK-60475] Delete the HPA and PDB of a
SparkClusterafter releasing its KueueWorkload - [SPARK-60512] Fix
kueueE2E test flakiness by makingQuotaReservedassertions nil-safe - [SPARK-60513] Fix
LICENSE-binary,NOTICE-binaryandlicenses-binaryto match the bundled libraries - [SPARK-60626] Upgrade Spark to 4.2.1
- [SPARK-60630] Upgrade Java Operator SDK to 5.6.3
- [SPARK-60638] Upgrade
spotless-plugin-gradleto 8.10.4 - [SPARK-60660] Upgrade SpotBugs to 4.10.5 and
spotbugs-gradle-pluginto 6.5.13 - [SPARK-60793] Upgrade Spark to 4.3.0
- [SPARK-60795] Upgrade
fabric8to 7.9.0 and update CRDs for K8s 1.37 - [SPARK-60798] Upgrade Jackson to 2.22.4
- [SPARK-60802] Upgrade
Gradleto 9.8.2 - [SPARK-60815] Upgrade JaCoCo to 0.8.16 for Java 27
- [SPARK-61105] Upgrade docker images to Apache Spark 4.3.0, 4.1.4, and 4.0.5