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.

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:

  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 \
  --set nfs.server=192.168.1.100 \
  --set nfs.path=/exported/path

# Desinstalar
helm delete nfs-provisioner -n default
📝 Paso 2: StorageClass con NFS Provisioner

Después de instalarlo, el provisioner crea una StorageClass como esta:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: "false"  # Si es "true", mantiene datos tras borrar el PVC
reclaimPolicy: Retain
volumeBindingMode: Immediate

 

📝 Paso 3: PVC usando esta StorageClass

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.