The Cassandra database uses
dynamically created persistent volumes to store data. For proper database functioning,
Apigee requires you to configure a StorageClass
definition that is backed by a solid-state drive (SSD).
If you do not currently have SSD configured for Cassandra, this topic explains how to create a
new StorageClass that uses SSD and make it the
default class. When Cassandra starts, it will use this default StorageClass.
The steps outlined in this topic for StorageClass configuration are only applicable to a new
Cassandra installation. If you already have a Cassandra class installed, you must decommission the existing
cluster in order to configure the StorageClass definition. Changes to the StorageClass definition of an
existing Cassandra cluster after installation are not supported.
Apigee recommends deploying hybrid in two or more regions,
in order to decommission and re-install one region
while preserving data in the secondary region. Alternatively, you can use a non-CSI hybrid backup to restore
data in a single-region installation, after decommissioning and configuring the required StorageClass definition.
Change the default StorageClass
The following steps explain how to create a StorageClass and make it the default class. For more
information, see
Change the default storage class in the Kubernetes documentation.
Get the name of the current default StorageClass:
kubectl get sc
For example:
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h
standard kubernetes.io/gce-pd Delete Immediate true 15h
standard-rwo (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h
Describe the StorageClass named standard-rwo. Note that its
type is pd-balanced:
Add this code to the file. Note that the name of the new class
is apigee-sc. You can use any name you like. Also, note that
the storage type is pd-ssd:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-29 UTC."],[[["\u003cp\u003eThis document guides you through configuring a new StorageClass that utilizes SSD, which is required by Apigee for Cassandra database functionality.\u003c/p\u003e\n"],["\u003cp\u003eThe outlined steps for StorageClass configuration are specifically for new Cassandra installations; modifying the StorageClass of an existing Cassandra cluster post-installation is not supported.\u003c/p\u003e\n"],["\u003cp\u003eTo change the default StorageClass, you must first create a new StorageClass file with your preferred name and ensure the storage type is set to \u003ccode\u003epd-ssd\u003c/code\u003e, and apply it to the Kubernetes cluster.\u003c/p\u003e\n"],["\u003cp\u003eYou can then use the \u003ccode\u003ekubectl patch\u003c/code\u003e command to set your newly created StorageClass as the default and change any previous StorageClass to non-default.\u003c/p\u003e\n"],["\u003cp\u003eApigee recommends a multi-region hybrid deployment, or utilizing a non-CSI hybrid backup, for data preservation during the process of decommissioning and re-installing Cassandra to change to the appropriate StorageClass definition.\u003c/p\u003e\n"]]],[],null,["# StorageClass configuration\n\n| You are currently viewing version 1.10 of the Apigee hybrid documentation. **This version is end of life.** You should upgrade to a newer version. For more information, see [Supported versions](/apigee/docs/hybrid/supported-platforms#supported-versions).\n\n\nThe Cassandra database uses\n[dynamically created](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#dynamic) persistent volumes to store data. For proper database functioning,\nApigee requires you to configure a [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes)\ndefinition that is backed by a solid-state drive (SSD).\n\n\nIf you do not currently have SSD configured for Cassandra, this topic explains how to create a\nnew StorageClass that uses SSD and make it the\ndefault class. When Cassandra starts, it will use this default StorageClass.\n| **KEY POINT:** Apigee requires the use of SSD for Cassandra.\n\nThe steps outlined in this topic for StorageClass configuration are only applicable to a *new*\nCassandra installation. If you already have a Cassandra class installed, you must decommission the existing\ncluster in order to configure the StorageClass definition. Changes to the StorageClass definition of an\nexisting Cassandra cluster after installation are not supported.\n\nApigee recommends deploying hybrid in [two or more regions](/apigee/docs/hybrid/v1.11/multi-region),\nin order to decommission and re-install one region\nwhile preserving data in the secondary region. Alternatively, you can use a [non-CSI hybrid backup](/apigee/docs/hybrid/v1.11/cassandra-backup-overview#how-to-take-backups) to restore\ndata in a single-region installation, after decommissioning and configuring the required StorageClass definition.\n\n\u003cbr /\u003e\n\nChange the default StorageClass\n-------------------------------\n\n\nThe following steps explain how to create a StorageClass and make it the default class. For more\ninformation, see [Change the default storage class](https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/) in the Kubernetes documentation.\n\n1. Get the name of the current default StorageClass: \n\n ```\n kubectl get sc\n ```\n\n\n For example: \n\n kubectl get sc\n NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\n premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h\n standard kubernetes.io/gce-pd Delete Immediate true 15h\n standard-rwo (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h\n \n2. Describe the StorageClass named `standard-rwo`. Note that its type is `pd-balanced`: \n\n ```\n kubectl describe sc standard-rwo\n ```\n\n\n For example: \n\n ```text\n kubectl describe sc standard-rwo\n ``` \n\n ```\n Name: standard-rwo\n IsDefaultClass: Yes\n Annotations: components.gke.io/layer=addon,storageclass.kubernetes.io/is-default-class=false\n Provisioner: pd.csi.storage.gke.io\n Parameters: type=pd-balanced\n AllowVolumeExpansion: True\n MountOptions: \u003cnone\u003e\n ReclaimPolicy: Delete\n VolumeBindingMode: WaitForFirstConsumer\n Events: \u003cnone\u003e\n ```\n3. Create a new file called `storageclass.yaml`.\n4. Add this code to the file. Note that the name of the new class is `apigee-sc`. You can use any name you like. Also, note that the storage type is `pd-ssd`: \n\n ```carbon\n ---\n kind: StorageClass\n apiVersion: storage.k8s.io/v1\n metadata:\n name: \"apigee-sc\"\n provisioner: pd.csi.storage.gke.io\n parameters:\n type: pd-ssd\n replication-type: none\n volumeBindingMode: WaitForFirstConsumer\n allowVolumeExpansion: true\n ```\n5. Apply the new StorageClass to your Kubernetes cluster: \n\n ```\n kubectl apply -f storageclass.yaml\n ```\n6. Execute the following two commands to change the default StorageClass: \n\n ```\n kubectl patch storageclass standard-rwo \\\n -p '{\"metadata\": {\"annotations\":{\"storageclass.kubernetes.io/is-default-class\":\"false\"}}}'\n ``` \n\n ```\n kubectl patch storageclass apigee-sc \\\n -p '{\"metadata\": {\"annotations\":{\"storageclass.kubernetes.io/is-default-class\":\"true\"}}}'\n ```\n7. Execute this command to verify that the new default StorageClass is called `apigee-sc`: \n\n ```\n kubectl get sc\n ```\n\n\n For example: \n\n ```\n NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\n apigee-sc (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 14h\n premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h\n standard kubernetes.io/gce-pd Delete Immediate true 15h\n standard-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 15h\n \n ```\n8. Describe both the StorageClass to verify the value of **IsDefaultClass** . \n\n ```\n kubectl describe sc apigee-sc\n ``` \n\n ```\n Name: apigee-sc\n IsDefaultClass: Yes\n Annotations: kubectl.kubernetes.io/last-applied-configuration={\"allowVolumeExpansion\":true,\"apiVersion\":\"storage.k8s.io/v1\",\"kind\":\"StorageClass\",\"metadata\":{\"annotations\":{},\"name\":\"apigee-sc\"},\"parameters\":{\"replication-type\":\"none\",\"type\":\"pd-ssd\"},\"provisioner\":\"pd.csi.storage.gke.io\",\"volumeBindingMode\":\"WaitForFirstConsumer\"},storageclass.kubernetes.io/is-default-class=true\n Provisioner: pd.csi.storage.gke.io\n Parameters: replication-type=none,type=pd-ssd\n AllowVolumeExpansion: True\n MountOptions: \n ReclaimPolicy: Delete\n VolumeBindingMode: WaitForFirstConsumer\n Events: \n \n ``` \n\n ```\n kubectl describe sc standard-rwo\n ``` \n\n ```\n Name: standard-rwo\n IsDefaultClass: No\n Annotations: components.gke.io/layer=addon,storageclass.kubernetes.io/is-default-class=false\n Provisioner: pd.csi.storage.gke.io\n Parameters: type=pd-balanced\n AllowVolumeExpansion: True\n MountOptions: \n ReclaimPolicy: Delete\n VolumeBindingMode: WaitForFirstConsumer\n Events: \n \n ```"]]