Skip to main content

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

Example: List StorageClasses using kubectl

kubectl get storageclass

Example: List StorageClasses with detailed output

kubectl get storageclass -o wide

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

Example: Delete StorageClass

kubectl delete storageclass standard
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.

Was this article helpful?