StorageClass

✅ StorageClasses permiten almacenamiento dinámico en Kubernetes.
✅ Diferentes provisioners ofrecen distintas opciones de almacenamiento.
✅ Facilitan la gestión automática de volúmenes sin intervención manual.
Si quieres usar NFS (Network File System) como almacenamiento en Kubernetes, puedes definir una StorageClass con un provisioner adecuado.
NFS
⚙ Opciones para usar NFS
Kubernetes no tiene un provisioner de NFS incorporado, pero puedes usar varias opciones de aprovisionamiento:
-
Manualmente: Creas un PersistentVolume (PV) con una ruta NFS y luego un PersistentVolumeClaim (PVC) lo usa.
-
Dynamic Provisioning con NFS Subdir External Provisioner: Usa un controlador que aprovisione dinámicamente volúmenes en un servidor NFS.
📌 Opción 1: StorageClass con aprovisionamiento manual (Static Provisioning)
En este caso, el StorageClass no es obligatorio, pero puede ayudar a organizar el almacenamiento.
📝 Paso 1: Crear un PersistentVolume (PV) manualmente
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: manual-nfs
nfs:
path: /exported/path
server: 192.168.1.100 # IP de tu servidor NFS
📝 Paso 2: Crear un PersistentVolumeClaim (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: manual-nfs
resources:
requests:
storage: 5Gi
🔹 Aquí, el PVC buscará un PV con storageClassName: manual-nfs.
📌 Opción 2: Aprovisionamiento dinámico con NFS Subdir External Provisioner
Para evitar crear manualmente PVs, puedes usar el NFS Subdir External Provisioner, que crea automáticamente directorios en un servidor NFS.
🛠 Paso 1: Instalar el NFS Provisioner
Si usas Helm, instala el provisioner:
# añade el repositorio helm
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update
# instalar "nfs-provisioner"
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--namespace wordpress \
--create-namespace \
--set nfs.server=192.168.1.100 \
--set nfs.path=/exported/path
--set storageClass.name=nfs-storage \
--set storageClass.defaultClass=false
-
📦 Instala
nfs-provisioneren el namespacewordpress(--namespace wordpress). -
🌍 Crea el namespace si no existe (
--create-namespace). -
🔗 Configura el servidor NFS y la ruta compartida (
--set nfs.server=192.168.1.1y--set nfs.path=/exported/path). -
📂 Crea una StorageClass llamada
nfs-storage(--set storageClass.name=nfs-storage). -
🚫 No la configura como StorageClass por defecto (
--set storageClass.defaultClass=false).
📝 Paso 2: Crear un PersistentVolumeClaim (PVC)
Después de instalarlo, el provisioner crea una StorageClass como esta:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-dynamic-nfs
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-storage
resources:
requests:
storage: 5Gi
🔹 Aquí, el PVC creará automáticamente un subdirectorio en el servidor NFS.
🚀 Comparativa
| Método | Ventajas | Desventajas |
|---|---|---|
| Manual (Static Provisioning) | Control total, útil si ya tienes PVs definidos | Hay que crear cada PV manualmente |
| Dinámico (NFS Provisioner) | Crea volúmenes automáticamente, menos gestión manual | Requiere instalar el provisioner |
Si tu infraestructura soporta un servidor NFS y necesitas escalabilidad, usar aprovisionamiento dinámico es la mejor opción.
🎯 Conclusión
-
NFS es una excelente opción para almacenamiento compartido en Kubernetes porque permite ReadWriteMany (RWX).
-
Puedes usar PVs estáticos o un provisioner dinámico para manejar el almacenamiento más eficientemente.
-
El NFS Subdir External Provisioner es una herramienta útil para facilitar la gestión.