Velero¶
Velero is an open source tool to safely backup and restore, perform disaster recovery, and migrate Kubernetes cluster resources and persistent volumes.
Usage¶
Velero can be deployed by enabling the add-on via the following.
enable_velero = true
velero_backup_s3_bucket = "<YOUR_BUCKET_NAME>"
velero = {
s3_backup_location = "<YOUR_S3_BUCKET_ARN>[/prefix]"
}
You can also customize the Helm chart that deploys velero
via the following configuration:
enable_velero = true
velero = {
name = "velero"
description = "A Helm chart for velero"
chart_version = "3.1.6"
repository = "https://vmware-tanzu.github.io/helm-charts/"
namespace = "velero"
values = [templatefile("${path.module}/values.yaml", {})]
}
To see a working example, see the stateful
example blueprint.
Validate¶
- Run
update-kubeconfig
command:
- Test by listing velero resources provisioned:
kubectl get all -n velero
# Output should look similar to below
NAME READY STATUS RESTARTS AGE
pod/velero-7b8994d56-z89sl 1/1 Running 0 25h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/velero ClusterIP 172.20.20.118 <none> 8085/TCP 25h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/velero 1/1 1 1 25h
NAME DESIRED CURRENT READY AGE
replicaset.apps/velero-7b8994d56 1 1 1 25h
- Get backup location using velero CLI
velero backup-location get
# Output should look similar to below
NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
default aws stateful-20230503175301619800000005/backups Available 2023-05-04 15:15:00 -0400 EDT ReadWrite true
- To demonstrate creating a backup and restoring, create a new namespace and run nginx using below commands:
- Create backup of this namespace using velero
velero backup create backup1 --include-namespaces backupdemo
# Output should look similar to below
Backup request "backup1" submitted successfully.
Run `velero backup describe backup1` or `velero backup logs backup1` for more details.
- Describe the backup to check the backup status
velero backup describe backup1
# Output should look similar to below
Name: backup1
Namespace: velero
Labels: velero.io/storage-location=default
Annotations: velero.io/source-cluster-k8s-gitversion=v1.26.2-eks-a59e1f0
velero.io/source-cluster-k8s-major-version=1
velero.io/source-cluster-k8s-minor-version=26+
Phase: Completed
Namespaces:
Included: backupdemo
Excluded: <none>
Resources:
Included: *
Excluded: <none>
Cluster-scoped: auto
Label selector: <none>
Storage Location: default
Velero-Native Snapshot PVs: auto
TTL: 720h0m0s
CSISnapshotTimeout: 10m0s
ItemOperationTimeout: 0s
Hooks: <none>
Backup Format Version: 1.1.0
Started: 2023-05-04 15:16:31 -0400 EDT
Completed: 2023-05-04 15:16:33 -0400 EDT
Expiration: 2023-06-03 15:16:31 -0400 EDT
Total items to be backed up: 9
Items backed up: 9
Velero-Native Snapshots: <none included>
- Delete the namespace - this will be restored using the backup created
- Restore the namespace from your backup
- Verify that the namespace is restored