{"id":19465709,"url":"https://github.com/axonops/helm-cassandra","last_synced_at":"2026-04-29T04:36:24.908Z","repository":{"id":134114432,"uuid":"321680847","full_name":"axonops/helm-cassandra","owner":"axonops","description":"A distribution of Cassandra made for Kubernetes with AxonOps","archived":false,"fork":false,"pushed_at":"2021-01-22T16:46:35.000Z","size":25,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-09T18:06:06.546Z","etag":null,"topics":["cassandra","cassandra-database","helm","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/axonops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-15T13:46:08.000Z","updated_at":"2021-01-21T15:57:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"a434ae5e-f7e9-49ac-890e-796d35c5c6c4","html_url":"https://github.com/axonops/helm-cassandra","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/axonops/helm-cassandra","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axonops%2Fhelm-cassandra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axonops%2Fhelm-cassandra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axonops%2Fhelm-cassandra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axonops%2Fhelm-cassandra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axonops","download_url":"https://codeload.github.com/axonops/helm-cassandra/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axonops%2Fhelm-cassandra/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262177667,"owners_count":23270913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cassandra","cassandra-database","helm","kubernetes"],"created_at":"2024-11-10T18:22:49.910Z","updated_at":"2026-04-29T04:36:19.884Z","avatar_url":"https://github.com/axonops.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Digitalis Cassandra Chart\n\n## Digitalis Cassandra and AxonOps\n\nThis chart was forked and adapted from [incubator](https://github.com/helm/charts/tree/master/incubator/cassandra) to run Cassandra together with [AxonOps](https://docs.axonops.com/installation/kubernetes/minikube/).\n\nEnable the chart repo with\n\n```bash\nhelm repo add axonops-helm https://repo.axonops.com/public/helm/helm/charts/\n```\n\n## Install Chart\nTo install the Cassandra Chart into your Kubernetes cluster (This Chart requires persistent volume by default, you may need to create a storage class before install chart. To create storage class, see [Persist data](#persist_data) section)\n\n```bash\nhelm install --namespace \"cassandra\" -n \"cassandra\" axonops-helm/cassandra\n```\n\nAfter installation succeeds, you can get a status of Chart\n\n```bash\nhelm status \"cassandra\"\n```\n\nIf you want to delete your Chart, use this command\n```bash\nhelm delete  --purge \"cassandra\"\n```\n\n## Upgrading\n\nTo upgrade your Cassandra release, simply run\n\n```bash\nhelm upgrade \"cassandra\" axonops-helm/cassandra\n```\n\n## Persist data\nYou need to create `StorageClass` before able to persist data in persistent volume.\nTo create a `StorageClass` on Google Cloud, run the following\n\n```bash\nkubectl create -f sample/create-storage-gce.yaml\n```\n\nAnd set the following values in `values.yaml`\n\n```yaml\npersistence:\n  enabled: true\n```\n\nIf you want to create a `StorageClass` on other platform, please see documentation here [https://kubernetes.io/docs/user-guide/persistent-volumes/](https://kubernetes.io/docs/user-guide/persistent-volumes/)\n\nWhen running a cluster without persistence, the termination of a pod will first initiate a decommissioning of that pod.\nDepending on the amount of data stored inside the cluster this may take a while. In order to complete a graceful\ntermination, pods need to get more time for it. Set the following values in `values.yaml`:\n\n```yaml\npodSettings:\n  terminationGracePeriodSeconds: 1800\n```\n\n## Install Chart with specific cluster size\nBy default, this Chart will create a cassandra with 3 nodes. If you want to change the cluster size during installation, you can use `--set config.cluster_size={value}` argument. Or edit `values.yaml`\n\nFor example:\nSet cluster size to 5\n\n```bash\nhelm install --namespace \"cassandra\" -n \"cassandra\" --set config.cluster_size=5 incubator/cassandra/\n```\n\n## Install Chart with specific resource size\nBy default, this Chart will create a cassandra with CPU 2 vCPU and 4Gi of memory which is suitable for development environment.\nIf you want to use this Chart for production, I would recommend to update the CPU to 4 vCPU and 16Gi. Also increase size of `max_heap_size` and `heap_new_size`.\nTo update the settings, edit `values.yaml`\n\n## Install Chart with specific node\nSometime you may need to deploy your cassandra to specific nodes to allocate resources. You can use node selector by edit `nodes.enabled=true` in `values.yaml`\nFor example, you have 6 vms in node pools and you want to deploy cassandra to node which labeled as `cloud.google.com/gke-nodepool: pool-db`\n\nSet the following values in `values.yaml`\n\n```yaml\nnodes:\n  enabled: true\n  selector:\n    nodeSelector:\n      cloud.google.com/gke-nodepool: pool-db\n```\n\n## Configuration\n\nThe following table lists the configurable parameters of the Cassandra chart and their default values.\n\n| Parameter                  | Description                                     | Default                                                    |\n| -----------------------    | ---------------------------------------------   | ---------------------------------------------------------- |\n| `image.repo`                         | `cassandra` image repository                    | `digitalisdocker/cassandra`                                |\n| `image.tag`                          | `cassandra` image tag                           | `3.11.9`                                                   |\n| `image.pullPolicy`                   | Image pull policy                               | `Always` if `imageTag` is `latest`, else `IfNotPresent`    |\n| `image.pullSecrets`                  | Image pull secrets                              | `nil`                                                      |\n| `config.cluster_domain`              | The name of the cluster domain.                 | `cluster.local`                                            |\n| `config.cluster_name`                | The name of the cluster.                        | `cassandra`                                                |\n| `config.cluster_size`                | The number of nodes in the cluster.             | `3`                                                        |\n| `config.seed_size`                   | The number of seed nodes used to bootstrap new clients joining the cluster.                            | `2` |\n| `config.seeds`                       | The comma-separated list of seed nodes.         | Automatically generated according to `.Release.Name` and `config.seed_size` |\n| `config.num_tokens`                  | Initdb Arguments                                | `256`                                                      |\n| `config.dc_name`                     | Initdb Arguments                                | `DC1`                                                      |\n| `config.rack_name`                   | Initdb Arguments                                | `RAC1`                                                     |\n| `config.endpoint_snitch`             | Initdb Arguments                                | `SimpleSnitch`                                             |\n| `config.max_heap_size`               | Initdb Arguments                                | `2048M`                                                    |\n| `config.heap_new_size`               | Initdb Arguments                                | `512M`                                                     |\n| `config.ports.cql`                   | Initdb Arguments                                | `9042`                                                     |\n| `config.ports.thrift`                | Initdb Arguments                                | `9160`                                                     |\n| `config.ports.agent`                 | The port of the JVM Agent (if any)              | `nil`                                                      |\n| `config.start_rpc`                   | Initdb Arguments                                | `false`                                                    |\n| `configOverrides`                    | Overrides config files in /etc/cassandra dir    | `{}`                                                       |\n| `commandOverrides`                   | Overrides default docker command                | `[]`                                                       |\n| `argsOverrides`                      | Overrides default docker args                   | `[]`                                                       |\n| `env`                                | Custom env variables                            | `{}`                                                       |\n| `schedulerName`                      | Name of k8s scheduler (other than the default)  | `nil`                                                      |\n| `persistence.enabled`                | Use a PVC to persist data                       | `true`                                                     |\n| `persistence.storageClass`           | Storage class of backing PVC                    | `nil` (uses alpha storage class annotation)                |\n| `persistence.accessMode`             | Use volume as ReadOnly or ReadWrite             | `ReadWriteOnce`                                            |\n| `persistence.size`                   | Size of data volume                             | `10Gi`                                                     |\n| `resources`                          | CPU/Memory resource requests/limits             | Memory: `4Gi`, CPU: `2`                                    |\n| `service.type`                       | k8s service type exposing ports, e.g. `NodePort`| `ClusterIP`                                                |\n| `service.annotations`                | Annotations to apply to cassandra service       | `\"\"`                                                       |\n| `podManagementPolicy`                | podManagementPolicy of the StatefulSet          | `OrderedReady`                                             |\n| `podDisruptionBudget`                | Pod distruption budget                          | `{}`                                                       |\n| `podAnnotations`                     | pod annotations for the StatefulSet             | `{}`                                                       |\n| `updateStrategy.type`                | UpdateStrategy of the StatefulSet               | `OnDelete`                                                 |\n| `livenessProbe.initialDelaySeconds`  | Delay before liveness probe is initiated        | `90`                                                       |\n| `livenessProbe.periodSeconds`        | How often to perform the probe                  | `30`                                                       |\n| `livenessProbe.timeoutSeconds`       | When the probe times out                        | `5`                                                        |\n| `livenessProbe.successThreshold`     | Minimum consecutive successes for the probe to be considered successful after having failed.           | `1` |\n| `livenessProbe.failureThreshold`     | Minimum consecutive failures for the probe to be considered failed after having succeeded.             | `3` |\n| `readinessProbe.initialDelaySeconds` | Delay before readiness probe is initiated       | `90`                                                       |\n| `readinessProbe.periodSeconds`       | How often to perform the probe                  | `30`                                                       |\n| `readinessProbe.timeoutSeconds`      | When the probe times out                        | `5`                                                        |\n| `readinessProbe.successThreshold`    | Minimum consecutive successes for the probe to be considered successful after having failed.           | `1` |\n| `readinessProbe.failureThreshold`    | Minimum consecutive failures for the probe to be considered failed after having succeeded.             | `3` |\n| `readinessProbe.address`             | Address to use for checking node has joined the cluster and is ready.                          | `${POD_IP}` |\n| `rbac.create`                        | Specifies whether RBAC resources should be created                                                  | `true` |\n| `serviceAccount.create`              | Specifies whether a ServiceAccount should be created                                                | `true` |\n| `serviceAccount.name`                | The name of the ServiceAccount to use           |                                                            |\n| `serviceAccount.rules`               | Permissions you would like granting to the pods | `{}`                                                       |\n| `backup.enabled`                     | Enable backup on chart installation             | `false`                                                    |\n| `backup.schedule`                    | Keyspaces to backup, each with cron time        |                                                            |\n| `backup.annotations`                 | Backup pod annotations                          | iam.amazonaws.com/role: `cain`                             |\n| `backup.image.repository`            | Backup image repository                         | `maorfr/cain`                                              |\n| `backup.image.tag`                   | Backup image tag                                | `0.6.0`                                                    |\n| `backup.extraArgs`                   | Additional arguments for cain                   | `[]`                                                       |\n| `backup.env`                         | Backup environment variables                    | AWS_REGION: `us-east-1`                                    |\n| `backup.resources`                   | Backup CPU/Memory resource requests/limits      | Memory: `1Gi`, CPU: `1`                                    |\n| `backup.destination`                 | Destination to store backup artifacts           | `s3://bucket/cassandra`                                    |\n| `backup.google.serviceAccountSecret` | Secret containing credentials if GCS is used as destination |                                                |\n| `exporter.enabled`                   | Enable Cassandra exporter                       | `false`                                                    |\n| `exporter.servicemonitor.enabled`    | Enable ServiceMonitor for exporter              | `true`                                                    |\n| `exporter.servicemonitor.additionalLabels`| Additional labels for Service Monitor           | `{}`                                                       |\n| `exporter.image.repo`                | Exporter image repository                       | `criteord/cassandra_exporter`                              |\n| `exporter.image.tag`                 | Exporter image tag                              | `2.0.2`                                                    |\n| `exporter.port`                      | Exporter port                                   | `5556`                                                     |\n| `exporter.jvmOpts`                   | Exporter additional JVM options                 |                                                            |\n| `exporter.resources`                 | Exporter CPU/Memory resource requests/limits    | `{}`                                                       |\n| `extraContainers`                    | Sidecar containers for the pods                 | `[]`                                                       |\n| `extraVolumes`                       | Additional volumes for the pods                 | `[]`                                                       |\n| `extraVolumeMounts`                  | Extra volume mounts for the pods                | `[]`                                                       |\n| `extraInitContainers`                | Sidecar containers to init the pods             | `[]`                                                       |\n| `extraInitVolumes`                   | Additional volumes for init containers          | `[]`                                                       |\n| `extraInitVolumeMounts`              | Extra volume mounts for init containers         | `[]`                                                       |\n| `affinity`                           | Kubernetes node affinity                        | `{}`                                                       |\n| `tolerations`                        | Kubernetes node tolerations                     | `[]`                                                       |\n\n\n## Scale cassandra\nWhen you want to change the cluster size of your cassandra, you can use the helm upgrade command.\n\n```bash\nhelm upgrade --set config.cluster_size=5 cassandra incubator/cassandra\n```\n\n## Get cassandra status\nYou can get your cassandra cluster status by running the command\n\n```bash\nkubectl exec -it --namespace cassandra $(kubectl get pods --namespace cassandra -l app=cassandra-cassandra -o jsonpath='{.items[0].metadata.name}') nodetool status\n```\n\nOutput\n```bash\nDatacenter: asia-east1\n======================\nStatus=Up/Down\n|/ State=Normal/Leaving/Joining/Moving\n--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack\nUN  10.8.1.11  108.45 KiB  256          66.1%             410cc9da-8993-4dc2-9026-1dd381874c54  a\nUN  10.8.4.12  84.08 KiB  256          68.7%             96e159e1-ef94-406e-a0be-e58fbd32a830  c\nUN  10.8.3.6   103.07 KiB  256          65.2%             1a42b953-8728-4139-b070-b855b8fff326  b\n```\n\n## Benchmark\nYou can use [cassandra-stress](https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsCStress.html) tool to run the benchmark on the cluster by the following command\n\n```bash\nkubectl exec -it --namespace cassandra $(kubectl get pods --namespace cassandra -l app=cassandra-cassandra -o jsonpath='{.items[0].metadata.name}') cassandra-stress\n```\n\nExample of `cassandra-stress` argument\n - Run both read and write with ration 9:1\n - Operator total 1 million keys with uniform distribution\n - Use QUORUM for read/write\n - Generate 50 threads\n - Generate result in graph\n - Use NetworkTopologyStrategy with replica factor 2\n\n```bash\ncassandra-stress mixed ratio\\(write=1,read=9\\) n=1000000 cl=QUORUM -pop dist=UNIFORM\\(1..1000000\\) -mode native cql3 -rate threads=50 -log file=~/mixed_autorate_r9w1_1M.log -graph file=test2.html title=test revision=test2 -schema \"replication(strategy=NetworkTopologyStrategy, factor=2)\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxonops%2Fhelm-cassandra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxonops%2Fhelm-cassandra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxonops%2Fhelm-cassandra/lists"}