Skip to content

Replace Bitnami Cassandra chart in storagebox application #96

@adamancini

Description

@adamancini

Summary

The storagebox application depends on the Bitnami Cassandra Helm chart, which is transitioning to a paid Broadcom subscription model after September 29, 2025. This chart dependency must be replaced with a community-maintained or operator-based alternative.

Current Bitnami Dependencies

Helm Chart Dependency

  • Chart: cassandra
  • Version: ~12.3.11
  • Repository: https://charts.bitnami.com/bitnami
  • File: applications/storagebox/charts/storagebox/Chart.yaml (lines 12-15)

Bitnami Container Images

Image Tag Usage
bitnami/cassandra 4.1.6-debian-12-r3 Main Cassandra database
bitnami/os-shell 12-debian-12-r28 Init container for volume permissions
bitnami/cassandra-exporter 2.3.8-debian-12-r28 Metrics/monitoring exporter

Affected Files

  • applications/storagebox/charts/storagebox/Chart.yaml - chart dependency
  • applications/storagebox/charts/storagebox/Chart.lock - lock file
  • applications/storagebox/charts/storagebox/values.yaml - extensive Cassandra configuration (~900 lines)
  • applications/storagebox/kots/storagebox-chart.yaml - KOTS HelmChart CR with template functions
  • applications/storagebox/kots/kots-config.yaml - Admin console config items for Cassandra
  • applications/storagebox/development-values.yaml - Development config values

Recommended Replacement: K8ssandra Operator

k8ssandra-operator is the recommended replacement:

  • The Apache Cassandra community has coalesced around K8ssandra as the standard Kubernetes operator
  • Provides automated repairs (Reaper), backups (Medusa), and monitoring out of the box
  • Supports multi-region/multi-cluster deployments
  • Actively maintained (latest release: v1.29.0, November 2025)
  • Uses CassandraDatacenter CRDs for declarative management
  • The underlying cass-operator is the community-endorsed operator for Cassandra on K8s

Alternative Options

Alternative Pros Cons
K8ssandra Operator (recommended) Full-featured, community standard, repairs/backups/monitoring Operator installation required
ScyllaDB Operator C++ rewrite of Cassandra, much better performance Different database engine, CQL-compatible but not identical
DataStax cass-operator (standalone) Simpler, single-DC focused Development migrated to K8ssandra; less features

Migration Considerations

Four-Way Contract (CRITICAL)

The storagebox app maintains a strict contract between development-values.yaml, kots-config.yaml, storagebox-chart.yaml, and charts/storagebox/values.yaml. All four files must be updated in sync. See applications/storagebox/CLAUDE.md for the full contract specification.

Architecture Change

  • The current approach uses Cassandra as a subchart dependency in Chart.yaml
  • K8ssandra would shift to an operator pattern where:
    • The k8ssandra-operator is installed as an EC extension (similar to how CNPG and MinIO operators are already installed in kots/ec.yaml)
    • A K8ssandraCluster CR is created via a Helm template (similar to templates/postgres-db.yaml)
    • This aligns with the existing pattern in storagebox for PostgreSQL (CNPG) and MinIO (operator)

Container Image Replacements

Current Bitnami Image Replacement
bitnami/cassandra docker.io/cassandra (official Apache Cassandra image)
bitnami/os-shell docker.io/busybox or remove if K8ssandra handles init
bitnami/cassandra-exporter Integrated with K8ssandra monitoring or docker.io/criteord/cassandra_exporter

TLS Configuration

Storagebox supports three Cassandra TLS modes. K8ssandra also supports TLS via cert-manager integration (cert-manager is already deployed as an EC extension in storagebox). This should simplify the TLS configuration.

Scope of Work

  1. Add k8ssandra-operator to kots/ec.yaml as an EC extension
  2. Replace Cassandra subchart dependency with a K8ssandraCluster CR template
  3. Update values.yaml with K8ssandra-compatible configuration structure
  4. Update KOTS config (kots-config.yaml) for any changed user-facing options
  5. Update storagebox-chart.yaml HelmChart CR to match new values structure
  6. Update development-values.yaml to match
  7. Replace Bitnami container image references
  8. Update README and CLAUDE.md documentation
  9. Test with make test-cycle

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions