Перейти к содержимому

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

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

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

Внимание!

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

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

image

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

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

image

YAML
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 }++}

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

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

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

image

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

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

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

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

image

YAML
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
yaml
defaultSettings:
  backupTarget: {++${ BACKUP_TARGET }++}
  backupTargetCredentialSecret: {++${ CONFIG_NAME }++}

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

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

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

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

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

Заметка

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

yaml
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 }++}

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

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

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

yaml
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 }++}

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

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

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

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

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

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

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

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

MacOS ​

bash
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

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

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

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

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

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

bash
velero backup get

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

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

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

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

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

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

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

Резервная копия всех 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

Команда Боцман