Настройка бэкапирования Kubernetes через Velero — опыт и сроки
Потеря данных в StatefulSet после неудачного деплоя — стандартная ситуация в боевых кластерах. Без бэкапа на уровне namespace восстановление занимает часы: пересоздавать StatefulSet, искать последний снапшот etcd, поднимать PV вручную. Мы сталкивались с этим десятки раз и знаем, как избежать таких сценариев. Velero закрывает этот gap: namespace-level и resource-level backup с поддержкой PV через CSI snapshot или Kopia (бывший Restic). При тестовом restore в изолированном namespace данные восстанавливаются за 5–15 минут — это в 10 раз быстрее ручного поднятия, которое занимает 2–3 часа.
Почему Velero лучше etcd-снапшотов?
etcd хранит состояние кластера, но восстановление из него — это возврат всего кластера целиком. Если нужно откатить один namespace или один PersistentVolume после ошибочного деплоя — etcd не подойдёт. Velero даёт гранулярность на уровне ресурсов и поддерживает гибкие политики хранения.
Кроме того, Velero интегрируется с облачными объектными хранилищами (S3, GCS, Azure Blob), что позволяет хранить бэкапы в другом регионе или аккаунте — ключевой элемент disaster recovery. По нашим замерам, время восстановления отдельного приложения снижается в 10 раз по сравнению с ручным процессом. При типичном кластере с 100 PVC и 50 workloads полный бэкап занимает около 20 минут.
Как избежать типичных ошибок при настройке Velero?
Первая проблема: CSI-драйвер без поддержки VolumeSnapshot API. Если такой драйвер не зарегистрировал VolumeSnapshotClass, Velero молча пропустит данные томов. В логах — Included Volumes: 0. Решение: включите Node Agent (Kopia) для файлового бэкапа или добавьте аннотацию velero.io/csi-volumesnapshot-class к PVC.
Вторая ошибка — IAM-политика для object storage без прав на запись объектов. На AWS типично: у service account есть доступ к bucket, но не к пути /*. Бэкап метаданных проходит, а данные нет. Ошибка в логах: AccessDenied на s3:PutObject для backups/*. Исправляется добавлением отдельного statement на arn:aws:s3:::velero-bucket/*.
Третья — restore в кластер с другим StorageClass. Velero не переименует StorageClass автоматически. Нужен --namespace-mappings или ConfigMap с resource modifier для маппинга имён. Без этого PVC зависнут в Pending.
Правильная архитектура бэкапа
Для production-кластера схема выглядит так: Object storage: отдельный S3-bucket (или GCS/Azure Blob) в другом регионе или аккаунте. Политика бэкапов: два расписания через Schedule CR:
- Ежедневный полный бэкап всего кластера с TTL 30 дней
- Почасовой бэкап критичных namespace'ов (базы данных, stateful workloads) с TTL 7 дней
Пример Schedule для почасовых бэкапов
---
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: hourly-databases
namespace: velero
spec:
schedule: "0 * * * *"
template:
includedNamespaces:
- postgres
- redis
storageLocation: default
volumeSnapshotLocations:
- default
ttl: 168h0m0s
---Node Agent (Kopia) обязательно включать, если хотя бы часть PV использует hostPath или NFS — там CSI snapshot недоступен.
Тестирование restore — обязательная часть настройки. Запускаем restore в отдельный namespace с суффиксом -restore-test каждые две недели. Автоматически проверяем, что приложение поднялось и данные целые.
Сравнение подходов: Velero vs etcd-снапшоты
| Критерий | Velero | etcd-снапшот |
|---|---|---|
| Гранулярность | namespace, resource | весь кластер |
| Восстановление PV | CSI/Kopia | вручную + ручное поднятие PV |
| Хранение | object storage (S3/GCS) | локальный файл |
| Время восстановления одного приложения | 5–15 минут | 1–2 часа |
| Поддержка кросс-региона | встроенная | нет |
Мониторинг бэкапов
Velero экспортирует метрики Prometheus на порту 8085. Ключевые:
-
velero_backup_success_total -
velero_backup_failure_total -
velero_backup_duration_seconds -
velero_restore_success_total
Алерт на velero_backup_failure_total > 0 за 2 часа — must-have. В Grafana есть готовый дашборд (ID 11055) с визуализацией статусов и длительности. Наша услуга включает автоматизацию бэкапов в рамках DevOps практик.
Процесс настройки под ключ
- Инвентаризация — проверяем StorageClass, CSI-драйвер, наличие
VolumeSnapshotClass, список приложений. - Выбор object storage и настройка IAM/service account с минимальными правами.
- Установка Velero через Helm-чарт (
vmware-tanzu/velero), настройкаBackupStorageLocationиVolumeSnapshotLocation. - Создание расписаний — для всего кластера и для критичных namespace.
- Настройка мониторинга — метрики, алерты, дашборд.
- Пробный restore — в отдельный namespace с проверкой целостности данных.
- Документация — описание всех Schedule CR, процедура полного и частичного восстановления.
Что входит в работу
- Аудит текущей инфраструктуры
- Установка и конфигурация Velero под ваше облако
- Настройка файлового бэкапа через Kopia при необходимости
- Интеграция с Prometheus и Grafana (3 алерта)
- Проведение тестового restore
- Документация и инструкция для команды
- 2 недели сопровождения после запуска
Ориентировочные сроки
| Сценарий | Сроки |
|---|---|
| Один кластер, CSI snapshot, S3 | от 1 дня |
| Несколько кластеров, кросс-регион restore | 2–3 дня |
| + Настройка мониторинга и алертов | +0.5 дня |
| + Тестирование disaster recovery | +1 день |
Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами для оценки вашей инфраструктуры. DevOps-инженеры нашей компании имеют десятилетний опыт в области резервного копирования Kubernetes, выполнено более 200 проектов по миграции и резервному копированию K8s. Гарантируем работоспособность настроек и готовы обучить вашу команду. Закажите настройку Velero для вашего кластера уже сегодня.
Velero Documentation на GitHub







