Google Cloud Run запускает контейнер, прежде чем Healthcheck станет здоровым - PullRequest
1 голос
/ 21 апреля 2020

У меня есть изображение с относительно длительным временем запуска ~ 5 секунд. Другими словами, сервер Flask запущен и работает, но я загружаю некоторые данные в глобальные переменные, поэтому сервер на данный момент не работает. Если я пингую конечную точку Google Cloud Run в течение этого времени, время ожидания соединения будет

upstream request timeout

. Чтобы избежать этого, я добавил проверку работоспособности docker, которая вызывает конечную точку на моем сервере. Этот HTTP-запрос имеет время ожидания 2 секунды. Если время ожидания истекло, это означает, что сервер все еще загружает эти глобальные файлы, и конечная точка еще не готова к приему запросов. Это отлично работает в разработке, но не в Cloud Run. Cloud Run начинает отправлять трафик c на мой сервер до того, как он завершит загрузку, а затем, до того, как состояние контейнера HEALTHCHECK станет действительно "здоровым".

Мой вопрос

Как я могу отложить Cloud Run от доставки traffi c до моего контейнера до его полной настройки?

Edit> answer

В моем случае (с использованием Python + Gunicorn) я смог решить эту проблему с помощью шаблон "фабрики приложений" . То есть, запустите Gunicorn с

$ gunicorn 'test:create_app()'

Где функция create_app() возвращает приложение Flask.

Моя гипотеза о том, почему это работает, потому что до тех пор, пока эта функция не вернется, Gunicorn будет еще не прослушивает порт, к которому он привязан, и Cloud Run не начнет отправлять трафик c в ваш новый работающий контейнер, пока это не так.

1 Ответ

1 голос
/ 23 апреля 2020

Rodri go -Silveira решение:

В моем случае (с использованием Python + Gunicorn) мне удалось решить эту проблему с помощью «фабрики приложений», То есть, запустите Gunicorn с

$ gunicorn 'test: create_app ()' Где функция create_app () возвращает приложение Flask.

Моя гипотеза о том, почему это работает, потому что до эта функция возвращается, Gunicorn еще не прослушивает порт, к которому она привязана, и Cloud Run не начнет отправлять трафик c в ваш новый работающий контейнер, пока это не так.

...