Files
loadtest/History/2026-08-21-gunicorn-fix-v201.md
T

2.3 KiB

2026-08-21 — LoadTest: фикс gunicorn (site.app → --chdir /app/site app:app), v2.0.1

Дата: 2026-08-21. Ветка: master. Инстанс: http-12.containerk8s.dev.nubes.ru (503).

Симптом

Инстанс отдавал 503 на всех путях (ingress nginx отвечал, бэкенд недоступен). Локальный прогон образа на ВМ показал падение gunicorn:

ModuleNotFoundError: No module named 'site.app'; 'site' is not a package

Причина

Папка site/ в проекте конфликтует со стандартным модулем Python site.py (автоматически импортируется интерпретатором при старте). import site.app всегда резолвится в stdlib-site → ModuleNotFoundError → worker падает → под не Ready → 503. На managed-Flask работало, потому что платформа запускала ФАЙЛ python site/app.py, а не импорт пакета site.app.

Фикс

Dockerfile CMD:

gunicorn --bind 0.0.0.0:5000 --chdir /app/site --timeout 300 --workers 1 app:app
  • --chdir /app/site + импорт app:app (без пути через site) — stdlib-site не мешает.
  • Проверено на ВМ: docker run naeel/loadtest:v2.0.1/health = ok v2.0.0, HTTP 200.

Образ

  • naeel/loadtest:v2.0.1 — digest sha256:9ad5cd52..., запушен в Docker Hub.
  • В ЛК редеплой с путём naeel/loadtest:v2.0.1 (новый тег — старый v2.0.0 мог кэшироваться зеркалом).

Кластеры (наблюдения 2026-08-21)

  • k8s-3-sandbox-nubes-ru — НЕ запускается вообще (баги платформы: script returned exit code 1, No such property: name for class: Script2, поды не работают).
  • k8s-4-sandbox-nubes-ru — запустилось, но ТОЛЬКО с одной аннотацией: nginx.ingress.kubernetes.io/proxy-body-size: 1024m. Добавление других аннотаций (таймауты/request-buffering) → падение скрипта платформы (поле ingress_annotations «поддерживает пока простые аннотации»).