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.
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 \
--set storageClass.reclaimPolicy=Retain \
--set storageClass.archiveOnDelete=false \
--set nfs.server=192.168.1.100 \
--set nfs.path=/exported/path
-
📦 Instala
nfs-provisioneren el namespace "default" -
🔗 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-client
Para comprobar recursos NFS exportados:
sudo showmount -e 192.168.1.100
Export list for 192.168.1.100:
/exported/paths 0.0.0.0/0
📝 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-client
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.