Released on 2025-03-21.
-
Operators deployed by Helm will contain an extra pod annotation:
checksum/config. This field triggers a rollout of Deployments when the ConfigMap contents change. -
Operators for Java products now support setting JVM arguments. See the override concept page and issues#584.
-
Apache Airflow: Authorization can now be delegated to an Open Policy Agent. See airflow-operator#446.
-
Apache Superset: Support Open Policy Agent role mapping. See superset-operator#582.
-
Additional trust roots can be specified in an
autoTlsSecretClass. See theautoTlsbackend documentation. -
The Stackable Secret Operator’s
experimentalCertManagerbackend now supports specifying custom key lengths. TheautoTlsbackend has supported this since 24.11. -
Users can now configure the lifetime of self-signed certificates directly in the product’s custom resources which influences the frequency of pod restarts. Details can be found on the temporary credentials lifetime page.
Products now log information about their container environment, on startup and on an interval after that.
Add Hadoop libraries for accessing Azure and GCP. See docker-images#943.
Starting with this release, our OCI registry located at oci.stackable.tech was promoted to stable.
This means that our operators, the product image selection and tools will use the registry by default instead of the previous Docker repository located at docker.stackable.tech.
|
Note
|
To ease the transition, operator images, product images, and operator Helm charts are published both on the old Docker repository as well as the new OCI registry.
Subsequent releases will only be published on |
Using the old Docker repository is still possible:
-
Products can use the old images by setting the
spec.image.repotodocker.stackable.tech/stackablein the respective product CustomResource. -
Our
stackablectltool can pull Helm charts from the old repository by providing the--chart-source repoargument during operator installs. Unfortunately, some Helm chart values point to the OCI registry andstackablectldoesn’t support overriding these values. Usehelmdirectly instead. -
Operators can be installed via
helm installwith a customimage.repositoryvalue set.
$ helm repo add stackable-stable https://repo.stackable.tech/repository/helm-stable/
$ helm repo update stackable-stable
$ helm install --wait airflow-operator stackable-stable/airflow-operator --version 25.3 --set image.repository=docker.stackable.tech/stackable/airflow-operatorUsers can now opt-in to experimental support for improved DNS performance by specifying a fully qualified domain name (with a trailing dot) as Kubernetes cluster domain for our operators. This can reduce the amount of DNS queries within the cluster, but might have side effects, hence we consider the support experimental for now. Take a look at our documentation to find out how to enable this improvement.
41 CVEs were fixed in the Stackable product images. This includes 6 critical and 16 high-severity CVEs.
OPA Rego rules no longer require the future.keywords import.
They have been stabilized in OPA 1.0 and are now implicitly imported.
The default memory limits have been increased for following roles. See druid-operator#685.
-
Coordinator: From
512Mito768Mi -
Middle Manager: From
1Gito1500Mi.
|
Note
|
Upgrades to existing deployments could cause memory limits to be reached on the node/namespace. |
The the default memory reservation of Hive metastore has been increased from 512Mi to 768Mi to avoid OOMKilled events.
See hive-operator#578.
-
Previously, pods with a Listener volume were stuck in an "Unknown" state after their node was restarted. With this release, Listener volumes are correctly republished and the pods restart as expected. See listener-operator#262.
-
Previously, TLS certificates generated by the secret operator referenced a wrong issuer if the secret operator used an intermediate CA. With this release, the issuer of the generated TLS certificate is correct and using an intermediate CA in the secret operator works as expected. See secret-operator#566.
-
In 24.11 we used a custom build of jmx_exporter to resolve a performance degradation. In this release, Java products ship with the fixed upstream jmx_exporter 1.1.0 which includes the fix.
-
In 24.11, HDFS metrics suffixed with
_total,_created, and_infowere not exported by the jmx_exporter. With this release, metrics suffixed with_total, e.g.hadoop_namenode_files_total, are emitted again. Metrics originally suffixed with_createdand_infoare now suffixed with_created_and_info_to be OpenMetrics compliant. See hdfs-operator#634.
The -nodeport discovery ConfigMaps have been deprecated for removal.
Use the primary discovery CMs instead.
See the deprecation tracking issue for more information.
As with previous SDP releases, many product images have been updated to their latest versions. The LTS version has in many cases also been adjusted in line with our support policy.
Refer to the supported versions documentation for a complete overview including LTS versions or deprecations.
The following new product versions are now supported:
-
Apache Airflow: 2.10.4
-
Apache Druid: 31.0.1, 30.0.1 (LTS)
-
Apache Hadoop: 3.4.1 (LTS)
-
Apache HBase: 2.6.1 (LTS)
-
Apache Hive: 4.0.0 (LTS), 4.0.1 (experimental)
-
Apache Kafka: 3.7.2 (LTS), 3.9.0
-
Apache NiFi: 1.28.1, 2.2.0 (experimental)
-
Apache Spark: 3.5.5 (LTS)
-
Apache Superset: 4.1.1
-
Apache ZooKeeper: 3.9.3 (LTS)
-
Open Policy Agent: 1.0.1
-
Trino: 470
The following product versions are deprecated and will be removed in a later release:
-
A new demo called
jupyterhub-keycloakwas added and is available viastackablectl. The JupyterHub-Keycloak integration demo offers a comprehensive and secure multi-user data science environment on Kubernetes, integrating Single Sign-on Jupyter notebooks with Stackable Spark and S3 storage. The demo can be installed by runningstackablectl demo install jupyterhub-keycloak. See demos#155 and documentation#715. -
Demos and stacks are now versioned and the main branch is considered unstable.
stackablectlby default installs the latest stable demo and/or stack. A specific release can be targeted by providing the--releaseargument. See stackablectl#340. -
Add new argument --chart-source so that operator charts can be pulled either from an OCI registry (the default) or from a index.yaml-based repository. See stackablectl#344.
-
Use
rustls-native-certsso thatstackablectlcan be used in environments with internal PKI. See stackablectl#351. -
Use
heritagelabel when looking up theminio-consolestacklet. See stackablectl#364. -
Improve tracing and log output. See stackablectl#365.
This release supports the following Kubernetes versions:
-
1.32 -
1.31 -
1.30
These Kubernetes versions are no longer supported:
-
1.29
This release is available in the RedHat Certified Operator Catalog for the following OpenShift versions:
-
4.17 -
4.16 -
4.15 -
4.14
Of the changes mentioned above, the following are breaking (or could lead to breaking behaviour), and you will need to adapt your existing CRDs accordingly:
S3 bucket region can now be configured for S3Connection, S3Bucket, and inline S3 references.
It defaults to us-east-1.
See the tracking issue.
|
Note
|
Products that use the Hadoop S3 implementation previously defaulted to us-east-2, so if there are bucket connectivity problems, you will need to set the region us-east-2 explicitly.
|
The field .spec.clusterConfig.dagsGitSync[].wait changed from uint8 to our human-readable Duration type.
If you have specified a time without a unit, eg: wait: 20, you will need to add the applicable unit, eg: wait: 20s.
|
Note
|
All Druid versions are affected. |
If druid-opa-authorizer is used, input.user needs to be replaced by input.authenticationResult.identity in applicable Rego rules.
Change in druid-opa-authorizer#85.
-
Using
iffor all rules andcontainsfor multi-value rules is now mandatory. -
strictmode is now enabled by default. For more upgrade information, read the Upgrading Rego section of the official documentation.
Trino now uses the native S3 implementation which has the following requirements for S3 connections:
-
TLS is always enabled and cannot be disabled.
-
Client-side encryption is not supported. Server-side encryption (SSE) is the recommended alternative.
-
Multipart (non-streaming) writes and upload are not supported.
Legacy S3 support (via Hadoop) has been disabled and will be removed in a future version of Trino.
Uninstall the 24.11 release
$ stackablectl release uninstall 24.11
Uninstalled release '24.11'
Use "stackablectl release list" to list available releases.
# ...Afterwards you will need to upgrade the CustomResourceDefinitions (CRDs) installed by the Stackable Platform.
The reason for this is that helm will uninstall the operators but not the CRDs.
This can be done using kubectl replace.
kubectl replace -f https://raw.githubusercontent.com/stackabletech/airflow-operator/25.3.0/deploy/helm/airflow-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/commons-operator/25.3.0/deploy/helm/commons-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/druid-operator/25.3.0/deploy/helm/druid-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hbase-operator/25.3.0/deploy/helm/hbase-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hdfs-operator/25.3.0/deploy/helm/hdfs-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hive-operator/25.3.0/deploy/helm/hive-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/kafka-operator/25.3.0/deploy/helm/kafka-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/listener-operator/25.3.0/deploy/helm/listener-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/nifi-operator/25.3.0/deploy/helm/nifi-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/opa-operator/25.3.0/deploy/helm/opa-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/secret-operator/25.3.0/deploy/helm/secret-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/spark-k8s-operator/25.3.0/deploy/helm/spark-k8s-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/superset-operator/25.3.0/deploy/helm/superset-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/trino-operator/25.3.0/deploy/helm/trino-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/zookeeper-operator/25.3.0/deploy/helm/zookeeper-operator/crds/crds.yamlcustomresourcedefinition.apiextensions.k8s.io "airflowclusters.airflow.stackable.tech" replaced
customresourcedefinition.apiextensions.k8s.io "authenticationclasses.authentication.stackable.tech" replaced
customresourcedefinition.apiextensions.k8s.io "s3connections.s3.stackable.tech" replaced
...Install the 25.3 release
$ stackablectl release install 25.3
Installed release '25.3'
Use "stackablectl operator installed" to list installed operators.Use helm list to list the currently installed operators.
You can use the following command to uninstall all operators that are part of the 24.11 release:
$ helm uninstall airflow-operator commons-operator druid-operator hbase-operator hdfs-operator hive-operator kafka-operator listener-operator nifi-operator opa-operator secret-operator spark-k8s-operator superset-operator trino-operator zookeeper-operator
release "airflow-operator" uninstalled
release "commons-operator" uninstalled
...Afterward you will need to upgrade the CustomResourceDefinitions (CRDs) installed by the Stackable Platform.
The reason for this is that helm will uninstall the operators but not the CRDs.
This can be done using kubectl replace:
kubectl replace -f https://raw.githubusercontent.com/stackabletech/airflow-operator/25.3.0/deploy/helm/airflow-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/commons-operator/25.3.0/deploy/helm/commons-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/druid-operator/25.3.0/deploy/helm/druid-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hbase-operator/25.3.0/deploy/helm/hbase-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hdfs-operator/25.3.0/deploy/helm/hdfs-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/hive-operator/25.3.0/deploy/helm/hive-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/kafka-operator/25.3.0/deploy/helm/kafka-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/listener-operator/25.3.0/deploy/helm/listener-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/nifi-operator/25.3.0/deploy/helm/nifi-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/opa-operator/25.3.0/deploy/helm/opa-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/secret-operator/25.3.0/deploy/helm/secret-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/spark-k8s-operator/25.3.0/deploy/helm/spark-k8s-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/superset-operator/25.3.0/deploy/helm/superset-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/trino-operator/25.3.0/deploy/helm/trino-operator/crds/crds.yaml
kubectl replace -f https://raw.githubusercontent.com/stackabletech/zookeeper-operator/25.3.0/deploy/helm/zookeeper-operator/crds/crds.yamlcustomresourcedefinition.apiextensions.k8s.io "airflowclusters.airflow.stackable.tech" replaced
customresourcedefinition.apiextensions.k8s.io "authenticationclasses.authentication.stackable.tech" replaced
customresourcedefinition.apiextensions.k8s.io "s3connections.s3.stackable.tech" replaced
...Install the 25.3 release
helm repo add stackable-stable https://repo.stackable.tech/repository/helm-stable/
helm repo update stackable-stable
helm install --wait airflow-operator stackable-stable/airflow-operator --version 25.3.0
helm install --wait commons-operator stackable-stable/commons-operator --version 25.3.0
helm install --wait druid-operator stackable-stable/druid-operator --version 25.3.0
helm install --wait hbase-operator stackable-stable/hbase-operator --version 25.3.0
helm install --wait hdfs-operator stackable-stable/hdfs-operator --version 25.3.0
helm install --wait hive-operator stackable-stable/hive-operator --version 25.3.0
helm install --wait kafka-operator stackable-stable/kafka-operator --version 25.3.0
helm install --wait listener-operator stackable-stable/listener-operator --version 25.3.0
helm install --wait nifi-operator stackable-stable/nifi-operator --version 25.3.0
helm install --wait opa-operator stackable-stable/opa-operator --version 25.3.0
helm install --wait secret-operator stackable-stable/secret-operator --version 25.3.0
helm install --wait spark-k8s-operator stackable-stable/spark-k8s-operator --version 25.3.0
helm install --wait superset-operator stackable-stable/superset-operator --version 25.3.0
helm install --wait trino-operator stackable-stable/trino-operator --version 25.3.0
helm install --wait zookeeper-operator stackable-stable/zookeeper-operator --version 25.3.0In Hive 4.0.1 with Kerberos enabled, health checks cause excessive error logs:
ERROR [Metastore-Handler-Pool: Thread-65] server.TThreadPoolServer: Thrift Error occurred during processing of message.This is because the health check doesn’t complete SASL authentication. The error is ignorable, though it can be hidden with the following configuration:
spec:
metastore:
config:
logging:
containers:
hive:
loggers:
org.apache.thrift.server.TThreadPoolServer:
level: NONE|
Note
|
This will suppress all logging from TThreadPoolServer, including log events that might be useful for diagnosing issues.
|