Cuando hablamos de Kubernetes y microservicios, una de las grandes promesas es la resiliencia y la capacidad de autogestión del clúster. Sin embargo, para que estas capacidades se aprovechen al máximo, es fundamental entender y configurar adecuadamente las sondas Liveness y Readiness. Estas herramientas no solo son clave para mantener tus aplicaciones en funcionamiento, sino también para detectar problemas antes de que afecten a los usuarios.
En este artículo, desglosaremos qué son las sondas Liveness y Readiness, cómo funcionan, cómo configurarlas, cómo monitorizar su estado desde la CLI (kubectl
) y por qué las herramientas de monitorización y observabilidad son un complemento valioso. Finalmente, exploraremos ejemplos prácticos para que los responsables de microservicios puedan aplicarlo directamente en sus entornos.
¿Qué son las sondas Liveness y Readiness?
Las sondas Liveness y Readiness son herramientas integradas en Kubernetes que permiten evaluar la salud de los contenedores dentro de un Pod:
- Liveness Probe:
- ¿Qué evalúa? Determina si un contenedor sigue «vivo». Si una sonda Liveness falla, Kubernetes asume que el contenedor está en mal estado y lo reinicia automáticamente.
- ¿Por qué es importante? Los microservicios pueden encontrarse en situaciones donde un proceso queda bloqueado o entra en un estado inconsistente, pero sigue ejecutándose. La sonda Liveness detecta estos escenarios.
- Readiness Probe:
- ¿Qué evalúa? Indica si un contenedor está listo para recibir tráfico. Si esta sonda falla, Kubernetes deja de enviar solicitudes al Pod asociado.
- ¿Por qué es importante? Cuando una aplicación aún está inicializándose, cargando datos, o hay un fallo temporal (como un servicio externo inalcanzable), la sonda Readiness evita que los usuarios finales se enfrenten a errores.
¿Cómo funcionan?
Ambas sondas utilizan un mecanismo configurable que puede ser uno de los siguientes:
- HTTP: Una solicitud HTTP que espera un código de estado exitoso (2xx o 3xx).
- Comandos ejecutables: Una ejecución interna dentro del contenedor que debe devolver un código de salida 0 para indicar éxito.
- Cheques TCP: Verifica si un puerto TCP está disponible.
Ejemplo de configuración:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /readyz
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
En este ejemplo:
- La sonda Liveness verifica si el endpoint
/healthz
está disponible cada 10 segundos. - La sonda Readiness verifica si el endpoint
/readyz
está listo para procesar tráfico.
¿Cómo ver el estado de los Pods con kubectl
?
Kubernetes proporciona herramientas para inspeccionar el estado de los Pods directamente desde la CLI. Usando kubectl
, puedes identificar rápidamente si un Pod está en buen estado o si tiene problemas relacionados con las sondas.
- Comando básico para inspeccionar Pods:
kubectl get pods
Esto muestra una salida como la siguiente:NAME READY STATUS RESTARTS AGE myapp-deployment-12345-abcd 1/1 Running 0 5m
- READY: Indica el número de contenedores listos respecto al total.
- STATUS: Muestra si el Pod está
Running
,Pending
, o en algún estado de fallo comoCrashLoopBackOff
.
- Ver detalles específicos de las sondas: Para inspeccionar los eventos de Liveness y Readiness, puedes usar:
kubectl describe pod <pod_name>
En la salida, busca secciones como:Events: Type Reason Age From Message Warning Unhealthy 1m kubelet Readiness probe failed: connection refused
Esto indica que la sonda Readiness está fallando, posiblemente porque el servicio no puede conectarse a un recurso externo.
¿Es necesario usar una herramienta de monitorización?
Si bien kubectl
es útil para un análisis puntual, en entornos complejos con múltiples microservicios, es imprescindible usar herramientas de monitorización y observabilidad. Estas herramientas permiten:
- Alertas proactivas: Recibir notificaciones cuando las sondas fallan.
- Trazabilidad: Entender cómo los fallos de un Pod afectan al sistema completo.
- Análisis histórico: Identificar patrones de fallo para realizar ajustes preventivos.
Herramientas recomendadas
- Prometheus + Grafana:
- Prometheus puede recopilar métricas de Kubernetes, incluyendo el estado de las sondas Liveness y Readiness.
- Grafana permite visualizar estas métricas de forma clara y personalizable.
- Dynatrace:
- Proporciona análisis detallados de los estados de los Pods (
Running
,Pending
,CrashLoopBackOff
, etc.). - Permite configurar alertas basadas en eventos específicos como fallos consecutivos de Readiness.
- Proporciona análisis detallados de los estados de los Pods (
- Datadog:
- Ofrece integraciones preconfiguradas para Kubernetes.
- Incluye un monitoreo específico para sondas Liveness y Readiness.
Ejemplo práctico: Detectando problemas en un microservicio
Supongamos que tienes un microservicio que depende de una base de datos externa. Un día, los usuarios reportan que el sistema está lento o arroja errores intermitentes.
Paso 1: Configuración de sondas
- Configura una sonda Readiness para verificar que el microservicio pueda conectarse a la base de datos.
- Configura una sonda Liveness para asegurarte de que el microservicio no entre en un estado inconsistente.
Paso 2: Inspección inicial con kubectl
Ejecuta:
kubectl describe pod myapp-deployment-12345-abcd
La salida muestra:
Warning Unhealthy 2m kubelet Readiness probe failed: connection refused
Esto indica que el problema está en la conexión con la base de datos.
Paso 3: Uso de herramientas de monitorización
- Prometheus muestra un pico en los fallos de Readiness.
- Dynatrace detecta que el estado del Pod es
NotReady/Running
, señalando que el problema está fuera de Kubernetes.
Paso 4: Acción correctiva
El equipo de soporte resuelve el problema en la base de datos, los fallos de Readiness cesan, y el sistema vuelve a la normalidad.
Conclusión
Las sondas Liveness y Readiness son herramientas poderosas que no solo ayudan a garantizar la resiliencia de los microservicios, sino también a detectar problemas antes de que escalen. Sin embargo, para aprovechar su verdadero potencial, es esencial complementarlas con herramientas de monitorización que permitan obtener una visión integral del estado de tus Pods.
Si estás gestionando microservicios que presentan problemas recurrentes, invertir tiempo en configurar correctamente estas sondas y monitorizarlas puede marcar una diferencia significativa en la estabilidad de tus aplicaciones.