StatusDude, un servicio de monitorización que ejecuta miles de comprobaciones por minuto y despliega varias veces al día, sostiene que Kubernetes no es imprescindible para operar en producción. La compañía describe en su blog cómo logró actualizaciones sin caídas ni peticiones perdidas combinando Docker Compose con HAProxy, tras descartar Traefik.
Los ingenieros explican que Traefik, la opción más extendida para entornos Docker, les planteó tres problemas durante los rolling deploys. Primero, al definir dos servicios con las mismas etiquetas aparecía el error "Service defined multiple times" y dejaban de enrutarse peticiones. Segundo, al escalar de cuatro a dos réplicas, la tabla de rutas internas de Traefik quedaba desincronizada con la realidad de Docker durante varios segundos, devolviendo errores 502. Tercero, y decisivo, su middleware de reintentos solo reintentaba sobre el mismo backend moribundo, sin redirigir la petición a un servidor sano, por lo que las solicitudes se perdían.
La solución adoptada se apoya en tres pilares. Primero, un docker-compose.yml con deploy.replicas: 2 y healthchecks que levanta dos contenedores del mismo servicio. Segundo, HAProxy como balanceador, cuya opción "redispatch" permite reintentar las peticiones fallidas en otro backend, evitando pérdidas durante los despliegues. Tercero, un script de despliegue que reemplaza las instancias de una en una. Además, se configuran tres capas de detección de salud complementarias: reintento por petición, observación pasiva de respuestas HTTP y chequeos activos cada segundo. El descubrimiento de backends se realiza mediante resolución DNS contra el servidor DNS integrado de Docker, cada dos segundos, lo que elimina la dependencia del socket de Docker. El artículo incluye los ficheros completos de configuración y detalla por qué cada ajuste —retries, redispatch, observe layer7 o server-template— resulta esencial para sostener una operación continua sin Kubernetes.
