Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
835949931e | ||
|
|
0e5d2942c9 |
+24
@@ -0,0 +1,24 @@
|
|||||||
|
# LoadTest — Flask-сервис проверки загрузки файлов/сообщений.
|
||||||
|
# Образ: naeel/loadtest (Docker Hub, публичный — требование платформы Nubes).
|
||||||
|
#
|
||||||
|
# Деплой через «Простой HTTP контейнер»:
|
||||||
|
# - путь до образа: naeel/loadtest:<tag>
|
||||||
|
# - порт берётся из EXPOSE (ровно один) — 5000
|
||||||
|
# - переменные пода (env) — задаются в ЛК при создании (если нужны)
|
||||||
|
|
||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY site /app/site
|
||||||
|
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
# gunicorn вместо dev-сервера Flask:
|
||||||
|
# --timeout 300 — чтобы платформа/шлюз не резали долгие POST
|
||||||
|
# --workers 1 — однорепликовый тест-сервис, больше не нужно
|
||||||
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--timeout", "300", "--workers", "1", "site.app:app"]
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# 2026-08-21 — LoadTest: сборка Docker-образа для «Простой HTTP контейнер»
|
||||||
|
|
||||||
|
_Дата: 2026-08-21. Ветка: master. Состояние Flask сохранено в ветке `flask-state` (запушена)._
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
Перевести loadtest с managed-Flask (gitPath, без аннотаций) на «Простой HTTP контейнер»:
|
||||||
|
образ + переменные пода + аннотации к Ingress (раньше правили кубером на своём кластере).
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
1. Ветка `flask-state` — сохранение состояния Flask (запушена в origin).
|
||||||
|
2. `Dockerfile` в loadtest (master):
|
||||||
|
- `python:3.12-slim`, WORKDIR /app, requirements.txt, COPY site/, EXPOSE 5000
|
||||||
|
- CMD gunicorn `--timeout 300 --workers 1 site.app:app`
|
||||||
|
- Один EXPOSE (5000) — требование платформы (порт берётся из EXPOSE).
|
||||||
|
3. Сборка на ВМ (SSH remote-dev, docker 29.1.3): `docker build -t naeel/loadtest:v2.0.0`
|
||||||
|
- Контекст: `/home/naeel/loadtest-build` (rsync из локального loadtest).
|
||||||
|
- Логин Docker Hub на ВМ уже есть (`naeel`).
|
||||||
|
4. Push: `naeel/loadtest:v2.0.0` — digest `sha256:432a8742...`, linux/amd64, ~50MB, публичный.
|
||||||
|
|
||||||
|
## Данные для формы «Простой HTTP контейнер»
|
||||||
|
- **Путь до образа:** `naeel/loadtest:v2.0.0`
|
||||||
|
- **Переменные пода:** `{}` (секретов/окружения нет)
|
||||||
|
- **Дополнительные аннотации к Ingress** (JSON):
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"nginx.ingress.kubernetes.io/proxy-body-size": "1024m",
|
||||||
|
"nginx.ingress.kubernetes.io/proxy-connect-timeout": "120",
|
||||||
|
"nginx.ingress.kubernetes.io/proxy-read-timeout": "600",
|
||||||
|
"nginx.ingress.kubernetes.io/proxy-send-timeout": "600",
|
||||||
|
"nginx.ingress.kubernetes.io/proxy-request-buffering": "false"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Почему эти аннотации
|
||||||
|
Взяты из правок, которые раньше делали кубером на iot-naeel (см. History drhider):
|
||||||
|
- `proxy-body-size 1024m` — лимит тела (на общем кластере >64КБ обрывало: HTTP 000 ~10с).
|
||||||
|
- `connect/read/send-timeout 120/600/600` — таймауты (drhider ingress те же значения).
|
||||||
|
- `proxy-request-buffering false` — отключение буферизации тела (план, не выполненный на iot-naeel).
|
||||||
|
|
||||||
|
## Обновление образа
|
||||||
|
Только пересоздание контейнера с новым тегом (`latest` кэшируется зеркалом платформы).
|
||||||
|
В своём кластере — `kubectl -n <ns> set image deployment/containerk8s app=naeel/loadtest:<tag>`.
|
||||||
Reference in New Issue
Block a user