StorageClasses
A StorageClass enables dynamic provisioning, creating PersistentVolumes on demand.
Manually creating a PV for every PVC does not scale. A StorageClass automates it through dynamic provisioning.
How it works
A StorageClass names a provisioner (e.g. your cloud's disk service) and default settings. When a PVC references that class, Kubernetes creates a brand-new PV automatically — no manual step.
Default class
Most clusters have a default StorageClass. A PVC that omits storageClassName uses it. You can define multiple classes for different tiers, such as fast SSD versus cheap HDD.
Example
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fast-claim
spec:
storageClassName: fast-ssd
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20GiWhen to use it
- A platform team creates a fast-ssd StorageClass backed by gp3 EBS volumes so developers can request high-performance storage with a single storageClassName field.
- A team creates a separate StorageClass for bulk storage with HDD-backed disks, letting workloads choose cost vs. performance via storageClassName.
- An operator sets a default StorageClass so that PVCs without an explicit storageClassName automatically receive standard SSD volumes.
More examples
StorageClass for AWS EBS gp3
Creates a StorageClass that provisions gp3 EBS volumes with 3000 IOPS using the EBS CSI driver on AWS.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
parameters:
type: gp3
iops: "3000"
throughput: "125"Set default StorageClass
Marks a StorageClass as the cluster default so PVCs without a storageClassName automatically use it.
# Annotate as default
kubectl annotate storageclass standard \
storageclass.kubernetes.io/is-default-class=true
# Verify
kubectl get storageclass
# NAME PROVISIONER DEFAULT
# standard (default) disk.csi.gke.io yesCompare StorageClass performance tiers
Defines two StorageClasses in one file — bulk HDD and fast SSD — giving workloads a cost vs. performance choice.
# Bulk storage (HDD)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: bulk-hdd
provisioner: disk.csi.gke.io
parameters:
type: pd-standard
---
# Fast storage (SSD)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: disk.csi.gke.io
parameters:
type: pd-ssd
Discussion