🎓 LEVEL 35 DEBRIEF: StorageClass Configuration¶
Congratulations! You've mastered StorageClass troubleshooting - the foundation of dynamic storage provisioning in Kubernetes!
📊 What You Fixed¶
The Problem:
Result: PVC stuck in Pending foreverThe Solution:
Result: PVC automatically provisioned and bound🔍 Understanding StorageClass¶
What is a StorageClass?¶
StorageClass is a Kubernetes resource that describes different "classes" of storage: - Provisioner: What creates the storage (AWS EBS, GCE PD, NFS, etc.) - Parameters: Configuration (disk type, IOPS, encryption, etc.) - Reclaim Policy: What happens when PVC is deleted - Volume Binding Mode: When to provision (Immediate or WaitForFirstConsumer)
Static vs Dynamic Provisioning¶
Static Provisioning (Manual): 1. Admin creates PersistentVolume manually 2. User creates PVC 3. Kubernetes binds PVC to matching PV
Dynamic Provisioning (Automatic): 1. User creates PVC with storageClassName 2. StorageClass provisioner automatically creates PV 3. Kubernetes binds PVC to new PV
🎯 StorageClass Examples¶
AWS EBS (Block Storage)¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ebs
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iopsPerGB: "10"
encrypted: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
Google Cloud Persistent Disk¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-gce
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
replication-type: regional-pd
Azure Disk¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-azure
provisioner: kubernetes.io/azure-disk
parameters:
storageaccounttype: Premium_LRS
kind: Managed
NFS (Network File System)¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: example.com/nfs
parameters:
server: nfs-server.example.com
path: /exported/path
readOnly: "false"
💥 Common Mistakes¶
Mistake 1: Non-Existent StorageClass¶
Fix: Usekubectl get sc to find available classes
Mistake 2: Wrong Provisioner for Cloud¶
# On AWS, but using GCE provisioner
kind: StorageClass
provisioner: kubernetes.io/gce-pd # ❌ Wrong cloud!
Mistake 3: Missing Default StorageClass¶
Fix: Mark one as default:🚨 REAL-WORLD INCIDENT: The Missing StorageClass¶
Company: E-commerce platform Impact: 2 hours downtime, $400K revenue loss
What Happened:
- New developer created PVC with storageClassName: fast-storage
- StorageClass didn't exist
- Deployment stuck, pods couldn't start
- Black Friday traffic lost
Root Cause: No validation of StorageClass existence
Fix: - Document available StorageClasses - Add admission webhook to validate - Create standard storage classes in all environments
🛡️ Best Practices¶
-
List available classes:
-
Set a default:
-
Use WaitForFirstConsumer for multi-zone:
-
Document your classes:
🎯 Key Takeaways¶
- StorageClass enables dynamic provisioning - No manual PV creation
- Must exist before PVC creation - Or PVC stays Pending
- Different classes for different needs - Fast/slow, cheap/expensive
- Cloud-specific provisioners - AWS EBS, GCE PD, Azure Disk
- Check availability first -
kubectl get sc
Well done! You understand StorageClass fundamentals! 🎉