Kubernetes es una plataforma robusta que orquesta aplicaciones en contenedores, y una de sus características clave es garantizar que nuestras aplicaciones se ejecuten de manera eficiente y confiable. Para lograrlo, Kubernetes utiliza tres tipos de probes: Liveness, Readiness y Startup Probes, que monitorean la salud y el estado de las aplicaciones. En este artículo, vaamos a explicar qué son estas probes, por qué son importantes y cómo configurarlas correctamente para garantizar el rendimiento de tu aplicación.
¿Qué son las Probes en Kubernetes?
Las probes son chequeos que Kubernetes realiza para determinar si los contenedores de una aplicación están funcionando como deberían. Existen tres tipos principales de probes:
Liveness Probe: Verifica si el contenedor sigue funcionando. Si falla, Kubernetes lo reinicia automáticamente.
Readiness Probe: Indica si el contenedor está listo para recibir tráfico. Si falla, el pod se eliminará del servicio para evitar el envío de tráfico a un contenedor no preparado.
Startup Probe: Ayuda a aplicaciones con tiempos de arranque largos. Se utiliza para reemplazar las Liveness Probes hasta que la aplicación haya terminado de arrancar correctamente.
Liveness Probe: Monitoreo Continuo
El Liveness Probe es esencial para saber si tu aplicación sigue funcionando correctamente. Se configura con un chequeo HTTP, un comando específico o un chequeo de TCP. Por ejemplo, en una aplicación web que responde en /health
, podemos configurar la probe de esta manera:
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
Explicación:
initialDelaySeconds
: El tiempo de espera antes de realizar el primer chequeo, permitiendo a la aplicación arrancar.periodSeconds
: La frecuencia con la que Kubernetes realizará el chequeo.
Si el endpoint /health
no responde dentro del tiempo especificado, Kubernetes reiniciará el contenedor, asumiendo que algo ha fallado.
Readiness Probe: Preparando el Tráfico
El Readiness Probe asegura que el contenedor esté listo para recibir tráfico. Esto es crucial en el despliegue de aplicaciones distribuidas, ya que previene que Kubernetes envíe solicitudes a un contenedor que aún no está completamente operativo. Un ejemplo de configuración sería:
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
En este caso, Kubernetes chequea que el endpoint /ready
esté disponible antes de incluir el pod en el balanceo de tráfico. Si el probe falla, el pod no recibirá tráfico hasta que esté listo nuevamente.
Startup Probe: Manejo de Tiempos de Arranque Largos
Para aplicaciones con tiempos de inicio largos, una Startup Probe es útil porque sustituye la Liveness Probe durante el arranque inicial. Si la startup probe pasa, Kubernetes activará las otras probes (Liveness y Readiness). Un ejemplo de configuración sería:
startupProbe:
httpGet:
path: /startup
port: 8080
failureThreshold: 30
periodSeconds: 10
Explicación:
failureThreshold
: Cuántas veces Kubernetes puede fallar en el chequeo antes de reiniciar el contenedor.periodSeconds
: El intervalo entre los chequeos.
Esta probe es clave para evitar reinicios prematuros en aplicaciones que requieren más tiempo para arrancar.
Consideraciones Finales
Configurar correctamente las probes es fundamental para mantener la estabilidad y el rendimiento de tu aplicación en Kubernetes. Cada probe cumple un rol esencial:
Liveness Probe mantiene la aplicación corriendo.
Readiness Probe asegura que el tráfico sólo se dirija a contenedores listos.
Startup Probe previene que aplicaciones con arranques lentos sean reiniciadas antes de tiempo.
Un mal ajuste en estos parámetros puede resultar en fallas frecuentes o en la pérdida de tráfico hacia tu aplicación.