РазвертываниеУстранение неполадокСервис так и не становится здоровым

Моя служба деплоится, но никогда не становится здоровой

Сборка проходит успешно, реплики запускаются, но деплой остаётся в ожидании, помечается как нездоровый или никогда не начинает принимать трафик.

Что это значит

Проверка здоровья платформы — которая проверяет доступность порта вашего приложения — никогда не проходит, поэтому трафик никогда не переключается на новые реплики.

Почему это может происходить

  • Ваше приложение не слушает ожидаемый порт. Lizard внедряет переменную окружения PORT (порт контейнера по умолчанию 3000) и проверяет, что ваше приложение доступно там. Если ваше приложение жестко задано на другой порт или никогда не привязывает порт, проверка здоровья бесконечно проваливается. Типичный случай — Python-приложение: gunicorn и uvicorn привязывают 127.0.0.1, если вы не скажете им иначе, а проверка приходит извне процесса. В хостинге Python-приложений указана строка --bind 0.0.0.0:$PORT, которую требует каждый фреймворк.
  • Служба случайно перешла в рабочий режим. Установка containerPort=0 переводит службу в рабочий режим, который полностью пропускает проверку здоровья и регистрацию в балансировщике нагрузки. Служба, которая должна обслуживать HTTP, но получила containerPort=0, будет деплоиться «успешно» и просто никогда ничего не обслуживать — рабочий режим скрывает базовую проблему запуска вместо того, чтобы выявить её.

Возможные решения

Проверьте текущий порт

lizard port --service api

Если это выводит worker mode, у службы установлен containerPort=0. Верните его на реальный порт, если эта служба предназначена для обслуживания HTTP:

lizard port 3000 --service api
lizard redeploy --service api

Убедитесь, что ваше приложение слушает там, где ожидает Lizard

Прочитайте логи среды выполнения на предмет ошибок запуска и сверьте порт, который фактически привязало приложение, с тем, что внедрил Lizard:

lizard logs --service api
lizard ssh --service api -- env | grep PORT

См. также