Volúmenes

En Kubernetes, un volumen es una forma de proporcionar almacenamiento persistente a los pods y sus contenedores. Los volúmenes permiten que los datos persistan más allá de la vida de un pod individual (ya que los pods son efímeros y sus datos locales se pierden cuando son eliminados).
📦 Tipos de volúmenes en Kubernetes
Kubernetes soporta distintos tipos de volúmenes dependiendo del caso de uso y del proveedor de infraestructura.
-
emptyDir:
-
Crea un volumen vacío cuando el pod se inicializa.
-
Se borra cuando el pod muere.
-
Útil para almacenamiento temporal (caches, etc.).
-
-
hostPath:
-
Monta una carpeta del nodo físico (host) dentro del contenedor.
-
No es recomendable para producción, pero útil para pruebas locales.
-
-
persistentVolumeClaim (PVC):
-
Solicita almacenamiento persistente a través de un PersistentVolume.
-
Es la forma estándar de montar almacenamiento duradero en Kubernetes.
-
-
configMap / secret:
-
Permiten montar configuraciones o secretos como archivos dentro de los pods.
-
-
nfs:
-
Monta un volumen compartido a través de un servidor NFS externo.
-
-
cloud-specific (AWS EBS, GCE Persistent Disk, Azure Disk):
-
Volúmenes gestionados por proveedores cloud que pueden ser montados como almacenamiento persistente.
-
🗂️ Relación entre PersistentVolume (PV) y PersistentVolumeClaim (PVC)
-
PersistentVolume (PV):
Es el recurso que representa un bloque de almacenamiento real en el clúster, como un disco EBS, un disco local o un volumen NFS. -
PersistentVolumeClaim (PVC):
Es una petición de almacenamiento por parte de un pod o aplicación. El PVC "reclama" un PV disponible según el tamaño y las características que necesita.
🔧 Manifiesto de PVC + Pod
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: mypod-pvc
spec:
containers:
- name: myapp
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: myvolume
volumes:
- name: myvolume
persistentVolumeClaim:
claimName: mypvc