Mi servicio se despliega pero nunca pasa a healthy
La compilación se completa y se inicia un nuevo pod, pero el despliegue se marca como fallido o la nueva versión nunca recibe tráfico.
Qué significa esto
La verificación de estado de la plataforma —una sonda TCP sobre el puerto de tu app— nunca se completa correctamente, así que el tráfico nunca se redirige al nuevo pod. Lizard espera unos 30 segundos y luego marca el despliegue como fallido. Un servicio que ya estaba en ejecución sigue sirviendo su versión anterior, salvo que tenga un volumen adjunto: en ese caso su pod antiguo se detiene primero, y el servicio queda caído hasta que un despliegue pase la verificación. Un primer despliegue aparece como crashed.
Por qué puede pasar esto
- Tu app no está escuchando en el puerto esperado. Lizard inyecta una variable de entorno
PORT(puerto de contenedor predeterminado3000) y comprueba que se pueda acceder a tu app ahí. Si tu app tiene otro puerto fijado en el código, o nunca se enlaza a ninguno, la verificación de estado nunca se completa correctamente. Una app de Python es el caso más habitual:gunicornyuvicornse enlazan a127.0.0.1a menos que les indiques otra cosa, y la sonda viene desde fuera del proceso. Hosting de apps Python tiene la línea--bind 0.0.0.0:$PORTque necesita cada framework. - El puerto del servicio no coincide con la imagen. Cuando
lizard upcrea un servicio a partir de un Dockerfile sin líneaEXPOSE, fija el puerto3000, aunque la imagen base escuche en otro, comonginxen el 80. Una variablePORTno cambia ese puerto. Ejecutalizard port <n>y vuelve a desplegar, o añade una líneaEXPOSE. Consulta a qué puerto envía Lizard el tráfico. - El servicio está accidentalmente en modo worker. Configurar
containerPort=0pone un servicio en modo worker, lo que omite por completo la verificación de estado y el registro en el balanceador de carga. Un servicio que debería servir HTTP pero se cambió acontainerPort=0se desplegará “correctamente” y simplemente nunca servirá nada: el modo worker oculta el problema subyacente de arranque en lugar de mostrarlo.
Posibles soluciones
Comprueba el puerto actual
lizard port --service apiSi esto muestra worker mode, el servicio tiene containerPort=0. Vuelve a configurarlo con un puerto real si este servicio debe servir HTTP:
lizard port 3000 --service api
lizard redeploy --service apiConfirma que tu app está escuchando donde Lizard espera
Revisa los logs de ejecución para detectar errores de arranque y la dirección en la que la app indica que escucha. Compárala con el puerto del servicio, que Lizard pasa a la app como PORT:
lizard logs --service api
lizard port --service apiVer también
- Background Workers — cuándo
containerPort=0es (y no es) la opción correcta. - Despliegues → lifecycle — dónde se sitúa la verificación de estado dentro de un despliegue.
Actualizado