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 0.9.0 (App Version) with Helm chart 1.7.0 (Chart Version).
Notable Features
- Support K8s v1.34, v1.35, and v1.36
- Support Apache Spark 3.5, 4.0, 4.1, and tested with 4.2.0-preview5
- Upgrade Spark to 4.2.0-preview5 to support heterogeneous K8s executor management
- Promote native acceleration for Spark 4 on Kubernetes
- Support Java 26
Docker Image
docker pull apache/spark-kubernetes-operator:0.9.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-52251: Use
crd-generator-clito generate CRDs - SPARK-53640: Operator Helm Chart: support additionalContainers, volumes, volumeMounts as array
- SPARK-55554: Add
Apache Glutenexample and integration test - SPARK-55905: Exponential backoff for getOrCreateSecondaryResource attempt
- SPARK-55944: Bump version to 0.9.0-SNAPSHOT in
mainbranch - SPARK-56004: Upgrade java-operator-sdk library to 5.3.0
- SPARK-56005: Propagate MDC context in SparkClusterReconciler
- SPARK-56037: Use Java 26 instead of 26-ea
- SPARK-56078: Expose failureThreshold and timeoutSeconds in operator livenessProbe schema
- SPARK-56087: Use Java 26 toolchain while supporting Java 17+
- SPARK-56088: Support Java 26
- SPARK-56091: Upgrade
Apache DataFusion Cometto 0.14.0 - SPARK-56096: Upgrade
mockitoto 5.23.0 - SPARK-56099: Upgrade
spotless-pluginto 8.4.0 - SPARK-56103: Upgrade
junitto 6.0.3 - SPARK-56105: Upgrade
shadow-jar-pluginto 8.3.10 - SPARK-56107: Remove
docker-entrypoint.sh - SPARK-56108: Remove
Super-Linterfrom GitHub Actions jobs - SPARK-56114: Use Java 26 always except
build-testmatrix job - SPARK-56116: Upgrade
Gradleto 9.4.1 - SPARK-56117: Make
spotlessignore.claudedirectory - SPARK-56119: Sync
docker-related GitHub Actions versions to the ASF approved patterns - SPARK-56127: Use
zulu-openjdk-alpineto minimize the Docker image - SPARK-56129: Exclude
Netty QUICnative libraries to minimize Docker image - SPARK-56130: Make
values.schema.jsonup-to-date - SPARK-56131: Use
jlinkcustom JRE runtime to minimize Docker image size - SPARK-56132: Increase
emptyDirsizeLimit to 200Mi forpi-with-comet - SPARK-56136: Add PySpark 4.1.1 integration test coverage
- SPARK-56138: Replace
ubuntu-latestwithubuntu-sliminbuild-testGitHub Actions job - SPARK-56139: Add E2E test for
ApplicationTimeoutConfigwithdriverStartTimeoutMillis - SPARK-56141: Cache Gradle Java Toolchain in CI
- SPARK-56142: Add worker StatefulSet replica validation to SparkCluster e2e test
- SPARK-56144: Remove no-op
spark.master.rest.enabledbecause it is enabled by default since Apache Spark 4.1 - SPARK-56146: Add e2e test for
resourceRetainPolicy: OnFailurewith a failed SparkApp - SPARK-56162: Prevent Jackson from using reflection on final fields during deserialization for JEP-500
- SPARK-56192: Exclude
spotbugs-annotationsfrom the uber jar - SPARK-56193: Fix
spark-operator-apito usecompileOnlyforLombok - SPARK-56194: Upgrade
Lombokto 1.18.44 - SPARK-56195: Fix
BaseStatusto handle when K8s API returns null for stateTransitionHistory - SPARK-56198: Update Operator to Java Operator SDK 5.3.2
- SPARK-56210: Remove
lombok.SneakyThrowsfromStatusRecorder - SPARK-56211: Ban
lombok.(SneakyThrows|val|var) - SPARK-56212: Fix
spark-versionsandpythone2e test flakiness by explicit clean-up - SPARK-56213: Upgrade
Nettyto 4.2.12.Final - SPARK-56215: Exclude
netty-codec-*-quicdependencies - SPARK-56218: Exclude Netty
io_uring-related dependencies - SPARK-56228: Fix
StatusRecorderto refreshresourceVersionon 409 Error before retrying - SPARK-56229: Remove
io.netty.noUnsafeaccording to Netty changes - SPARK-56267: Use
testCompileOnlyforspotbugs-annotationsinspark-operator - SPARK-56268: Remove unnecessary log4j dependencies from
spark-operator-api - SPARK-56269: Fix
Gradle 10deprecation warnings - SPARK-56274: Simplify
SparkClusterSubmissionWorker.getResourceSpec - SPARK-56276: Fix file descriptor leak in SparkAppResourceSpecFactory
- SPARK-56281: Upgrade PMD to 7.23.0
- SPARK-56282: Exclude unnecessary
avrodependency - SPARK-56283: Exclude HDFS/YARN UI resources
- SPARK-56285: Add
minimizetoshadowJartask - SPARK-56289: Upgrade minimum Java runtime version to 21
- SPARK-56291: Make BaseStateSummary a sealed interface
- SPARK-56292: Make
(App|Cluster)ReconcileStepabstract classessealed - SPARK-56293: Make
BaseAppDriverObserverabstract classsealed - SPARK-56294: Apply exhaustive
switchforResourceRetainPolicyandClusterStateSummary - SPARK-56297: Use Virtual Threads (JEP 444) for unbounded reconciliation thread pool
- SPARK-56299: Fix
Dockerfileforjdepsto use 21 - SPARK-56308: Remove invalid
log4j2.contextSelectorfrom testlog4j2.properties - SPARK-56309: Upgrade
log4jto 2.25.4 - SPARK-56365: Remove hard-coded
APP_VERSIONfrom Dockerfile - SPARK-56366: Update
README.mdby removing17 - SPARK-56379: Upgrade
Hadoopto 3.5.0 - SPARK-56394: Upgrade the minimum K8s version to v1.34
- SPARK-56396: Support
dependencyUpdatesGradle task - SPARK-56401: Use
setup-gradleGitHub Actions in CIs - SPARK-56405: Enable
Gradleconfiguration cache - SPARK-56408: Introduce
OwnerResourceDecoratorand use it instead(Driver|Cluster)Decorator - SPARK-56409: Consolidate Netty exclusions into root
build.gradle - SPARK-56417: Consolidate Lombok and JUnitPlatform configurations into root
build.gradle - SPARK-56418: Unify
getOrCreateLocalFileFor(Driver|Executor)SpectogetOrCreateLocalFileForSpec - SPARK-56433: Upgrade
operator-sdkto 5.3.3 - SPARK-56434: Add
Deployment Topologydiagram - SPARK-56435: Upgrade
Sparkto 4.2.0-preview4 - SPARK-56442: Use Java-friendly APIs of
JavaMainAppResource - SPARK-56443: Use Java-friendly API of
KubernetesDriverSpec - SPARK-56445: Exclude unused
LoosePackageCouplingPMD rule - SPARK-56446: Use Java
OptionalinSparkAppDriverConf.createmethod signature - SPARK-56473: Rename
create_spark_jira.pytocreate_jira_and_branch.py - SPARK-56487: Update
spotbugs-gradle-pluginto 6.5.0 - SPARK-56544: Update
gradle-versions-pluginto 0.54.0 - SPARK-56545: Update
spotbugs-gradle-pluginto 6.5.1 - SPARK-56552: Update
cyclonedxto 3.2.4 - SPARK-56571: Upgrade
Apache DataFusion Cometto 0.15.0 - SPARK-56621: Update CI to test K8s 1.36
- SPARK-56628: Update
lombokto 1.18.46 - SPARK-56644: Support periodic GC
- SPARK-56665: Use
gradle:9.4.1-jdk26-nobleDocker image for builder stage - SPARK-56667: Upgrade
Gradleto 9.5.0 - SPARK-56679: Fix Helm chart to render valid YAML for operator ConfigMap
- SPARK-56701: Upgrade
Apache DataFusion Cometexample to use Spark 4.0.2 - SPARK-56715: Use
CrashOnOutOfMemoryErrorwith stderr redirection - SPARK-56723: Use the latest
docker/*GitHub Actions - SPARK-56727: Add
Apache DataFusion CometK8s integration test - SPARK-56728: Simplify
chainsawtest manifests viaapplysyntax - SPARK-56732: Upgrade
Sparkto 4.2.0-preview5 - SPARK-56733: Improve
SparkAppResourceSpecto use Java-friendlyKubernetesDriverSpecAPIs - SPARK-56735: Improve
SparkClusterResourceSpecto use Java-friendlySparkConfAPI - SPARK-56747: Documentation fixes
- SPARK-56751: Promote native acceleration for Spark 4 on Kubernetes (Comet, Gluten)
- SPARK-56752: Enable
spark.kubernetes.driver.annotateExitExceptionby default - SPARK-56776: Upgrade
Nettyto 4.2.13.Final - SPARK-56777: Upgrade
log4jto 2.26.0 - SPARK-56778: Upgrade
checkstyleto 13.4.2 - SPARK-56779: Upgrade
spotbugs-gradle-pluginto 6.5.4 - SPARK-56780: Upgrade PMD to 7.24.0
- SPARK-56785: Use the latest
actions/*GitHub Actions - SPARK-56786: Add
pi-preview.yamlwith Apache Spark 4.2.0-preview5 - SPARK-56787: Add
Deployment-based SparkApp example - SPARK-56789: Add
ExecutorResizePluginexample - SPARK-56823: Update GitHub Actions YAML file in
branch-0.9