StorageClasses & Dynamic Provisioning
StorageClasses enable dynamic provisioning of persistent storage in Kubernetes. Instead of administrators manually creating PersistentVolumes, StorageClasses allow Kubernetes to automatically provision storage when you create a PersistentVolumeClaim. Think of StorageClasses as templates that define how to create storage—you specify the template, and Kubernetes handles the rest.
What is a StorageClass?
A StorageClass is a Kubernetes resource that describes a “class” of storage. It defines:
- Provisioner - The plugin that creates the storage (e.g., AWS EBS, GCE Persistent Disk)
- Parameters - Configuration specific to the provisioner (e.g., disk type, zone)
- Reclaim Policy - What happens when the PVC is deleted (Delete or Retain)
- Binding Mode - When the volume binding occurs (Immediate or WaitForFirstConsumer)
Static vs Dynamic Provisioning
Static Provisioning (Without StorageClass)
Administrators manually create PersistentVolumes, and users create PVCs that bind to these pre-created PVs.
Limitations:
- Requires manual PV creation
- Need to know storage details upfront
- Doesn’t scale well
Dynamic Provisioning (With StorageClass)
Users create PVCs that reference a StorageClass, and Kubernetes automatically creates the PV.
Benefits:
- No manual PV creation needed
- Automatic provisioning
- Scales easily
- Simpler workflow
How Dynamic Provisioning Works
Here’s the complete flow of dynamic provisioning:
Example StorageClass
Here’s a StorageClass for Google Cloud Platform:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd # SSD disk type
replication-type: regional-pd # Regional persistent disk
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true
This StorageClass:
- Uses GKE’s CSI provisioner for Persistent Disks
- Creates SSD-type disks
- Creates regional persistent disks (replicated across zones)
- Waits for a pod to use the PVC before provisioning (better scheduling)
- Deletes volumes when PVCs are deleted
- Allows volume expansion
Default StorageClass
Kubernetes clusters usually have a default StorageClass. When you create a PVC without specifying a storageClassName, Kubernetes uses the default StorageClass.
To set a StorageClass as default, add the annotation:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
Common StorageClass Patterns
Fast Storage (SSD)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd
reclaimPolicy: Retain # Protect data
Standard Storage (HDD)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-hdd
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-standard
reclaimPolicy: Delete # Auto-cleanup
Encrypted Storage
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: encrypted
provisioner: pd.csi.storage.gke.io
parameters:
type: pd-ssd
disk-encryption-kms-key: projects/my-project/locations/us/keyRings/my-keyring/cryptoKeys/my-key
Using StorageClasses in PVCs
Reference a StorageClass in your PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd # References the StorageClass
resources:
requests:
storage: 50Gi
Best Practices
- Use dynamic provisioning - Prefer StorageClasses over static provisioning for simplicity
- Create multiple StorageClasses - Different classes for different use cases (fast, standard, encrypted)
- Set appropriate reclaim policies - Retain for production, Delete for development
- Use WaitForFirstConsumer - For better pod scheduling, especially with zone-aware storage
- Document StorageClasses - Document which StorageClass to use for which use case
- Test provisioning - Verify that StorageClasses work correctly in your cluster
- Set default StorageClass - Configure a sensible default for your cluster
Topics
- Parameters & Binding - StorageClass parameters and volume binding modes
See Also
- PVs & PVCs - How to request persistent storage
- Access Modes & Reclaim Policy - Access modes and reclaim policies
- CSI Persistent Volumes - Container Storage Interface