Expand Cassandra persistent volumes

You are currently viewing version 1.12 of the Apigee hybrid documentation.This version is end of life. You should upgrade to a newer version. For more information, seeSupported versions.

This process allows you to expand the persistent volumes used by the Apigee hybrid Cassandra database to accommodate greater storage needs without needing to create new nodes just to provide more storage.

Overview

The Apigee hybridcassandra component uses persistent volumes to store data. Persistent volume size is defined during installation and initial configuration. This initial storage size is an immutable value and cannot be changed. Therefore, any new node added to the cluster will use the same persistent volume size.

It is possible to increase the size of the existing persistent volume by making the changes directly on the Persistent volume Claim. New nodes will still use the smaller initial persistent volume size.

If your hybrid Cassandra database is nearing its storage capacity, you can use this procedure to expand the existing persistent volumes and allow new nodes to expand their persistent volumes as well.

Note: This process only applies to Kubernetes storage classesthat support PersistentVolume expansion. See theAllow Volume Expansion list in the Kubernetes documentation.

If you do not know what storage class your hybrid installation uses, you can check with the following command.

kubectl -n apigee get sc standard -o json | grep 'provisioner'

The output will look something like:

    "provisioner": "kubernetes.io/gce-pd",

Wheregce-pd is an abbreviation for thegcePersistentDisk storage class. You can find a list of storage class abbreviations in theParameters list in the Kubernetes documentation.

Expand Cassandra persistent volumes

  1. Update the volume size to the desired size:
    kubectl -n apigee edit pvc
  2. Check the updated volume capacity:
     kubectl get pvc -n apigee
    NAME                                       STATUS  VOLUME                                     CAPACITY      ACCESS MODES       STORAGECLASS   AGEcassandra-data-apigee-cassandra-default-0  Bound   pvc-92234ba7-941b-4dab-82c6-8a5288a2c8d4500Gi      RWO            standard       21mcassandra-data-apigee-cassandra-default-1  Bound   pvc-6be911fc-91f7-465d-a02e-933428ee10b2500Gi      RWO            standard       20mcassandra-data-apigee-cassandra-default-2  Bound   pvc-14ba34e4-fd5c-4d59-8413-a331dcad3404500Gi      RWO            standard       19m
  3. Backup, delete and recreate the statefulset with the new storage size. The following commands creates a configuration fileapigee-cassandra-default.yaml you can use to capture the current Cassandra configuration. You then modify and apply this configuration:
    1. kubectl -n apigee get sts apigee-cassandra-default -o yaml > apigee-cassandra-default.yaml
    2. kubectl -n apigee delete sts --cascade=orphan apigee-cassandra-default
    3. Check that thedelete operation is complete:
      kubectl get sts -n apigee

      Your output should look like:

      No resources found in apigee namespace.
    4. Update the storage size in theapigee-cassandra-default.yaml file with the new storage size. This must match the size you intend to apply in youroverrides.yaml. For example:
           resources:        requests:          storage: 500Gi
    5. Re-apply the statefulset configuration with the updated storage size:
      kubectl apply -f apigee-cassandra-default.yaml
    6. Verify that statefulset was re-created correctly:
      kubectl get sts -n apigee

      Your output should look something like:

      NAME                       READY   AGEapigee-cassandra-default   3/3     6m56s
  4. Update the your overrides file with new volume size that you specified when you edited the pvc:
    cassandra:storage:storageSize:500Gi
  5. Seecassandra.storage.capacity for more details.

  6. Apply the updated configuration to the cluster:
    helm upgrade datastore apigee-datastore/ \--namespaceapigee \--atomic \-fOVERRIDES_FILE.yaml
    Note: If you see an error sayingError: UPGRADE FAILED: "datastore" has no deployed releases, replaceupgrade withinstall and try the command again.
  7. Check if the newly created sts has the updated storage size:
    kubectl get sts -n apigee apigee-cassandra -o yaml |grep storage
    storage: 500Gi
  8. Check if C* pods data volume got updated with new size:

    kubectl exec -n apigee -it apigee-cassandra-default-0 -- df -h|grep "/opt/apigee/data"
    /dev/sdb         99G   69M   99G   1% /opt/apigee/data

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-18 UTC.