Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae229d13ca | ||
|
|
1b4bf86b71 |
+4
-1
@@ -21,4 +21,7 @@ EXPOSE 5000
|
|||||||
# gunicorn вместо dev-сервера Flask:
|
# gunicorn вместо dev-сервера Flask:
|
||||||
# --timeout 300 — чтобы платформа/шлюз не резали долгие POST
|
# --timeout 300 — чтобы платформа/шлюз не резали долгие POST
|
||||||
# --workers 1 — однорепликовый тест-сервис, больше не нужно
|
# --workers 1 — однорепликовый тест-сервис, больше не нужно
|
||||||
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "site.app:app"]
|
# ВАЖНО: --chdir /app/site + app:app (НЕ site.app:app!) — папка site
|
||||||
|
# конфликтует со stdlib-модулем Python site.py (автозагружается при старте),
|
||||||
|
# поэтому import site.app всегда падает с ModuleNotFoundError.
|
||||||
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--chdir", "/app/site", "--timeout", "300", "--workers", "1", "app:app"]
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# 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` «поддерживает пока простые аннотации»).
|
||||||
Reference in New Issue
Block a user