Skip to main content

Volúmenes

image.png

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:

  1. emptyDir:

    • Crea un volumen vacío cuando el pod se vainicializa.

      a
    • guardar
    • en

      Se otroborra sitio(Una carpeta encuando el host,pod unamuere.

      carpeta
    • de
    • red,

      Útil algún tipo de servicio depara almacenamiento entemporal la nube,(caches, etc.).

  2. AquíhostPath:

    el
      ejemplo
    • de los volúmenes donde guardaremos una ruta del contenedor(/usr/share/nginx/html) en

      Monta una carpeta del nodo dondefísico se(host) ejecutadentro del contenedor.

    • No es recomendable para producción, pero útil para pruebas locales.

  3. persistentVolumeClaim (PVC):

    • Solicita almacenamiento persistente a través de un PersistentVolume.

    • Es la forma estándar de montar almacenamiento duradero en Kubernetes.

  4. configMap / secret:

    • Permiten montar configuraciones o secretos como archivos dentro de los pods.

  5. nfs:

    • Monta un volumen compartido a través de un servidor NFS externo.

  6. 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 contenedor(/home/docker/html).recurso Tambiénque comentadorepresenta tenéisun bloque de almacenamiento real en el ejemplo usando otros tipos de volúmenesclúster, como sonun eldisco usarEBS, unaun carpetadisco de 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: 80

PersistentVolume & 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