0
0
KubernetesHow-ToBeginner · 3 min read

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 (Delete or Retain).
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: Delete
Output
storageclass.storage.k8s.io/fast-storage created
⚠️

Common Pitfalls

  • Using an incorrect or unsupported provisioner name causes provisioning failures.
  • Missing required parameters for some provisioners leads to errors.
  • Not setting reclaimPolicy defaults to Delete, 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

FieldDescriptionExample
apiVersionAPI version for StorageClassstorage.k8s.io/v1
kindResource typeStorageClass
metadata.nameName of the StorageClassfast-storage
provisionerStorage provisioner driverkubernetes.io/aws-ebs
parametersStorage options key-value pairstype: gp2
reclaimPolicyVolume deletion policyDelete 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.