Volúmenes

SoluciónEn queKubernetes, nosun aportan los contenedores para tener persistencia de ficheros. Un volumen es una rutaforma 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 contenedorcaso quede uso y del proveedor de infraestructura.
✅ Algunos de los más comunes:
-
emptyDir:
-
Crea un volumen vacío cuando el pod se
vainicializa.a -
enSe
otroborrasitio(Una carpeta encuando elhost,podunamuere.carpeta -
red,Útil
algún tipo de servicio depara almacenamientoentemporalla nube,(caches, etc.).
guardarde -
-
AquíhostPath:el-
de los volúmenes donde guardaremos una ruta del contenedor(/usr/share/nginx/html) enMonta una carpeta del nodo
dondefísicose(host)ejecutadentro del contenedor. -
No es recomendable para producción, pero útil para pruebas locales.
ejemplo -
-
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 elcontenedor(/home/docker/html).recursoTambiénquecomentadorepresentatenéisun bloque de almacenamiento real en elejemplo usando otros tipos de volúmenesclúster, comosonuneldiscousarEBS,unauncarpetadiscode redlocal o un'empty-volume'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: Pod
metadata:
name: test-pd
labels:
app: test-app
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: host-volume
volumes:
# - name: empty-volume
# emptyDir: {}
# - name: nfs-volume
# nfs:
# server: 10.108.211.244
# path: /
- name: host-volume
hostPath:
path: /home/docker/html
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: nginx1
spec:
type: NodePort
selector:
app: test-app
ports:
- protocol: TCP
port: 80
targetPort: 80PersistentVolume & PersistentVolumeClaim
'PersistentVolume' funciona conjuntamente con el concepto de 'PersistentVolumeClaim' para desacoplar la configuración de los distintos tipos de persistencia de la aplicación.
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0002
spec:
capacity:
storage: 0.2Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: standard
hostPath:
path: /home/docker/html
type: Directory
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-1mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 0.2Gi5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
labels:
app: test-appmypod-pvc
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: claim-1
containers:
- name: task-pv-containermyapp
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: task-pv-storagemyvolume
volumes:
---
apiVersion: v1
kind: Service
metadata: name: nginx1myvolume
spec:persistentVolumeClaim:
type:claimName: NodePort
selector:
app: test-app
ports:
- protocol: TCP
port: 80
targetPort: 80mypvc