En este tema, exploraremos los volúmenes persistentes en Kubernetes, un componente esencial para gestionar el almacenamiento de datos que necesita sobrevivir a la vida útil de los pods. Aprenderemos qué son, cómo se configuran y cómo se utilizan en un clúster de Kubernetes.

¿Qué es un Volumen Persistente?

Un Volumen Persistente (PV) es un recurso de almacenamiento en un clúster de Kubernetes que ha sido aprovisionado por un administrador. Los PVs son independientes del ciclo de vida de los pods y proporcionan una forma de almacenar datos de manera duradera.

Características Clave de los PVs:

  • Persistencia: Los datos almacenados en un PV persisten más allá de la vida útil de los pods.
  • Independencia: Los PVs son recursos del clúster y no están ligados a un pod específico.
  • Acceso: Los PVs pueden ser accedidos por uno o más pods, dependiendo del modo de acceso configurado.

Tipos de Volúmenes Persistentes

Kubernetes soporta varios tipos de volúmenes persistentes, incluyendo:

  • NFS (Network File System)
  • iSCSI (Internet Small Computer Systems Interface)
  • GlusterFS
  • CephFS
  • AWS EBS (Elastic Block Store)
  • GCE PD (Google Compute Engine Persistent Disk)
  • Azure Disk

Configuración de un Volumen Persistente

Para configurar un PV, se debe definir un objeto de tipo PersistentVolume en un archivo YAML. A continuación, se muestra un ejemplo de configuración de un PV utilizando NFS:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /path/to/nfs
    server: nfs-server.example.com

Explicación del Código:

  • apiVersion: La versión de la API de Kubernetes.
  • kind: El tipo de recurso, en este caso PersistentVolume.
  • metadata: Información sobre el PV, como su nombre.
  • spec: Especificaciones del PV.
    • capacity: La capacidad de almacenamiento del PV.
    • accessModes: Los modos de acceso permitidos (ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
    • nfs: Configuración específica para el tipo de almacenamiento NFS.

Reclamaciones de Volúmenes Persistentes

Para que un pod utilice un PV, se debe crear una Reclamación de Volumen Persistente (PVC). Un PVC es una solicitud de almacenamiento por parte de un usuario. A continuación, se muestra un ejemplo de configuración de un PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

Explicación del Código:

  • apiVersion: La versión de la API de Kubernetes.
  • kind: El tipo de recurso, en este caso PersistentVolumeClaim.
  • metadata: Información sobre el PVC, como su nombre.
  • spec: Especificaciones del PVC.
    • accessModes: Los modos de acceso solicitados.
    • resources: Los recursos solicitados, como la cantidad de almacenamiento.

Uso de un PVC en un Pod

Una vez que se ha creado un PVC, se puede utilizar en un pod. A continuación, se muestra un ejemplo de cómo un pod puede utilizar un PVC:

apiVersion: v1
kind: Pod
metadata:
  name: pod-using-pvc
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: my-pvc
  volumes:
    - name: my-pvc
      persistentVolumeClaim:
        claimName: pvc-nfs

Explicación del Código:

  • apiVersion: La versión de la API de Kubernetes.
  • kind: El tipo de recurso, en este caso Pod.
  • metadata: Información sobre el pod, como su nombre.
  • spec: Especificaciones del pod.
    • containers: Lista de contenedores en el pod.
      • name: Nombre del contenedor.
      • image: Imagen del contenedor.
      • volumeMounts: Lista de volúmenes montados en el contenedor.
        • mountPath: Ruta en el contenedor donde se monta el volumen.
        • name: Nombre del volumen.
    • volumes: Lista de volúmenes utilizados por el pod.
      • name: Nombre del volumen.
      • persistentVolumeClaim: Especifica el PVC a utilizar.
        • claimName: Nombre del PVC.

Ejercicio Práctico

Ejercicio:

  1. Crea un PersistentVolume de 10Gi utilizando NFS.
  2. Crea un PersistentVolumeClaim que solicite 5Gi de almacenamiento.
  3. Crea un pod que utilice el PVC y monte el volumen en /usr/share/nginx/html.

Solución:

  1. PersistentVolume (pv-nfs.yaml):

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nfs
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteMany
      nfs:
        path: /path/to/nfs
        server: nfs-server.example.com
    
  2. PersistentVolumeClaim (pvc-nfs.yaml):

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nfs
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    
  3. Pod (pod-using-pvc.yaml):

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-using-pvc
    spec:
      containers:
        - name: my-container
          image: nginx
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              name: my-pvc
      volumes:
        - name: my-pvc
          persistentVolumeClaim:
            claimName: pvc-nfs
    

Pasos para Ejecutar:

  1. Aplica el PersistentVolume:

    kubectl apply -f pv-nfs.yaml
    
  2. Aplica el PersistentVolumeClaim:

    kubectl apply -f pvc-nfs.yaml
    
  3. Aplica el pod:

    kubectl apply -f pod-using-pvc.yaml
    

Conclusión

En esta sección, hemos aprendido sobre los volúmenes persistentes en Kubernetes, cómo configurarlos y utilizarlos en un clúster. Los PVs son esenciales para aplicaciones que requieren almacenamiento duradero y persistente. En el siguiente tema, exploraremos las Reclamaciones de Volúmenes Persistentes (PVCs) en mayor detalle y cómo se integran con los PVs para proporcionar almacenamiento a los pods.

Curso de Kubernetes

Módulo 1: Introducción a Kubernetes

Módulo 2: Componentes Principales de Kubernetes

Módulo 3: Gestión de Configuración y Secretos

Módulo 4: Redes en Kubernetes

Módulo 5: Almacenamiento en Kubernetes

Módulo 6: Conceptos Avanzados de Kubernetes

Módulo 7: Monitoreo y Registro

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados