gitea/RESTORE_VALIDATION.md
bootstrap 63c029b9df
All checks were successful
trash-ci / smoke (push) Successful in 0s
Add restore validation report
2026-05-06 18:10:58 +03:00

89 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Gitea Helm Chart And Restore Validation
Дата проверки: 2026-05-06
## Что входит в чарт
Чарт расположен в `gitea/.helm` и ставится как release `gitea` в namespace `gitea`.
- Gitea `gitea/gitea:1.22.6`.
- Gitea runner `gitea/act_runner:0.2.11`.
- PostgreSQL через dependency `postgresql-preprod:16.4.8` из `cr.yandex/crp3ccidau046kdj8g9q/charts/postgresql-preprod`.
- `universal-chart:0.1.9` используется для runner.
- Для Gitea используется статический Deployment template, потому что нужны sidecar containers для файлового backup без Multi-Attach PVC.
- Ingress/VirtualService в чарте нет, внешний routing остается в отдельном чарте.
- Чувствительные значения не лежат в `values.yaml`; секреты берутся из `gitea-secret`/`postgresql-secret`, шаблон секрета использует `lookup` и generated fallback values.
## Backup
Файлы Gitea backup:
- Реализованы sidecar containers в pod Gitea.
- `gitea-files-archive` читает `/data` read-only и собирает архив во временный `emptyDir`.
- `gitea-files-upload` отправляет архив в S3.
- Такой режим не монтирует `gitea-data` во второй pod и не ловит Multi-Attach на RWO PVC.
PostgreSQL backup:
- В чарте есть `CronJob/gitea-postgresql-backup`.
- Dump создается через `pg_dump` пользователем `gitea`.
- Upload идет в S3 через `amazon/aws-cli:2.15.57`.
Использованные S3 keys:
- Files: `gitops-backups/gitea-files/gitea-files-2026-05-06-145356.tar.gz`
- PostgreSQL: `gitops-backups/postgresql/gitea-postgresql-2026-05-06-145822.sql.gz`
## Restore
Restore запускается через `helm upgrade --install` с отдельным values-файлом:
- `restore.enabled=true`
- `restore.files.enabled=true`
- `restore.postgresql.enabled=true`
- `restore.s3.giteaFilesKey=<files backup key>`
- `restore.s3.postgresqlDumpKey=<postgresql dump key>`
Restore hook делает:
- scale down Deployment `gitea`;
- скачивание backup archives из S3;
- очистку `/data` и распаковку файлового backup;
- drop schema `public` в базе `gitea`;
- restore SQL dump через пользователя `gitea`;
- verification количества public tables и core tables;
- scale up Deployment `gitea`.
## Проверка
Проверено на `yc-infra-prod`, namespace `gitea`.
- Release `gitea` установлен заново после полной очистки namespace/PVC/PV.
- Pods после чистой установки: `gitea`, `gitea-ci-worker`, `postgresql-0`.
- Создан admin user `bootstrap`.
- Создан access token для API/git push.
- В свежий Gitea запушен репозиторий `bootstrap/gitea`.
- В репозиторий добавлен workflow `.gitea/workflows/trash-ci.yaml`.
- Runner зарегистрирован через generated registration token.
- Runner объявился с labels `linux-amd64` и `linux-shell`.
- CI task по `bootstrap/gitea` был принят runner.
- Тестовые файлы для restore созданы в `/data/backup-test` и `/data/gitea/custom/backup-test`.
- Файловый backup отправлен в S3.
- PostgreSQL backup вручную запущен из существующего `CronJob/gitea-postgresql-backup`.
- Restore запущен через `helm upgrade --install`.
- Restore job завершился успешно.
- Verification restore job: `110 public tables`, `3 core tables`.
- После restore Gitea API вернул `bootstrap/gitea|main`.
- После restore на PVC найдены:
- `/data/backup-test/blob.bin`
- `/data/backup-test/generated-at.txt`
- `/data/gitea/custom/backup-test/marker.txt`
- `/data/git/repositories/bootstrap/gitea.git`
- После restore в базе:
- `users=1`
- `repos=1`
- repository `bootstrap/gitea`
- action runs `1` и `2`
Итог: полный цикл install, runner, CI, backup files, backup PostgreSQL и restore из S3 проверен.