Configuring Storage Classes
1. Creating StorageClass
| Field | Description | Example Value |
|---|---|---|
| apiVersion | API version of the StorageClass resource | storage.k8s.io/v1 |
| kind | Kind of the Kubernetes resource | StorageClass |
| metadata.name | Name of the StorageClass | fast-ssd |
| provisioner | Driver used to provision storage (e.g., kubernetes.io/aws-ebs) |
aws.ebs.csi.driver |
| reclaimPolicy | Policy for reclaiming storage after PVC is deleted | Retain or Delete |
| volumeBindingMode | When to bind volumes to pods | Immediate or WaitForFirstConsumer |
Example: Creating a StorageClass for AWS EBS
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: aws.ebs.csi.driver
parameters:
type: gp2
fsType: ext4
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
2. Listing StorageClasses
| Field | Description | Example Value |
|---|---|---|
| metadata.name | Name of the StorageClass | fast-ssd |
| provisioner | Driver used to provision storage | kubernetes.io/aws-ebs |
| reclaimPolicy | Policy for reclaiming storage after PVC is deleted | Retain or Delete |
| volumeBindingMode | When to bind volumes to PersistentVolumes | Immediate or WaitForFirstConsumer |
3. Setting Default StorageClass
| Field | Description | Value |
|---|---|---|
| metadata.name | Name of the StorageClass | standard |
| metadata.annotations | Annotations to set on the StorageClass | {"storageclass.kubernetes.io/is-default-class": "true"} |
| provisioner | Provisioner plugin used to create volumes | kubernetes.io/aws-ebs |
Example: Setting Default StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
Note: Setting a StorageClass as default means that any PersistentVolumeClaim (PVC) without a storageClassName specified will automatically use this StorageClass for volume provisioning.
4. Configuring Provisioners
| Provisioner | Description | Supported Parameters | Notes |
|---|---|---|---|
| kubernetes.io/aws-ebs | Provisions EBS volumes for AWS clusters | type, fsType, volumeID |
Requires AWS credentials and IAM permissions |
| kubernetes.io/azure-disk | Provisions Azure disks for AKS clusters | cachingMode, diskSizeGB, fsType |
Requires Azure service principal credentials |
| kubernetes.io/gce-pd | Provisions GCP persistent disks for GKE clusters | type, fsType, diskSizeGb |
Requires GCP service account with appropriate permissions |
| kubernetes.io/ibm-cloud-block-storage | Provisions IBM Cloud Block Storage volumes | volumeType, zone, fsType |
Requires IBM Cloud API key and cluster access |
| kubernetes.io/vsphere | Provisions vSphere volumes for VMware clusters | storagePolicyName, fsType, diskSizeGB |
Requires vCenter credentials and storage policy configuration |
Example: Configuring AWS EBS Provisioner
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4
Example: Configuring GCP PD Provisioner
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcp-ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
fsType: ext4
5. Setting Volume Binding Mode
| Binding Mode | Description | Use Case |
|---|---|---|
| Immediate | Volume is bound when the PersistentVolumeClaim (PVC) is created. | When you need the volume to be ready immediately for use by a Pod. |
| WaitForFirstConsumer | Volume is bound only when a Pod requests it. | When you want to defer binding until the PVC is actually used by a Pod, allowing for better scheduling decisions. |
Example: Setting Volume Binding Mode in StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: aws-ebs
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp2
fsType: ext4
Note: The
volumeBindingMode field is available in Kubernetes v1.10+.
6. Configuring Reclaim Policy
| Policy | Description | Behavior | Notes |
|---|---|---|---|
| Retain | Manual cleanup required | Storage volume remains after PVC is deleted | Admin must manually delete the volume to reclaim storage |
| Delete | Automatic cleanup | Storage volume is deleted when PVC is deleted | Default for dynamically provisioned volumes in most cloud providers |
| Recycle | Deprecated | Obsolete method to reclaim storage (not supported in newer versions) | DEPRECATED in Kubernetes v1.5+ |
Example: Setting Reclaim Policy in StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
Note: Reclaim policy affects how volumes are handled when the associated PersistentVolumeClaim (PVC) is deleted. Choose
Retain if you need to preserve data for later use or migration.
7. Enabling Volume Expansion
| Property | Description | Values | Notes |
|---|---|---|---|
| allowVolumeExpansion | Enables or disables volume expansion | true / false |
Default is false. Set to true to allow expansion of volumes |
Example: Enabling Volume Expansion in StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
allowVolumeExpansion: true
reclaimPolicy: Retain
Note: Volume expansion is supported only for certain volume types (e.g., AWS EBS, GCP PD). Ensure that the underlying storage provider supports expansion.
8. Using Storage Parameters
| Parameter | Description | Values | Notes |
|---|---|---|---|
| provisioner | Storage provisioner to use | kubernetes.io/aws-ebs, awsEFS, gcePersistentDisk |
Must match the provisioner in the storage class |
| type | Storage type (e.g., SSD, HDD) | gp2, io1, standard |
Used for AWS EBS volumes |
| fsType | File system type to use | ext4, xfs |
Default is ext4 |
| volumeBindingMode | When to bind volumes to pods | Immediate, WaitForFirstConsumer |
Immediate binds at creation; WaitForFirstConsumer delays binding until pod is scheduled |
| reclaimPolicy | What happens to volume after PVC is deleted | Retain, Recycle, Delete |
Delete is default for dynamically provisioned volumes |
Example: Storage Class with Parameters
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
fsType: ext4
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
9. Configuring Mount Options
| Option | Description | Values | Notes |
|---|---|---|---|
| mountOptions | Mount options for the volume | array |
Array of mount options to be passed to the volume plugin |
Example: Setting Mount Options in StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-storageclass
provisioner: kubernetes.io/aws-ebs
mountOptions:
- <span class="highlight">hard</span>
- <span class="highlight">nfsvers=4.1</span>
parameters:
type: gp2
Note: Mount options are specific to the volume plugin and must be supported by the underlying storage system.
10. Deleting StorageClasses
| Property | Description | Notes |
|---|---|---|
| name | Name of the StorageClass to delete | Must be unique within the cluster |
| cascade | Whether to delete dependent resources | Default is background |
Note: Ensure no PersistentVolumeClaims are bound to volumes managed by this StorageClass before deletion.
Warning: Deleting a StorageClass that is in use may cause data loss or disruption to running workloads.