7.3 KiB
Run Velero on Azure
To configure Velero on Azure, you:
- Download an official release of Velero
- Create your Azure storage account and blob container
- Create Azure service principal for Velero
- Install the server
If you do not have the az Azure CLI 2.0 installed locally, follow the install guide to set it up.
Run:
az login
Kubernetes cluster prerequisites
Ensure that the VMs for your agent pool allow Managed Disks. If I/O performance is critical, consider using Premium Managed Disks, which are SSD backed.
Download Velero
-
Download the latest official release's tarball for your client platform.
We strongly recommend that you use an official release of Velero. The tarballs for each release contain the
velerocommand-line client. The code in the master branch of the Velero repository is under active development and is not guaranteed to be stable! -
Extract the tarball:
tar -xvf <RELEASE-TARBALL-NAME>.tar.gz -C /dir/to/extract/toWe'll refer to the directory you extracted to as the "Velero directory" in subsequent steps.
-
Move the
velerobinary from the Velero directory to somewhere in your PATH.
Create Azure storage account and blob container
Velero requires a storage account and blob container in which to store backups.
The storage account can be created in the same Resource Group as your Kubernetes cluster or
separated into its own Resource Group. The example below shows the storage account created in a
separate Velero_Backups Resource Group.
The storage account needs to be created with a globally unique id since this is used for dns. In
the sample script below, we're generating a random name using uuidgen, but you can come up with
this name however you'd like, following the Azure naming rules for storage accounts. The
storage account is created with encryption at rest capabilities (Microsoft managed keys) and is
configured to only allow access via https.
Create a resource group for the backups storage account. Change the location as needed.
AZURE_BACKUP_RESOURCE_GROUP=Velero_Backups
az group create -n $AZURE_BACKUP_RESOURCE_GROUP --location WestUS
Create the storage account.
AZURE_STORAGE_ACCOUNT_ID="velero$(uuidgen | cut -d '-' -f5 | tr '[A-Z]' '[a-z]')"
az storage account create \
--name $AZURE_STORAGE_ACCOUNT_ID \
--resource-group $AZURE_BACKUP_RESOURCE_GROUP \
--sku Standard_GRS \
--encryption-services blob \
--https-only true \
--kind BlobStorage \
--access-tier Hot
Create the blob container named velero. Feel free to use a different name, preferably unique to a single Kubernetes cluster. See the FAQ for more details.
BLOB_CONTAINER=velero
az storage container create -n $BLOB_CONTAINER --public-access off --account-name $AZURE_STORAGE_ACCOUNT_ID
Get resource group for persistent volume snapshots
-
Set the name of the Resource Group that contains your Kubernetes cluster's virtual machines/disks.
WARNING: If you're using AKS,
AZURE_RESOURCE_GROUPmust be set to the name of the auto-generated resource group that is created when you provision your cluster in Azure, since this is the resource group that contains your cluster's virtual machines/disks.AZURE_RESOURCE_GROUP=<NAME_OF_RESOURCE_GROUP>If you are unsure of the Resource Group name, run the following command to get a list that you can select from. Then set the
AZURE_RESOURCE_GROUPenvironment variable to the appropriate value.az group list --query '[].{ ResourceGroup: name, Location:location }'Get your cluster's Resource Group name from the
ResourceGroupvalue in the response, and use it to set$AZURE_RESOURCE_GROUP.
Create service principal
To integrate Velero with Azure, you must create a Velero-specific service principal.
-
Obtain your Azure Account Subscription ID and Tenant ID:
AZURE_SUBSCRIPTION_ID=`az account list --query '[?isDefault].id' -o tsv` AZURE_TENANT_ID=`az account list --query '[?isDefault].tenantId' -o tsv` -
Create a service principal with
Contributorrole. This will have subscription-wide access, so protect this credential. You can specify a password or let theaz ad sp create-for-rbaccommand create one for you.If you'll be using Velero to backup multiple clusters with multiple blob containers, it may be desirable to create a unique username per cluster rather than the default
velero.Create service principal and specify your own password:
AZURE_CLIENT_SECRET=super_secret_and_high_entropy_password_replace_me_with_your_own az ad sp create-for-rbac --name "velero" --role "Contributor" --password $AZURE_CLIENT_SECRETOr create service principal and let the CLI generate a password for you. Make sure to capture the password.
AZURE_CLIENT_SECRET=`az ad sp create-for-rbac --name "velero" --role "Contributor" --query 'password' -o tsv`After creating the service principal, obtain the client id.
AZURE_CLIENT_ID=`az ad sp list --display-name "velero" --query '[0].appId' -o tsv` -
Now you need to create a file that contains all the environment variables you just set. The command looks like the following:
cat << EOF > ./credentials-velero AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID} AZURE_TENANT_ID=${AZURE_TENANT_ID} AZURE_CLIENT_ID=${AZURE_CLIENT_ID} AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET} AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP} EOF
Install and start Velero
Install Velero, including all prerequisites, into the cluster and start the deployment. This will create a namespace called velero, and place a deployment named velero in it.
velero install \
--provider azure \
--bucket $BLOB_CONTAINER \
--secret-file ./credentials-velero \
--backup-location-config resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID \
--snapshot-location-config apiTimeout=<YOUR_TIMEOUT>
Additionally, you can specify --use-restic to enable restic support, and --wait to wait for the deployment to be ready.
(Optional) Specify additional configurable parameters for the --backup-location-config flag.
(Optional) Specify additional configurable parameters for the --snapshot-location-config flag.
For more complex installation needs, use either the Helm chart, or add --dry-run -o yaml options for generating the YAML representation for the installation.
Installing the nginx example (optional)
If you run the nginx example, in file examples/nginx-app/with-pv.yaml:
Replace <YOUR_STORAGE_CLASS_NAME> with default. This is Azure's default StorageClass name.