Files
orchestrator/docs/work-items/ORCH-021/07-infra-requirements.md

4.5 KiB
Raw Blame History

07 — Инфраструктурные требования (ORCH-021)

Топология НЕ меняется. Фича опирается на уже существующие HTTP-эндпоинты прода и существующий деплой-хук. Этот документ фиксирует, какие инфра-предпосылки должны выполняться, чтобы наблюдение и реакция работали.

1. Топология — без изменений

  • Прод orchestrator (8500), staging orchestrator-staging (8501), один сервер mva154 (см. docs/operations/INFRA.md). Новых контейнеров/портов/сервисов нет.
  • Наблюдение — внутрипроцессный reserved-agent job в worker'е прод-контейнера. Daemon-потоков не добавляется (в отличие от reconciler).

2. Наблюдаемый прод — HTTP-эндпоинты

  • Монитор опрашивает post_deploy_base_url (дефолт http://localhost:8500):
    • GET /health → ожидается HTTP 200 + тело {"status":"ok"} (BR-2);
    • GET /status, GET /queue → учёт доли HTTP 5xx (BR-2).
  • Эндпоинты уже существуют (src/main.py). Новых эндпоинтов фича НЕ вводит (out-of-scope APM/метрики).
  • Для self-hosting base_url=localhost:8500 означает: монитор бьёт по собственному контейнеру. Это допустимо для MVP (см. риск R-1 в 10-tech-risks.md).

3. Деплой-хук --rollback — предпосылки реакции

  • Реакция ROLLBACK (только не-self + post_deploy_auto_rollback=True) вызывает scripts/orchestrator-deploy-hook.sh --rollback с прод-env (переиспользуются deploy_prod_*: TARGET_SERVICE/TARGET_PORT/TARGET_IMAGE/COMPOSE_PROFILE/ PREV_IMAGE_FILE), по образцу self_deploy.build_deploy_command.
  • Предпосылка: при штатном деплое хук сохраняет предыдущий образ в PREV_IMAGE_FILE (.deploy-prev-image-prod). Без снимка → хук вернёт exit 1 («нет prev-образа») → ROLLBACK_FAILED + алерт (AC-9). Контракт exit-кодов хука (0/1/2) НЕ меняется.
  • Self-hosting: откат прод-орка хуком в тике ЗАПРЕЩЁН (контейнер не откатит себя, умирая). Если оператор по алерту решит откатить — только detached host-процесс (ssh + setsid, механика self_deploy.initiate_deploy), как у Phase B самодеплоя. Предпосылки для detached-пути (ssh-доступ host, shared-mount state-dir) уже выполнены для ORCH-36; в MVP detached-откат self вне тика наблюдения.

4. Restart-safe состояние — shared mount

  • Состояние наблюдения — sentinel-файлы под .post-deploy-state-<repo>/<wi>/ (armed, series, done) на том же mount settings.repos_dir, что и .deploy-state-* (ORCH-36). Миграции БД нет (см. 08-data-requirements.md).
  • requeue_running_jobs (ORCH-1) восстанавливает claimed post-deploy-monitor job после рестарта; series хранит счётчики опросов → наблюдение продолжается с того же места (BR-7/AC-15).

5. Конфигурация окружения (env ORCH_*)

Новые ключи (дефолты безопасны, в .env/.env.staging по необходимости): post_deploy_monitor_enabled (kill-switch, дефолт true), post_deploy_repos (CSV, пусто → self-hosting), post_deploy_window_s (900), post_deploy_interval_s (30), post_deploy_fail_threshold (3), post_deploy_5xx_threshold (0.5), post_deploy_auto_rollback (false), post_deploy_base_url (localhost:8500). Параметры отката — существующие deploy_prod_*, новых дублей не вводить.

6. Чего НЕ требуется

  • Новых контейнеров, портов, сетевых правил, секретов.
  • Prometheus / Grafana / APM (out-of-scope).
  • Изменений compose-топологии или деплой-пути не-self репо.