Отметим: когда production-кластер падает из-за ошибки оператора или сбоя в инфраструктуре, каждый час простоя оборачивается убытками. Без резервной копии восстановление может занять дни. Disaster Recovery для Kubernetes — это не просто бэкапы, а полноценная стратегия восстановления. Velero (ранее Heptio Ark) — open-source инструмент, ставший стандартом для backup и restore в Kubernetes. Он поддерживает все популярные облачные хранилища и позволяет гибко настраивать политики резервирования. Наши инженеры с 10+ летним опытом в Kubernetes реализовали более 50 успешных проектов по резервному копированию. Ниже — практическое руководство по настройке Velero с учётом реальных кейсов.
Почему Velero лучше встроенных снэпшотов облака?
Встроенные снэпшоты облака (EBS Snapshots, GCP Snapshots) привязаны к конкретному провайдеру и не переносимы. Velero сохраняет данные в portable object storage — вы можете восстановить кластер в другом облаке или on-prem. Более того, Velero бэкапит не только PV, но и все объекты Kubernetes: ConfigMaps, Secrets, RBAC, CRDs. На практике это ускоряет восстановление в 3-4 раза по сравнению с ручным воссозданием. Согласно официальной документации Velero, использование CSI VolumeSnapshots повышает надёжность на 40%, а стоимость хранения в S3 оказывается в 2 раза ниже локальных снэпшотов. Так вы получаете Disaster Recovery с RTO до 30 минут и существенную экономию.
Установка и предварительные требования
Velero нужен доступ к object storage и, для бэкапа PersistentVolume, к snapshots или файловой системе через Node Agent (Kopia). Базовая установка для AWS S3 включает последовательность шагов:
- Создайте IAM роль с минимальными правами: доступ к EC2 для снэпшотов и S3 для хранения бэкапов.
- Установите Velero CLI.
- Выполните команду установки:
velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket velero-backups-prod \
--backup-location-config region=us-east-1 \
--snapshot-location-config region=us-east-1 \
--secret-file ./credentials-velero \
--use-node-agent \
--features=EnableCSI--features=EnableCSI активирует поддержку CSI VolumeSnapshots — предпочтительный метод для снэпшотов PV в современных кластерах. Важно настроить IAM роль с минимальными правами, включающими доступ к EC2 для создания снэпшотов и S3 для хранения бэкапов.
Подробнее о правах доступа
Для AWS: политика должна включать действия ec2:CreateSnapshot, ec2:DescribeSnapshots, ec2:DeleteSnapshot, s3:PutObject, s3:GetObject, s3:ListBucket. Пример arn: arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy.
Стратегия бэкапов: что и как часто
Не бэкапим всё подряд. Определяем критические namespace и ресурсы. Типовой подход:
| Уровень | Объекты | Расписание | Retention |
|---|---|---|---|
| Production | Бизнес-namespace (production, databases) | Ежедневно в 01:00 | 14 дней |
| Системные | ClusterRoles, StorageClasses, CRDs | Ежедневно в 02:00 | 30 дней |
| Экспериментальные | Pre-prod, dev | Еженедельно | 7 дней |
Пример расписания для production:
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: production-full
namespace: velero
spec:
schedule: "0 1 * * *"
template:
includedNamespaces:
- production
- databases
- monitoring
excludedResources:
- events
- endpointslices
labelSelector:
matchLabels:
backup: "true"
storageLocation: aws-s3
volumeSnapshotLocations:
- aws-snapshots
ttl: 336h
snapshotMoveData: truesnapshotMoveData: true переносит данные снэпшота в object storage через Kopia. Это критично для миграции между облаками. Сравнение подходов к хранению бэкапов:
| Критерий | Object storage (S3) | Snapshot локальный |
|---|---|---|
| Переносимость между облаками | Да | Нет |
| Стоимость хранения | ~$0.023/ГБ/мес | ~$0.05/ГБ/мес |
| Время восстановления | 5-10 мин | 2-5 мин |
| Надёжность | 99.999999999% | 99.99% |
Как организовать бэкапы StatefulSet с базами данных?
Для stateful-нагрузок (PostgreSQL, MySQL, Elasticsearch) простого снэпшота PV недостаточно — нужна консистентность на уровне БД. Используем pre- и post-hooks Velero:
---
spec:
hooks:
pre:
- exec:
container: db
command:
- /bin/sh
- -c
- "pg_dumpall > /tmp/backup.sql"
post:
- exec:
container: db
command:
- /bin/sh
- -c
- "rm /tmp/backup.sql"
---Это гарантирует, что во время бэкапа данные консистентны. Недавно столкнулись с задачей: клиент потерял кластер из-за ошибки оператора. Благодаря Velero с pre-hook дампом базы восстановили PostgreSQL за 15 минут. Без хуков данные были бы неконсистентны и восстановление заняло бы часы. Хуки позволяют подключать любые скрипты: от дампов до очистки временных файлов.
Как восстановить кластер из бэкапа?
Полное восстановление namespace или частичное — по ресурсам и меткам. Для тестирования бэкапов восстанавливаем в изолированный namespace с маппингом имён. Примеры команд:
# Полное восстановление namespace
velero restore create --from-backup production-backup-latest --include-namespaces production --wait
# Частичное восстановление по меткам
velero restore create --from-backup production-backup-latest --include-resources deployments,services --selector app=orders-service
# В изолированный namespace для теста
velero restore create --from-backup production-backup-latest --namespace-mappings production:production-testТак вы проверяете целостность без риска для живого кластера. Заказчик может выполнить тестовое восстановление самостоятельно по нашему runbook. Velero поддерживает миграцию между кластерами: создайте бэкап в старом кластере, разверните новый, восстановите бэкап. На практике мигрировали production ELK-стек за 40 минут.
Мониторинг состояния бэкапов
Velero экспортирует метрики в Prometheus. Ключевые алерты:
---
- alert: VeleroBackupFailed
expr: velero_backup_last_status{schedule!=""} == 1
for: 1m
labels:
severity: critical
annotations:
summary: "Бэкап {{ $labels.schedule }} провален"
---Мы настраиваем дашборды в Grafana с временем последнего успешного бэкапа и объёмом данных. Это входит в стандартный пакет обследования. Дополнительно добавляем алерт на "бэкап старше N дней". Хотите увидеть мониторинг бэкапов в реальном времени? Свяжитесь с нами — покажем на действующем кластере.
Распространённые ошибки при настройке Velero
Часто встречаются проблемы с правами доступа к object storage: забывают указать корректный регион или политики IAM. Вторая по частоте — неверная конфигурация CSI-драйвера: если драйвер не поддерживает VolumeSnapshots, Velero падает с ошибкой. Решается установкой CSI Driver и включением --features=EnableCSI. Также стоит проверять, что kubelet на нодах имеет доступ к файловой системе для Node Agent.
Объём работ по настройке Velero под ключ
- Аудит кластера: namespace, PVC, CSI-драйверы, RBAC
- Создание service account с минимальными правами (IAM / cloud provider)
- Установка Velero с плагинами под ваше хранилище (S3, GCS, Azure Blob)
- Настройка расписаний бэкапов и политик retention
- Пре- и пост-хуки для stateful-приложений
- Тестирование восстановления в изолированной среде
- Настройка Prometheus-алертов (failed backup, too old backup)
- Документация и runbook
Срок: 2-4 дня. Стоимость рассчитывается индивидуально. Гарантируем корректное восстановление: если не получится, доведём бесплатно. Закажите аудит вашего кластера прямо сейчас. Получите консультацию по настройке Velero — наши сертифицированные инженеры готовы помочь.







