Releases¶
This page tracks notable changes in Apache Superset Kubernetes Operator releases.
Unreleased¶
Changed¶
- Kubernetes support now covers the three newest
kind-published minor versions instead of two. CI tests Kubernetes 1.37, 1.36, and 1.35 natively, with the experimentalnextlane disabled again (#317).
Fixed¶
- The operator now requests
updateonsupersets/finalizers, so reconciliation no longer fails on clusters with theOwnerReferencesPermissionEnforcementadmission plugin enabled (e.g. OpenShift), where the API server previously rejected theblockOwnerDeletionowner references the operator sets on child resources (#359, @villebro).
Security¶
- Breaking: CRs with
serviceAccount.create=true(or unset) andserviceAccount.name != metadata.nameare now rejected at admission. To use a pre-existing ServiceAccount with a different name, setserviceAccount.create=false(#324, @villebro). - Breaking: Valkey cache and results-backend
keyPrefixvalues are now constrained to^[A-Za-z0-9._:-]*$(max 128 characters); values containing spaces, slashes, or other characters outside that set are rejected. The safer rendering also causes a one-time config-checksum change and pod roll on upgrade (#325, @villebro). - Seed
excludeTables,excludeTableData, andpostSeedSQLvalues are now passed literally to generated seed scripts; values that previously relied on shell expansion no longer expand (#325, @villebro). - Breaking: Celery Flower is no longer published on the Ingress/Gateway surface in
Productionby default. Flower's default command ships without authentication and its dashboard discloses task names and arguments — for Superset, other users' async SQL Lab statements and alert/report payloads. InProduction(the default) Flower is fanned out onto the end-user host — and its port opened in the built-in NetworkPolicy — only when you explicitly setceleryFlower.service.gatewayPath;DevelopmentandStagingcontinue to publish it by default. To keep exposing Flower in Production, setceleryFlower.service.gatewayPath(e.g./flower) after placing authentication in front of it (e.g.FLOWER_BASIC_AUTHinjected from a Secret viaceleryFlower.podTemplate.container.env) (#279, @villebro). - Breaking: A
ProductionSuperset CR can no longer be changed in place toDevelopmentorStaging; delete and recreate the instance to change environment out ofProduction. Upgrades towardProductionand non-Production transitions are unaffected (#327, @villebro).
0.2.0 - 2026-08-11¶
Added¶
- Seconds and year precision in
cronSchedule. Lifecycle taskcronSchedulefields now accept 6- and 7-field cron expressions in addition to the classic 5-field form — an optional leading seconds field and/or trailing year field (e.g.*/30 * * * * *every 30 seconds,0 0 2 * * * 2027). Existing 5-field schedules are unaffected (#238, @villebro). - Helm
imagePullSecrets. The Helm chart now exposes animagePullSecretsvalue that setsspec.template.spec.imagePullSecretson the operator Deployment, letting operators pull the manager image from a private registry. The referenced Secrets must already exist in the release namespace — the chart does not create them (#240, @younsl). - Helm
topologySpreadConstraints. The Helm chart now exposes atopologySpreadConstraintsvalue that setsspec.template.spec.topologySpreadConstraintson the operator Deployment, letting operators distribute manager pods across failure domains such as nodes and zones (#213, @younsl). - Helm
revisionHistoryLimit. The Helm chart now exposes arevisionHistoryLimitvalue that allows settingspec.revisionHistoryLimiton the operator Deployment, capping the number of old ReplicaSets retained for rollback (@younsl). - Helm extra manifests. The Helm chart now supports
extraManifestsfor rendering trusted, release-scoped Kubernetes manifests with Helmtpl. Use it for companion resources owned by the operator release, not shared cluster infrastructure such as Gateway API controllers, CRDs, or shared Gateways (#196, @younsl). - Helm resize policy. The Helm chart now supports
resizePolicyon the manager container, controlling whether an in-place pod resize (InPlacePodVerticalScaling) restarts the container (#200, @younsl).
Changed¶
- Breaking: renamed the "version" status fields to "tag".
status.version→status.tag(thekubectl getcolumn is renamed Version → Tag), andstatus.lifecycle.upgrade.fromVersion/toVersion→fromTag/toTag. No behavior change. - Breaking: downgrade blocking is removed. Any change to the lifecycle image tag now re-runs the migrate task (
superset db upgrade) regardless of direction — the operator no longer performs semver comparison or setsstatus.phase: Blockedon a version decrease. The migrate task only runssuperset db upgrade(Superset's down migrations are poorly tested and often break, so the operator never runs them), so take a database backup before an upgrade if you may need to revert. Thedirectionfield is removed fromstatus.lifecycle.upgrade, and theVersionComparisonSkippedwarning event no longer fires. - Breaking: the lifecycle
clonetask is renamed toseed. Renamespec.lifecycle.clonetospec.lifecycle.seed(and itspostCloneSQLfield topostSeedSQL) in your Superset resources. The task Job name suffix changes from-cloneto-seed, and the lifecycle status phase fromCloningtoSeeding. Customseed.commandscripts must read the renamedSUPERSET_OPERATOR__SEED_SRC_*environment variables.
Security¶
- Credential redaction in task failure output. Lifecycle task failure messages are now scrubbed with best-effort pattern-based redaction before being persisted to the parent Superset status and Kubernetes Events: passwords embedded in connection URIs and common credential assignments (
password=...,token=..., etc.) are masked. This mitigates the known limitation where a failing task command could leak credential fragments into status (@younsl).
0.1.1 - 2026-06-29¶
Fixed¶
- Honor HPA-managed replica counts: the operator no longer overwrites the replica count on Deployments whose scaling is owned by a HorizontalPodAutoscaler (#152, @pashtet04).
0.1.0 - 2026-06-10¶
Added¶
- Initial release (@villebro).
Known limitations¶
- Websocket server is experimental. The websocket server is not yet well supported and is pending security hardening; it is not recommended for production use.
- Downgrade protection requires semver image tags. Downgrades are detected and blocked only when both image tags are valid semver. Non-semver tags (
latest, date stamps, digest pins) cannot be ordered, so the operator emits aVersionComparisonSkippedwarning and proceeds without blocking. See Lifecycle. - Task failure messages may include credential fragments. Lifecycle task failure output is truncated into
statusand could contain fragments of task stdout, including credentials. See security.md.