Ir al contenido principal

Persistencia de Datos y Liveness Probes en Kubernetes: Asegurando tus Aplicaciones


En el mundo dinámico de Kubernetes, la persistencia de datos y la salud de tus aplicaciones son pilares fundamentales para una operación confiable. En este artículo, exploraremos cómo implementar la persistencia de datos utilizando Persistent Volumes (PV) y Persistent Volume Claims (PVC), y cómo garantizar la salud de tus contenedores con Liveness Probes. Prepárate para profundizar en estos conceptos esenciales y aplicar el conocimiento con ejemplos prácticos.

Persistencia de Datos con Persistent Volumes (PV) y Persistent Volume Claims (PVC)

Kubernetes, por diseño, gestiona Pods efímeros. Esto implica que la pérdida de un Pod también implica la pérdida de los datos que contiene. Para evitar este problema, Kubernetes introduce Persistent Volumes (PV) y Persistent Volume Claims (PVC), que ofrecen una solución robusta para la persistencia de datos.

  • Persistent Volume (PV): Piensa en un PV como una porción de almacenamiento persistente disponible en el clúster de Kubernetes. Es una abstracción que desacopla la aplicación del almacenamiento subyacente, permitiendo flexibilidad y portabilidad.
  • Persistent Volume Claim (PVC): Un PVC es una solicitud de almacenamiento. Una aplicación, a través de un PVC, solicita una cantidad específica de almacenamiento a partir de los PV disponibles. Esta abstracción simplifica el proceso de solicitud y gestión de almacenamiento para los desarrolladores.

Ejemplo: Persistencia de Datos en AWS EBS

Vamos a crear un ejemplo concreto utilizando AWS Elastic Block Store (EBS) para demostrar la persistencia de datos. El proceso implica crear un volumen EBS en la consola de AWS, obtener su ID, y luego definir un PV y PVC correspondientes.

  1. Crear un Persistent Volume:

   apiVersion: v1
   kind: PersistentVolume
   metadata:
     name: pv-demo
   spec:
     capacity:
       storage: 1Gi
     accessModes:
       - ReadWriteOnce
     persistentVolumeReclaimPolicy: Retain
     awsElasticBlockStore:
       volumeID: vol-07d583069b6865699

Guarda este YAML en un archivo llamado pv-demo.yaml y aplícalo a tu clúster:


   kubectl apply -f pv-demo.yaml

Desglosemos este YAML:

  • accessModes: - ReadWriteOnce: Especifica que el volumen puede ser montado por un solo nodo y con acceso de lectura-escritura.
  • persistentVolumeReclaimPolicy: Retain: Indica que el volumen no se eliminará automáticamente cuando se libere el PVC. Esto es crucial para preservar tus datos.
  • awsElasticBlockStore: Define las propiedades específicas para el almacenamiento EBS en AWS, incluyendo el volumeID.

  • Crear un Persistent Volume Claim:


   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: pvc-demo
   spec:
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 1Gi

Guarda este YAML en un archivo llamado pvc-demo.yaml y aplícalo:


   kubectl apply -f pvc-demo.yaml

Este PVC solicita 1Gi de almacenamiento con acceso de lectura-escritura. Kubernetes buscará un PV compatible y lo asignará al PVC.

  1. Crear un Pod con PVC:

   apiVersion: v1
   kind: Pod
   metadata:
     name: pv-pod
   spec:
     containers:
       - name: pv-container
         image: ubuntu
         command: ["/bin/bash", "-c", "while true; do echo This is Day13 of 30DaysOfKubernetes; sleep 5 ; done"]
         volumeMounts:
           - name: pv-volume
             mountPath: /data
     volumes:
       - name: pv-volume
         persistentVolumeClaim:
           claimName: pvc-demo

Guarda este YAML en un archivo llamado pv-pod.yaml y aplícalo:


   kubectl apply -f pv-pod.yaml

Este Pod monta el PVC pvc-demo en el directorio /data. Cualquier dato escrito en /data dentro del contenedor se almacenará persistentemente en el volumen EBS. ¡Experimenta escribiendo archivos en /data y verás cómo persisten incluso después de reiniciar el Pod!

Liveness Probes en Detalle

Las Liveness Probes son una herramienta esencial para garantizar la salud y la disponibilidad de tus aplicaciones en Kubernetes. Permiten a Kubernetes monitorizar la salud de los contenedores y reiniciar aquellos que no responden correctamente, previniendo interrupciones en el servicio.

Tipos de Liveness Probes:

Kubernetes ofrece tres tipos de Liveness Probes:

  • Exec: Ejecuta un comando dentro del contenedor. Si el comando sale con un código de salida diferente de cero, la Probe se considera fallida y el contenedor se reinicia.
  • HTTP: Envía una solicitud HTTP GET al contenedor. Si la solicitud devuelve un código de estado diferente de 200-399, la Probe se considera fallida.
  • TCP: Intenta establecer una conexión TCP con el contenedor en un puerto específico. Si la conexión falla, la Probe se considera fallida.

Ejemplo: Liveness Probe con Exec

Vamos a ampliar el ejemplo básico de Liveness Probe con Exec para hacerlo más robusto. Crearemos un archivo de salud y lo utilizaremos para verificar la salud de la aplicación.

  1. Crear un archivo de salud:

Dentro del contenedor, crearemos un archivo /tmp/health.txt que contenga un mensaje de salud. Esto puede ser cualquier indicador de que la aplicación está funcionando correctamente.

  1. Modificar el Pod:

   apiVersion: v1
   kind: Pod
   metadata:
     name: liveness-probe
   spec:
     containers:
       - name: liveness-container
         image: ubuntu
         command: ["/bin/bash", "-c", "while true; do echo This is Day13 of 30DaysOfKubernetes; sleep 5 ; done"]
         livenessProbe:
           exec:
             command:
             - cat
             - /tmp/health.txt
           initialDelaySeconds: 5
           periodSeconds: 10
         volumeMounts:
           - name: health-volume
             mountPath: /tmp
             subPath: health.txt
     volumes:
       - name: health-volume
         emptyDir: {}

Guarda este YAML en un archivo llamado liveness-probe.yaml y aplícalo:


   kubectl apply -f liveness-probe.yaml

Desglosemos este YAML:

  • initialDelaySeconds: Especifica el número de segundos que Kubernetes debe esperar antes de comenzar a realizar las Liveness Probes. Esto permite que la aplicación se inicialice completamente.
  • periodSeconds: Especifica el intervalo en segundos entre las Liveness Probes. Un valor más pequeño significa una monitorización más frecuente.
  • exec: Define el comando a ejecutar para la Probe. En este caso, simplemente leemos el archivo /tmp/health.txt.

Consideraciones Importantes:

  • Diseña tus Liveness Probes cuidadosamente: Asegúrate de que la Probe realmente refleje la salud de la aplicación. Una Probe mal diseñada puede causar falsos positivos o negativos, llevando a reinicios innecesarios o a la incapacidad de detectar problemas reales.
  • Usa un timeout: Especifica un timeoutSeconds para la Probe para evitar que se quede bloqueada indefinidamente si la aplicación no responde.
  • Supervisa tus Liveness Probes: Monitorea las métricas de tus Liveness Probes para detectar problemas potenciales y optimizar su configuración. Las herramientas de monitorización de Kubernetes pueden proporcionar información valiosa sobre la salud de tus aplicaciones.

¡Ahora es tu turno!

  • Experimenta: Modifica los ejemplos de PV, PVC y Liveness Probe para adaptarlos a tus propias aplicaciones.
  • Investiga: Explora otros tipos de almacenamiento en Kubernetes y diferentes estrategias de Liveness Probes.
  • Automatiza: Integra la gestión de almacenamiento y la configuración de Liveness Probes en tus pipelines de CI/CD para una gestión más eficiente y consistente.

Dominar la persistencia de datos y las Liveness Probes es fundamental para construir aplicaciones robustas y confiables en Kubernetes. ¡Continúa aprendiendo y explorando el vasto mundo de Kubernetes!

Comentarios

Entradas populares de este blog

Autenticación y Autorización (Kubernetes).

La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                       Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...