Перейти к содержанию

Раскатка aerozveno на n1 — шпаргалка оператора

Полный раздел с контекстом, локальным запуском и диагностикой — README.md.

Живой стенд хакатона: https://aerozveno.ff, кластер kubectl --context n1, namespace aerozveno. Манифесты — k3s/aerozveno/ (см. k3s/aerozveno/kustomization.yaml:4-16).

Параллельный контур без фронтенда и MinIOk3s/geoscan/ и домен geoscan.ff на n2; образы там из gitea.ff/gpb/geoscan-* (k3s/geoscan/40-deployment-gateway.yaml:26).


Секреты до apply

В манифестах ожидаются Secret в namespace aerozveno:

Secret Ключи Откуда брать значения
geoscan-secrets SERVICE_API_KEY, POSTGRES_PASSWORD creds-store project/geoscan
geoscan-s3 S3_ACCESS_KEY, S3_SECRET_KEY creds-store project/geoscan (ключи S3_FRONTEND_*)

scripts/sync-secrets.sh (scripts/sync-secrets.sh:30-34) создаёт secret с именем ${NAME}-secrets в namespace ${NAME}. Для aerozveno это дало бы aerozveno-secrets, а поды ждут geoscan-secrets (k3s/aerozveno/40-deployment-gateway.yaml:38-39). Скрипт удобен для ns geoscan на n2; на aerozveno секреты заводят вручную с правильным именем (через MCP creds, без записи значений в git).


Сборка и публикация образов бэкенда

Тег — 8-символьный sha коммита (docs/04-yandex-cr.md:38). На стенде aerozveno в манифестах сейчас, например, cr.yandex/crp5jbsajr22cc3jj3vr/aerozveno-gateway:5e046484 (k3s/aerozveno/40-deployment-gateway.yaml:45).

cd /path/to/geoscan   # корень репозитория
TAG=$(git rev-parse --short=8 HEAD)
REG=cr.yandex/crp5jbsajr22cc3jj3vr

docker build -f src/backend/gateway/Dockerfile   -t "$REG/aerozveno-gateway:$TAG" .
docker build -f src/backend/planner/Dockerfile   -t "$REG/aerozveno-planner:$TAG" .
docker build -f src/backend/validator/Dockerfile -t "$REG/aerozveno-validator:$TAG" .

docker push "$REG/aerozveno-gateway:$TAG"
docker push "$REG/aerozveno-planner:$TAG"
docker push "$REG/aerozveno-validator:$TAG"

После сборки обновить теги образов и BUILD_COMMIT в k3s/aerozveno/40-deployment-*.yaml, 70-migrate-job.yaml.

Проверка на станции (2026-09-17): однократная сборка gateway в этой среде завершилась ошибкой BuildKit (failed to run Build function: frontend grpc server closed unexpectedly). Образы на стенде уже есть в Yandex CR; перед выкатом нового кода сборку нужно прогнать локально до зелёного docker build.


Фронтенд (отдельно от образов gateway)

  1. cd src/frontend && npm ci && npm run build:site — см. src/frontend/package.json:18.
  2. scripts/publish-frontend.py — выгрузка в бакет MinIO (scripts/publish-frontend.py:12-14, бакет по умолчанию aerozveno-frontend).
  3. kubectl --context n1 -n aerozveno rollout restart deploy/geoscan-frontend — чистая подмена статики (k3s/aerozveno/45-deployment-frontend.yaml:9-10).

Детали — ../../95-deploy/frontend-on-aerozveno.md.


kubectl apply и проверка

scripts/deploy.sh aerozveno n1 не подходит: скрипт ждёт Deployment с именем aerozveno (scripts/deploy.sh:30), а gateway называется geoscan (k3s/aerozveno/40-deployment-gateway.yaml:4).

kubectl --context n1 apply -k k3s/aerozveno/ --server-side

for d in geoscan geoscan-planner geoscan-validator geoscan-frontend; do
  kubectl --context n1 -n aerozveno rollout status "deploy/$d" --timeout=300s
done

kubectl --context n1 -n aerozveno get certificate geoscan-tls
kubectl --context n1 -n aerozveno get pods,svc,ingress

DNS (один раз, CoreDNS на n2): строка 100.110.248.64 aerozveno.ff в cm/ff-coredns — см. docs/02-deploy.md:48-55.

С tailnet-машины:

curl --cacert ff-ca/ff-ca.crt https://aerozveno.ff/healthz
curl --cacert ff-ca/ff-ca.crt https://aerozveno.ff/readyz
curl --cacert ff-ca/ff-ca.crt https://aerozveno.ff/api/docs

Пример живого ответа (проверено 2026-09-17):

{"status":"ok"}
{"service":"gateway","version":"0.1.0","commit":"7173c9af","bootTime":"2026-09-16T16:16:33.650Z","uptimeSec":68553,"timestamp":"2026-09-17T11:19:06.767Z"}

Откат

# бэкенд — предыдущий ReplicaSet
kubectl --context n1 -n aerozveno rollout undo deploy/geoscan
kubectl --context n1 -n aerozveno rollout undo deploy/geoscan-planner
kubectl --context n1 -n aerozveno rollout undo deploy/geoscan-validator

kubectl --context n1 -n aerozveno rollout history deploy/geoscan
kubectl --context n1 -n aerozveno rollout undo deploy/geoscan --to-revision=<N>

# фронтенд — предыдущий образ nginx или повторная выгрузка старого dist-site в MinIO + restart frontend
kubectl --context n1 -n aerozveno rollout undo deploy/geoscan-frontend

Откат миграций БД в репозитории не автоматизирован — только forward-миграции в init/job (k3s/aerozveno/40-deployment-gateway.yaml:24-34).