Как организовать резервное копирование (бэкап) в Kubernetes?

«Как организовать резервное копирование (бэкап) в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Резервное копирование в Kubernetes должно охватывать как метаданные кластера (ресурсы), так и данные приложений (Persistent Volumes). В нашем продакшн-окружении мы используем комбинацию инструментов.

Стратегия бэкапа:

  1. Резервное копирование ресурсов Kubernetes с помощью Velero: Velero — основной инструмент. Он позволяет создавать бэкапы всего namespace или отдельных ресурсов по лейблам, включая их конфигурации.

    # Установка Velero (пример для AWS)
    velero install 
        --provider aws 
        --plugins velero/velero-plugin-for-aws:v1.5.0 
        --bucket my-k8s-backups 
        --backup-location-config region=eu-west-1 
        --snapshot-location-config region=eu-west-1
    
    # Создание ежедневного бэкапа для namespace 'production'
    velero schedule create daily-backup --schedule="@every 24h" --include-namespaces production
  2. Снапшоты Persistent Volumes: Velero интегрируется с CSI драйверами облачных провайдеров для создания снапшотов дисков. Это обеспечивает консистентные бэкапы данных.

    # Velero BackupStorageLocation с включением снапшотов
    apiVersion: velero.io/v1
    kind: BackupStorageLocation
    spec:
      provider: aws
      objectStorage:
        bucket: my-k8s-backups
      config:
        region: eu-west-1
  3. Резервное копирование etcd: Для полного аварийного восстановления кластера (DR) мы также настраиваем автоматические снапшоты etcd (если кластер self-managed, например, kubeadm).

    # Использование etcdctl для создания снапшота
    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 
        --cacert=/etc/kubernetes/pki/etcd/ca.crt 
        --cert=/etc/kubernetes/pki/etcd/server.crt 
        --key=/etc/kubernetes/pki/etcd/server.key 
        snapshot save /var/lib/etcd/backup.db

Критически важные практики:

  • Тестирование восстановления: Регулярно (раз в квартал) проводим drills по восстановлению namespace из бэкапа в тестовый кластер.
  • Хранение вне кластера: Все бэкапы и снапшоты хранятся в объектном хранилище (S3) с включенным versioning и политиками жизненного цикла.
  • RPO/RTO: Конфигурация Velero Schedule и хранение снапшотов настраиваются в соответствии с требованиями приложения к точке восстановления (RPO) и времени восстановления (RTO).