Skip to main content

StorageClass

image.png

✅ 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:

  1. Manualmente: Creas un PersistentVolume (PV) con una ruta NFS y luego un PersistentVolumeClaim (PVC) lo usa.

  2. 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-provisioner en el namespace wordpress (--namespace wordpress).

  • 🌍 Crea el namespace si no existe (--create-namespace).

  • 🔗 Configura el servidor NFS y la ruta compartida (--set nfs.server=192.168.1.1 y --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.