Перейти к содержанию

Резервное копирование

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

Подключение модуля

Внимание!

Общая информация по работе с модулями: Работа с модулями

В первую очередь, необходимо добавить модуль velero и velero-config

image

После этого появится возможность изменить конфигурацию у модулей

Пример конфигурации для модуля velero

image

YAML
configuration:
  backupStorageLocation:
    - name: ${ STORAGE_LOCATION_NAME }
      provider: aws
      bucket: ${ BUCKET_NAME }
      prefix: ${ PREFIX_NAME }
      config:
        region: ${ S3_REGION }
        s3Url: ${ S3_URL }
        checksumAlgorithm: ""
        s3ForcePathStyle: ${ PATH_STYLE }
  features: EnableCSI
  volumeSnapshotLocation:
    - name: ${ SNAPSHOT_LOCATION_NAME }
      provider: aws
      config:
        region: ${ S3_REGION }
        s3ForcePathStyle: ${ PATH_STYLE }
credentials:
  secretContents:
    awsAccessKeyId: ${ KEY_ID }
    awsSecretAccessKey: ${ SECRET_KEY }

Описание параметров

Имя параметра Описание Комментарий
${STORAGE_LOCATION_NAME} Имя хранилища резервных копий объектов Kubernetes
${BUCKET_NAME} Указывает имя бакета в s3
${PREFIX_NAME} Имя каталога в бакете
${S3_REGION} Зона доступности s3 О Зонах Yandex
${S3_URL} URL до s3 https://...
${PATH_STYLE} Формирование пути
"true" - указывает, что путь будет формироваться как ${S3_URL}/${BUCKET_NAME}/${PREFIX_NAME}
"false" - ${BUCKET_NAME}.${S3_URL}/${PREFIX_NAME}
В большинстве случаев рекомендуется значение "true"
${SNAPSHOT_LOCATION_NAME} Имя хранилища резервных копий Longhorn volumes
${KEY_ID} ID учетной записи для резервного копирования объектов Kubernetes
${SECRET_KEY} Secret учетной записи для резервного копирования объектов Kubernetes

Пример конфигурации для модуля velero-config
Он отвечает за создание секрета с учетными данными S3, которые будет использовать Longhorn
Значение поля name должно совпадать со значением поля backupTargetCredentialSecret в параметрах модуля Longhorn

image

YAML
longhornS3Secret:
  create: true
  name: ${ CONFIG_NAME }
  awsEndpoints: ${ S3_URL }
  awsAccessKeyId: ${ KEY_ID }
  awsSecretAccessKey: ${ SECRET_KEY }

Описание параметров

Имя параметра Описание Комментарий
${CONFIG_NAME} Имя конфигурации для резервного копирования объектов Longhorn volumes
${S3_URL} URL до s3 https://...
${KEY_ID} ID учетной записи для резервного копирования объектов Longhorn volumes
${SECRET_KEY} Secret учетной записи для резервного копирования объектов Longhorn volumes

Пример конфигурации для модуля snapshot-controller
Параметры можно оставить без изменений

image

YAML
controller:
  volumeSnapshotClasses:
    - name: longhorn
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: "true"
      labels:
        velero.io/csi-volumesnapshot-class: "true"
      driver: driver.longhorn.io
      deletionPolicy: Delete
      parameters:
        type: bak
webhook:
  webhook:
    failurePolicy: Ignore

Внимание!

Необходимо внести изменения в уже установленный модуль Longhorn

Пример конфигурации

image

YAML
defaultSettings:
  backupTarget: ${ BACKUP_TARGET }
  backupTargetCredentialSecret: ${ CONFIG_NAME }

Описание параметров

Имя параметра Описание Комментарий
${BACKUP_TARGET} Путь для сохранения снимков Longhorn volumes Параметр указывает расположение для бекапа в формате ${BUCKET_NAME}@${S3_REGION}/${PREFIX_NAME}
${CONFIG_NAME} Имя секрета, который мы указывали в модуле velero-config

Создание резервных копий и восстановление

Создание резервных копий

Помимо настройки модулей необходимо так же настроить сам backup.
В данном примере будет создана резервная копия всех имеющихся ресурсов во всех неймспейсах

Заметка

Укажите лейбл velero.io/exclude-from-backup=true в том ресурсе, который хотите исключить из бекапа

apiVersion: velero.io/v1
kind: Backup
metadata:
  labels:
    velero.io/storage-location: ${ STORAGE_LOCATION_NAME }
  name: ${ BACKUP_STORAGE_LOCATION_NAME }
  namespace: velero
spec:
  csiSnapshotTimeout: ${ SNAPSHOT_TIMEOUT }
  defaultVolumesToFsBackup: ${ TO_FS_BACKUP }
  includedNamespaces:
  - '*'
  itemOperationTimeout: ${ OPERATION_TIMEOUT }
  snapshotMoveData: ${ MOVE_DATA }
  storageLocation: ${ STORAGE_LOCATION_NAME }
  ttl: ${ TTL }
  volumeSnapshotLocations:
  - ${ SNAPSHOT_LOCATION_NAME }

Описание параметров

Имя параметра Описание Комментарий
${STORAGE_LOCATION_NAME} Имя хранилища резервных копий объектов Kubernetes Имя должно соответствовать configuration.backupStorageLocation.name в конфигурации velero
${BACKUP_STORAGE_LOCATION_NAME} Имя резервной копии
${SNAPSHOT_TIMEOUT} Указывает время ожидания для создания снапшотов через CSI (Container Storage Interface) По умолчанию: 10m0s
${TO_FS_BACKUP} Указывает, будут ли по умолчанию использоваться файловые резервные копии для томов По умолчанию: false. Означает, что файловое копирование томов отключено. Вместо этого используются снапшоты
${OPERATION_TIMEOUT} Время ожидания для операций над отдельными ресурсами
${MOVE_DATA} Указывает, будут ли данные после создания бекапа перемещаться в s3 хранилище По умолчанию: true
${TTL} Время жизни резервной копии, после которого она автоматически удаляется По умолчанию: 720h0m0s
${SNAPSHOT_LOCATION_NAME} Указывает место хранения снапшотов томов

Резервное копирование по расписанию:

apiVersion: velero.io/v1
kind: Schedule
metadata:
  name: ${ BACKUP_STORAGE_LOCATION_NAME }
  namespace: velero
spec:
  schedule: ${ SCHEDULE }
  template:
    storageLocation: ${ STORAGE_LOCATION_NAME }
    csiSnapshotTimeout: ${ SNAPSHOT_TIMEOUT }
    includedNamespaces:
    - '*'
    itemOperationTimeout: ${ OPERATION_TIMEOUT }
    ttl: ${ TTL }
  useOwnerReferencesInBackup: ${ USE_OWNER }
Описание параметров

Имя параметра Описание Комментарий
${BACKUP_STORAGE_LOCATION_NAME} Имя объекта расписания
${SCHEDULE} Указывает расписание резервного копирования в формате cron Значение указывается в ' '. Пример: '* * * * *' означает, что резервное копирование запускается каждую минуту
${STORAGE_LOCATION_NAME} Имя хранилища резервных копий объектов Kubernetes Имя должно соответствовать configuration.backupStorageLocation.name в конфигурации velero
${SNAPSHOT_TIMEOUT} Указывает время ожидания для создания снапшотов через CSI (Container Storage Interface) По умолчанию: 10m0s
${OPERATION_TIMEOUT} Время ожидания для операций над отдельными ресурсами
${TTL} Время жизни резервной копии, после которого она автоматически удаляется По умолчанию: 720h0m0s
${USE_OWNER} Указывает, использовать ли ссылки на владельца ресурсов (Owner References) в резервных копиях По умолчанию: false

Восстановление из резервной копии

apiVersion: velero.io/v1
kind: Restore
metadata:
  name: ${ RESTORE_NAME }
  namespace: velero
spec:
  backupName: ${ BACKUP_STORAGE_LOCATION_NAME }
  includedNamespaces:
  - '*'
  itemOperationTimeout: ${ OPERATION_TIMEOUT }

Описание параметров

Имя параметра Описание Комментарий
${RESTORE_NAME} Имя объекта восстановления
${BACKUP_STORAGE_LOCATION_NAME} Указывает имя резервной копии, из которой будут восстанавливаться данные
${OPERATION_TIMEOUT} Время ожидания для операций над отдельными ресурсами

Установка и использование velero client

Использовать velero удобннее всего с помощью официального клиента \ Установить его можно следующими способами:

MacOS

brew install velero

GitHub release

  1. Скачать со страницы релиза
  2. Распаковать tar -xvf velero-v1.14.1-<OS>-<ARCH>.tar.gz
  3. Переместить бинарный файл velero в $PATH (н.п. /usr/local/bin)

velero будет использовать текущий контекст для kubectl

Основные команды

Создание резервной копии:

velero backup create <имя_резервной_копии> \
  --storage-location bootsman \
  --csi-snapshot-timeout=20m \
  --include-namespaces <namespace1>,<namespace2>

Если не указывать include-namespaces, то будет сделана резервная копия всех namespace \ Если необходимо копировать тома большого объема, рекомендуется выставить csi-snapshot-timeout (Значение по-умолчанию 10m)

Просмотр бекапов:

velero backup get

Восстановление резервной копии:

velero restore create --from-backup <имя_резервной_копии>

Просмотр лога резервного копирования/восстановления:

velero backup logs <имя_резервной_копии>
velero restore logs <имя_восстановления>

Создание расписания резервного копирования:

velero schedule create <имя_расписания> \
  --schedule "0 */6 * * *" \
  --include-namespaces <namespace>

Примеры yaml-манифестов для запланированных бекапов

Резервная копия всех yaml кластера без снапшотов

apiVersion: velero.io/v1
kind: Schedule
metadata:
  name: scheduled-backup-all-yamls
  namespace: velero
spec:
  schedule: '0 1 * * *'
  template:
    storageLocation: velero-s3-bucket
    csiSnapshotTimeout: 4h
    hooks: {}
    includedNamespaces:
    - "*"
    snapshotVolumes: false
    itemOperationTimeout: 4h
    metadata: {}
    ttl: 168h0m0s
  useOwnerReferencesInBackup: false