Skip to content
You're viewing docs for v1.2.Go to the latest

Configure Velero storage backends

You’ll configure Velero’s backup storage destination, provide credentials, and customize the backup schedule and retention to match your environment’s requirements.

  • UDS CLI installed
  • UDS Registry account created and authenticated locally with a read token
  • Access to a Kubernetes cluster with UDS Core deployed
  • An S3-compatible or Azure Blob storage endpoint for backup data

UDS Core ships with these backup defaults:

SettingDefault
ScheduleDaily at 03:00 UTC (0 3 * * *)
Retention10 days (240h)
Excluded namespaceskube-system, velero
Cluster resourcesIncluded
Volume snapshotsDisabled

Velero’s storage configuration uses two Helm charts:

ChartScope
velero (upstream)Credentials, backup storage location, schedule, volume snapshot settings
uds-velero-config (UDS)Storage network egress policy

S3-compatible storage is configured through Zarf variables set in your uds-config.yaml. Azure Blob Storage is configured through bundle overrides.

  1. Configure your storage destination

    Choose the authentication method that matches your environment.

    Add the following variables to your uds-config.yaml:

    uds-config.yaml
    variables:
    core:
    VELERO_BUCKET_PROVIDER_URL: "https://s3.us-east-1.amazonaws.com"
    VELERO_BUCKET: "my-velero-backups"
    VELERO_BUCKET_REGION: "us-east-1"
    VELERO_BUCKET_KEY: "<your-access-key>"
    VELERO_BUCKET_KEY_SECRET: "<your-secret-key>"

    The full set of available variables:

    VariableDescriptionDefault
    VELERO_BUCKET_PROVIDER_URLS3 endpoint URLhttp://minio.uds-dev-stack.svc.cluster.local:9000
    VELERO_BUCKETBucket nameuds
    VELERO_BUCKET_REGIONBucket regionuds-dev-stack
    VELERO_BUCKET_KEYAccess key IDuds
    VELERO_BUCKET_KEY_SECRETSecret access keyuds-secret
    VELERO_BUCKET_CREDENTIAL_NAMEKubernetes Secret name for credentialsvelero-bucket-credentials
    VELERO_BUCKET_CREDENTIAL_KEYKey within the credentials Secretcloud
  2. (Optional) Configure storage network egress

    By default, Velero’s network policy allows egress to any destination for storage connectivity. To restrict egress to a specific target, add the following overrides to your bundle using the uds-velero-config chart:

    Internal storage (in-cluster MinIO or similar):

    uds-bundle.yaml
    packages:
    - name: core
    repository: registry.defenseunicorns.com/public/core
    ref: x.x.x-upstream
    overrides:
    velero:
    uds-velero-config:
    values:
    - path: storage.internal.enabled
    value: true
    - path: storage.internal.remoteSelector
    value:
    app: minio
    - path: storage.internal.remoteNamespace
    value: "minio"

    CIDR-restricted (known IP range):

    uds-bundle.yaml
    packages:
    - name: core
    repository: registry.defenseunicorns.com/public/core
    ref: x.x.x-upstream
    overrides:
    velero:
    uds-velero-config:
    values:
    - path: storage.egressCidr
    value: "10.0.0.0/8"
  3. (Optional) Customize backup schedule and retention

    The default backup schedule runs daily at 03:00 UTC with a 10-day retention window. To customize these settings, add the following overrides to your bundle:

    uds-bundle.yaml
    packages:
    - name: core
    repository: registry.defenseunicorns.com/public/core
    ref: x.x.x-upstream
    overrides:
    velero:
    velero:
    values:
    # Run backups every 6 hours
    - path: schedules.udsbackup.schedule
    value: "0 */6 * * *"
    # Retain backups for 30 days
    - path: schedules.udsbackup.template.ttl
    value: "720h"
  4. Create and deploy your bundle

    Combine all overrides from the steps above into a single bundle configuration, then create and deploy:

    Terminal window
    uds create <path-to-bundle-dir>
    uds deploy uds-bundle-<name>-<arch>-<version>.tar.zst

Confirm Velero is running and storage is connected:

Terminal window
# Velero pod is running
uds zarf tools kubectl get pods -n velero
# Backup storage location shows "Available"
uds zarf tools kubectl get backupstoragelocation -n velero
# Backup schedule exists with correct cron expression
uds zarf tools kubectl get schedule -n velero

Success criteria:

  • Velero pod is Running
  • BackupStorageLocation phase is Available
  • Schedule velero-udsbackup exists with the expected cron expression

To confirm storage is working end-to-end, trigger a manual backup and verify it completes. See Perform a manual backup.

Problem: BackupStorageLocation shows “Unavailable”

Section titled “Problem: BackupStorageLocation shows “Unavailable””

Symptoms: The BSL phase is Unavailable and no backups are created.

Solution: Check Velero logs for storage connectivity errors:

Terminal window
uds zarf tools kubectl logs -n velero deploy/velero --tail=50

Common causes include incorrect bucket name or region, invalid credentials, and network policies blocking egress to the storage endpoint.

Symptoms: The Velero pod repeatedly restarts.

Solution: Check pod logs for startup errors:

Terminal window
uds zarf tools kubectl logs -n velero deploy/velero --previous --tail=50

Common causes include malformed credential Secrets and missing required configuration values.