Тема
Резервное копирование
Velero — это модуль, предназначенный для резервного копирования и восстановления данных в кластерах Kubernetes. Он поддерживает как локальные, так и облачные хранилища для хранения резервных копий, обеспечивая гибкость и надежность работы.
Подключение модуля
Внимание!
Общая информация по работе с модулями: Работа с модулями
В первую очередь, необходимо добавить модуль velero и velero-config

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

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 до s3 | https://... |
| $ | Формирование пути "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

YAML
yaml
longhornS3Secret:
create: true
name: {++${ CONFIG_NAME }++}
awsEndpoints: {++${ S3_URL }++}
awsAccessKeyId: {++${ KEY_ID }++}
awsSecretAccessKey: {++${ SECRET_KEY }++}Описание параметров
| Имя параметра | Описание | Комментарий |
|---|---|---|
| $ | Имя конфигурации для резервного копирования объектов Longhorn volumes | |
| $ | URL до s3 | https://... |
| $ | ID учетной записи для резервного копирования объектов Longhorn volumes | |
| $ | Secret учетной записи для резервного копирования объектов Longhorn volumes |
Пример конфигурации для модуля snapshot-controller
Параметры можно оставить без изменений

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
Пример конфигурации

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 veleroGitHub release
- Скачать со страницы релиза
- Распаковать
tar -xvf velero-v1.14.1-<OS>-<ARCH>.tar.gz - Переместить бинарный файл 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