How to Create Storage Class in Kubernetes: Step-by-Step Guide
To create a
StorageClass in Kubernetes, define a YAML manifest specifying the provisioner and optional parameters, then apply it using kubectl apply -f. This enables dynamic provisioning of persistent volumes with the specified storage backend.Syntax
A StorageClass manifest includes apiVersion, kind, metadata, and provisioner. Optional fields include parameters for storage options and reclaimPolicy to control volume deletion.
- apiVersion: Usually
storage.k8s.io/v1. - kind: Must be
StorageClass. - metadata: Name of the storage class.
- provisioner: The driver that provisions storage (e.g.,
kubernetes.io/aws-ebs). - parameters: Key-value pairs for storage options.
- reclaimPolicy: What happens to volumes on deletion (
DeleteorRetain).
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: <storage-class-name>
provisioner: <provisioner-name>
parameters:
<key>: <value>
reclaimPolicy: <Delete|Retain>Example
This example creates a StorageClass named fast-storage using the kubernetes.io/aws-ebs provisioner with gp2 type volumes and a Delete reclaim policy.
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: DeleteOutput
storageclass.storage.k8s.io/fast-storage created
Common Pitfalls
- Using an incorrect or unsupported
provisionername causes provisioning failures. - Missing required
parametersfor some provisioners leads to errors. - Not setting
reclaimPolicydefaults toDelete, which may delete data unintentionally. - Applying the manifest without cluster permissions results in access denied errors.
yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: wrong-storage provisioner: invalid-provisioner parameters: type: gp2 reclaimPolicy: Delete # Corrected version: apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: correct-storage provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Delete
Quick Reference
| Field | Description | Example |
|---|---|---|
| apiVersion | API version for StorageClass | storage.k8s.io/v1 |
| kind | Resource type | StorageClass |
| metadata.name | Name of the StorageClass | fast-storage |
| provisioner | Storage provisioner driver | kubernetes.io/aws-ebs |
| parameters | Storage options key-value pairs | type: gp2 |
| reclaimPolicy | Volume deletion policy | Delete or Retain |
Key Takeaways
Define a StorageClass YAML with apiVersion, kind, metadata, provisioner, and optional parameters.
Apply the StorageClass manifest using kubectl to enable dynamic volume provisioning.
Choose the correct provisioner and parameters for your storage backend to avoid errors.
Set reclaimPolicy carefully to control what happens to volumes after deletion.
Verify cluster permissions before applying StorageClass manifests.