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

Example · yaml
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: 20Gi

When 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.

Example · yaml
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.

Example · bash
# 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  yes

Compare StorageClass performance tiers

Defines two StorageClasses in one file — bulk HDD and fast SSD — giving workloads a cost vs. performance choice.

Example · yaml
# 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

  • Be the first to comment on this lesson.