Конфигурация Velero Backup
Это руководство предназначено для cluster administrators, которые настраивают backup-инфраструктуру в Cozystack: S3 storage, Velero locations, backup strategies и BackupClasses. Затем tenant users используют существующие BackupClasses для создания BackupJobs и Plans.
Предварительные требования
- Административный доступ к Cozystack (management) cluster.
- S3-compatible storage: если вы хотите хранить backups в Cozy, включите SeaweedFS и создайте Bucket или используйте внешний S3 service.
- Включите отключенный по умолчанию компонент
cozystack.veleroвbundles.enabledPackagesPlatform Package. Для tenant clusters задайтеspec.addons.velero.enabledравнымtrueв ресурсеKubernetes.
1. Настройте storage credentials и конфигурацию
Создайте следующие ресурсы в management cluster в namespace cozy-velero, чтобы Velero мог хранить backups и volume snapshots.
1.1 Создайте secret с S3 credentials
apiVersion: v1
kind: Secret
metadata:
name: s3-credentials
namespace: cozy-velero
type: Opaque
stringData:
cloud: |
[default]
aws_access_key_id=<KEY>
aws_secret_access_key=<SECRET KEY>
services = seaweed-s3
[services seaweed-s3]
s3 =
endpoint_url = https://s3.tenant-name.cozystack.example.com
1.2 Настройте BackupStorageLocation
Этот ресурс определяет, где Velero хранит backups (S3 bucket).
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
name: default
namespace: cozy-velero
spec:
provider: aws
objectStorage:
bucket: <BUCKET_NAME>
config:
checksumAlgorithm: ''
profile: "default"
s3ForcePathStyle: "true"
s3Url: https://s3.tenant-name.cozystack.example.com
credential:
name: s3-credentials
key: cloud
BUCKET_NAME можно найти командой:
kubectl get bucketclaim -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,BUCKET_NAME:.status.bucketName,READY:.status.bucketReady
См. BackupStorageLocation в документации Velero.
Проверьте, что ресурс успешно создан:
k get BackupStorageLocation -n cozy-velero
Вывод должен быть похож на:
NAME PHASE LAST VALIDATED AGE DEFAULT
default Available 5s 3d9h true
1.3 Настройте VolumeSnapshotLocation
Этот ресурс определяет конфигурацию volume snapshots.
apiVersion: velero.io/v1
kind: VolumeSnapshotLocation
metadata:
name: default
namespace: cozy-velero
spec:
provider: aws
credential:
name: s3-credentials
key: cloud
config:
region: "us-west-2"
profile: "default"
См. VolumeSnapshotLocation в документации Velero.
2. Определите backup strategy
Strategy описывает template Velero Backup. Это переиспользуемый template, на который ссылаются BackupClasses.
В strategy задаются:
- Scope: namespaces и resources, например tenant namespace или resources по label.
- Volume handling: делать ли snapshot volumes и использовать ли
snapshotMoveData. - Retention: backup TTL по умолчанию.
Проверьте CRD group, version и kind в вашем кластере:
kubectl get crd | grep -i backup
kubectl explain <strategy-kind> --recursive
Пример strategy для VMInstance (включает все VM resources и подключенные volumes):
apiVersion: strategy.backups.cozystack.io/v1alpha1
kind: Velero
metadata:
name: vminstance-strategy
spec:
template:
restoreSpec:
existingResourcePolicy: update
includedNamespaces:
- '{{ .Application.metadata.namespace }}'
orLabelSelectors:
- matchLabels:
app.kubernetes.io/instance: 'vm-instance-{{ .Application.metadata.name }}'
- matchLabels:
apps.cozystack.io/application.kind: '{{ .Application.kind }}'
apps.cozystack.io/application.name: '{{ .Application.metadata.name }}'
includedResources:
- helmreleases.helm.toolkit.fluxcd.io
- virtualmachines.kubevirt.io
- virtualmachineinstances.kubevirt.io
- pods
- persistentvolumeclaims
- configmaps
- secrets
- controllerrevisions.apps
includeClusterResources: false
excludedResources:
- datavolumes.cdi.kubevirt.io
spec:
includedNamespaces:
- '{{ .Application.metadata.namespace }}'
orLabelSelectors:
- matchLabels:
app.kubernetes.io/instance: 'vm-instance-{{ .Application.metadata.name }}'
- matchLabels:
apps.cozystack.io/application.kind: '{{ .Application.kind }}'
apps.cozystack.io/application.name: '{{ .Application.metadata.name }}'
includedResources:
- helmreleases.helm.toolkit.fluxcd.io
- virtualmachines.kubevirt.io
- virtualmachineinstances.kubevirt.io
- pods
- datavolumes.cdi.kubevirt.io
- persistentvolumeclaims
- configmaps
- secrets
- controllerrevisions.apps
includeClusterResources: false
storageLocation: '{{ .Parameters.backupStorageLocationName }}'
volumeSnapshotLocations:
- '{{ .Parameters.backupStorageLocationName }}'
snapshotVolumes: true
snapshotMoveData: true
ttl: 720h0m0s
itemOperationTimeout: 24h0m0s
Пример strategy для VMDisk (только disk и его volume):
apiVersion: strategy.backups.cozystack.io/v1alpha1
kind: Velero
metadata:
name: vmdisk-strategy
spec:
template:
restoreSpec:
existingResourcePolicy: update
includedNamespaces:
- '{{ .Application.metadata.namespace }}'
orLabelSelectors:
- matchLabels:
app.kubernetes.io/instance: 'vm-disk-{{ .Application.metadata.name }}'
- matchLabels:
apps.cozystack.io/application.kind: '{{ .Application.kind }}'
apps.cozystack.io/application.name: '{{ .Application.metadata.name }}'
includedResources:
- helmreleases.helm.toolkit.fluxcd.io
- persistentvolumeclaims
- configmaps
includeClusterResources: false
spec:
includedNamespaces:
- '{{ .Application.metadata.namespace }}'
orLabelSelectors:
- matchLabels:
app.kubernetes.io/instance: 'vm-disk-{{ .Application.metadata.name }}'
- matchLabels:
apps.cozystack.io/application.kind: '{{ .Application.kind }}'
apps.cozystack.io/application.name: '{{ .Application.metadata.name }}'
includedResources:
- helmreleases.helm.toolkit.fluxcd.io
- persistentvolumeclaims
- configmaps
includeClusterResources: false
storageLocation: '{{ .Parameters.backupStorageLocationName }}'
volumeSnapshotLocations:
- '{{ .Parameters.backupStorageLocationName }}'
snapshotVolumes: true
snapshotMoveData: true
ttl: 720h0m0s
itemOperationTimeout: 24h0m0s
Template variables ({{ .Application.* }} и {{ .Parameters.* }}) берутся из ApplicationRef в BackupJob/Plan и параметров, заданных в BackupClass.
Не забудьте применить strategy в management cluster:
kubectl apply -f velero-backup-strategy.yaml
3. Создайте BackupClass
BackupClass связывает strategy с приложениями; в нем можно задать параметры.
Проверьте CRD BackupClass в кластере:
kubectl get backupclasses
kubectl explain backupclasses.spec --recursive
apiVersion: backups.cozystack.io/v1alpha1
kind: BackupClass
metadata:
name: velero
spec:
strategies:
- strategyRef:
apiGroup: strategy.backups.cozystack.io
kind: Velero
name: vminstance-strategy
application:
kind: VMInstance
apiGroup: apps.cozystack.io
parameters:
backupStorageLocationName: default
- strategyRef:
apiGroup: strategy.backups.cozystack.io
kind: Velero
name: vmdisk-strategy
application:
kind: VMDisk
apiGroup: apps.cozystack.io
parameters:
backupStorageLocationName: default
Примените и выведите список:
kubectl apply -f backupclass.yaml
kubectl get backupclasses
4. Как пользователи запускают backups
Когда strategies и BackupClasses настроены, tenant users могут запускать backups, не меняя Velero или storage configuration:
- One-off backup: создайте BackupJob, который ссылается на BackupClass.
- Scheduled backups: создайте Plan с cron schedule и ссылкой на BackupClass.
Прямое использование Velero CRDs (Backup, Schedule, Restore) остается доступным для advanced или recovery scenarios:
kubectl get backup.velero.io -n cozy-velero
kubectl get schedule.velero.io -n cozy-velero
kubectl get restores.velero.io -n cozy-velero
Если установлен Velero CLI, можно также выполнить:
velero -n cozy-velero backup get
velero -n cozy-velero schedule get
velero -n cozy-velero restore get
Чтобы посмотреть Velero logs, используйте команду:
kubectl logs -n cozy-velero -l app.kubernetes.io/name=velero --tail=100
5. Восстановление из backup
Когда strategies и BackupClasses настроены, tenant users могут восстанавливаться из backup с помощью ресурсов RestoreJob. Инструкции по restore для in-place восстановления VMInstance и VMDisk см. в руководстве Backup and Recovery.