Advanced Storage Patterns¶
🎯 Learning Objectives
- Understand storage classes and CSI drivers
- Master volume provisioning and management
- Learn advanced storage patterns
- Troubleshoot storage issues effectively
- Optimize storage performance
Storage is critical for stateful workloads. Understanding storage classes, CSI drivers, and advanced patterns is essential for production deployments.
Storage Classes
Storage classes define storage characteristics. Use different classes for different workload requirements.
Data Persistence
Understand volume lifecycle. Data loss can occur if volumes are not properly configured.
Storage Classes¶
Dynamic Provisioning¶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iops: "3000"
throughput: "125"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Volume Binding
WaitForFirstConsumer delays binding until pod is scheduled, enabling topology-aware provisioning.
Volume Claims¶
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd
resources:
requests:
storage: 100Gi
CSI Drivers¶
CSI Architecture¶
CSI (Container Storage Interface) enables external storage providers.
CSI Components: - CSI Driver: Storage provider implementation - External Provisioner: Handles volume provisioning - External Attacher: Handles volume attachment - Node Plugin: Manages volume operations on nodes
CSI Benefits
CSI enables storage vendors to develop drivers without modifying Kubernetes core.
Troubleshooting¶
Common Issues¶
Volume Not Mounting¶
# Check PVC status
kubectl get pvc
# Check PV status
kubectl get pv
# Check pod events
kubectl describe pod <pod-name>
# Check CSI driver
kubectl get pods -n kube-system | grep csi
Troubleshooting Steps
- Verify PVC is bound
- Check storage class exists
- Verify CSI driver is running
- Check node capabilities
- Review CSI driver logs
Volume Performance Issues¶
# Check volume metrics
kubectl top pod <pod-name>
# Test I/O performance
kubectl exec <pod-name> -- dd if=/dev/zero of=/data/test bs=1M count=1000
# Check storage class parameters
kubectl get storageclass <sc-name> -o yaml
Best Practices¶
Production Recommendations
- Use appropriate storage classes for workloads
- Enable volume expansion where supported
- Implement backup strategies
- Monitor storage usage
- Test disaster recovery procedures
- Document storage architecture
Next Chapter: StatefulSets & Operators