Какие подходы вы используете для disaster recovery в Kubernetes?

Цели и параметры восстановления

Определите заранее два ключевых параметра: RPO (максимально допустимая потеря данных) и RTO (время восстановления). От них будут зависеть стратегия (частые реплики vs ночные снапшоты), архитектура (active-active vs active-passive) и бюджет.

Что обязательно резервировать

  • etcd — полное состояние кластера (CR, RBAC, сервисы, эндпойнты, секреты).

  • Манифесты/Helm/CRD — исходные конфигурации в Git (GitOps как источник истины).

  • Persistent Volumes (данные приложений) — снапшоты блочных дисков или логические дампы баз.

  • Секреты и ключи — шифруются и хранятся отдельно (KMS/Vault).

  • Артефакты — образы в registry, артефакты CI.

Основные подходы (стратегии)

  1. **Etcd snapshot + restore control plane
    **

    • Регулярные снапшоты etcd, хранение off-site, тестовая процедура восстановления. Подходит для полного восстановления кластера в том же состоянии на момент снапшота.
  2. **Rebuild cluster + apply manifests (GitOps)
    **

    • Восстанавливаете контрольную плоскость/нод-пулы заново с IaC (Terraform/Cluster API), потом git apply manifests/Helm. Используется в облаке и даёт чистую миграцию на новую версию K8s.
  3. **PV backup: CSI snapshots и application-aware backups
    **

    • Для stateful: CSI VolumeSnapshot для быстрых точечных снапшотов; для БД — logical backups (pg_dump, WAL shipping) или репликация (async/sync) для PITR.
  4. **Multi-cluster / cross-region replication
    **

    • Active-Active или Active-Passive: репликация данных и артефактов между регионами; глобальный LB/DNS для failover.
  5. **Application-aware backup
    **

    • Для консистентных бэкапов выполнять flush/lock DB, snapshot файловой системы или использовать встроенные механизмы БД.

Порядок восстановления (рекомендованный)

  • Вариант A — восстановление из etcd snapshot (полный restore): остановить API/kube-apiserver, восстановить etcd, запустить control plane, проверить состояние.

  • Вариант B — rebuild + restore PVs: 1) восстановить инфраструктуру/cluster control plane, 2) восстановить CRDs и StorageClasses, 3) восстановить PV (создать PVC из snapshot), 4) применить манифесты/Helm, 5) прогнать smoke tests и data integrity checks.
    В обоих вариантах внимайте секретам и RBAC: восстановление etcd вернёт их вместе (шифровать бэкапы).

Автоматизация и инструменты (примерный стек)

  • Velero — бэкапы ресурсов + поддержка snapshot/PVC/restore workflows.

  • CSI VolumeSnapshots или облачные дисковые снапшоты для PV.

  • Backup operators (для БД: Stash, Kasten, Percona operator) — application-aware.

  • IaC + GitOps (Terraform/Cluster API + ArgoCD/Flux) для быстрого пересоздания и синхронизации конфигурации.

  • Object storage (S3/GCS) — offsite хранение снапшотов.

  • Мониторинг бэкапов (alert при failed job).

Тестирование и регулярные rehearsals

  • Регулярно выполнять rehearsal restores в staging с проверкой целостности данных и запуска приложений.

  • Автоматизировать smoke tests, «canary restore» и проверку RTO/RPO.

  • Документированные runbooks с ролями и шагами восстановления; тренировки on-call команды.

Безопасность, хранение и управление

  • Шифруйте etcd-snaпшоты и бэкапы PV, храните ключи в KMS/HSM.

  • Ограничьте доступ к хранилищу бэкапов через IAM.

  • Ротация ключей/паролей и тестирование восстановления с актуальными секретами.

Операционные риски и best practices

  • Не полагайтесь только на single backup method — комбинируйте etcd snapshots + GitOps + PV snapshots.

  • Учитывайте совместимость версий etcd/K8s при restore.

  • Планируйте порядок восстановления для зависимых сервисов (DB → backend → frontend).

  • Контролируйте retention и автоматический cleanup, чтобы не накопить сотни ТБ.

  • Мониторьте и alert'ите ошибки бэкапов и истечение SLA.

Метрики успеха DR

  • Автоматизированные проверки: успешность бэкапа, время восстановления в тесте, целостность данных.

  • SLO по RTO/RPO, процент успешных rehearsal-restores в квартал.