Резервное копирование
Velero — это модуль, предназначенный для резервного копирования и восстановления данных в кластерах Kubernetes. Он поддерживает как локальные, так и облачные хранилища для хранения резервных копий, обеспечивая гибкость и надежность работы.
Подключение модуля
Внимание!
Общая информация по работе с модулями: Работа с модулями
В первую очередь, необходимо добавить модуль velero и velero-config
После этого появится возможность изменить конфигурацию у модулей
Пример конфигурации для модуля velero
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
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
Параметры можно оставить без изменений
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
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
- Скачать со страницы релиза
- Распаковать
tar -xvf velero-v1.14.1-<OS>-<ARCH>.tar.gz - Переместить бинарный файл 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




