Настройка Backup и Recovery через Velero в Kubernetes

Когда production-кластер выходит из строя, каждый час простоя оборачивается убытками, а без резервной копии восстановление может занять дни. Мы настраиваем резервное копирование и восстановление Kubernetes с помощью Velero, реализуя проект под ключ — от аудита и установки до настройки политик и тестирования. Наша команда обеспечивает надёжную защиту данных и последующую поддержку, чтобы ваш кластер был готов к любым сбоям.
Часто задаваемые вопросы

Отметим: когда 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 включает последовательность шагов:

  1. Создайте IAM роль с минимальными правами: доступ к EC2 для снэпшотов и S3 для хранения бэкапов.
  2. Установите Velero CLI.
  3. Выполните команду установки:
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: true

snapshotMoveData: 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 — наши сертифицированные инженеры готовы помочь.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142