{"id":10084,"date":"2022-04-05T17:29:44","date_gmt":"2022-04-05T11:59:44","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=10084"},"modified":"2026-01-05T14:43:26","modified_gmt":"2026-01-05T09:13:26","slug":"know-how-to-use-velero-to-backup-and-migrate-kubernetes-resources-and-persistent-volumes","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2022\/04\/05\/know-how-to-use-velero-to-backup-and-migrate-kubernetes-resources-and-persistent-volumes\/","title":{"rendered":"Know How to Use Velero to Backup and Migrate Kubernetes Resources and Persistent Volumes"},"content":{"rendered":"\r\n<h2>Introduction<\/h2>\r\n<p><strong>&#8220;Murphy&#8217;s law doesn&#8217;t mean that something bad will happen. It means that whatever can happen, will happen.&#8221;\u00a0<\/strong>This is something related to destiny but we should not totally rely upon it and should be prepared for the worst.<br \/>The same philosophy referenced above applies to the tech world too. That&#8217;s the reason we should be prepared with our backup options choices possibly, a data set or Kubernetes cluster.<\/p>\r\n<p>\u201cAlways be ready with backup options like Velero for Kubernetes.\u201d<!--more--><\/p>\r\n\r\n\r\n\r\n<p><a href=\"https:\/\/velero.io\/docs\/v1.17\/\" target=\"_blank\" rel=\"noopener\">Kubernetes backup solutions<\/a> bring down the risk and empower faster recovery time while providing key benefits like: disaster recovery and backup &amp; restore. Now we have to explore some simple and convenient options to take Kubernetes backup. While working on a similar project I came to know about Velero which can fulfil our needs to take Kubernetes backup and restore and it is easy to use.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler\">\r\n<div class=\"wp-block-embed__wrapper\">https:\/\/c.tenor.com\/wtz8za_yyGoAAAAM\/darla-little-rascals.gif<\/div>\r\n<\/figure>\r\n\r\n\r\n\r\n<p>Velero is an open-source tool for securely backing up and restoring resources in a Kubernetes cluster, performing disaster recovery, and moving resources and persistent volumes to another Kubernetes cluster.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p><strong>Velero lets you:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>Take backups of our cluster and restore in case of loss.<\/li>\r\n<li>Migrate cluster resources to other clusters.<\/li>\r\n<li>Replicate our production cluster with development and testing clusters.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>Agenda Of this blog:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>To set up Velero on AlibabaCloud:\r\n<ul>\r\n<li>Download the official release of velero<\/li>\r\n<li>Create our OSS bucket<\/li>\r\n<li>Create a RAM user and secrets file for Velero<\/li>\r\n<li>Install the velero and velero-plugin for alibabacloud<\/li>\r\n<li>Create the backup into OSS bucket<\/li>\r\n<li>Restore the backup in the same cluster or another cluster<\/li>\r\n<li>Run velero on AzureCloud to migrate the Kubernetes resources<\/li>\r\n<li>Migrate the OSS bucket to the Azure storage account<\/li>\r\n<li>Create Credentials file for azure Velero<\/li>\r\n<li>Install the velero and velero-plugin for azurecloud<\/li>\r\n<li>Test the backup and restore\/migrate from the storage account<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h1 class=\"wp-block-heading\" id=\"To-set-up-Velero-on-AlibabaCloud:\"><strong>To set up Velero on AlibabaCloud:<\/strong><\/h1>\r\n\r\n\r\n\r\n<p><strong>Run velero on AlibabaCloud<\/strong><\/p>\r\n\r\n\r\n\r\n<p>To do backup\/restore on Alibaba Cloud via Valero utility, you need to install and configure Valero-plugin for Alibaba Cloud.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Download-and-official-release-of-velero\">Download the official release of velero &amp; install<\/h2>\r\n\r\n\r\n\r\n<ul>\r\n<li>Download tar file of velero<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>https:\/\/github.com\/vmware-tanzu\/velero\/releases\/tag\/v&lt;velero_version&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Extract tar File :<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><code>tar -xvf &lt;RELEASE-TARBALL-NAME&gt;.tar.gz<\/code><\/p>\r\n\r\n\r\n\r\n<p>Note: Move the extracted velero binary to somewhere in your $PATH (e.g. \/usr\/local\/bin)<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Create-our-OSS-bucket\">Create OSS bucket on Alibaba cloud<\/h2>\r\n\r\n\r\n\r\n<ul>\r\n<li>Firstly, you need to create the env variable of bucket name and region :<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>BUCKET=&lt;YOUR_BUCKET&gt;  \r\nREGION=&lt;YOUR_REGION&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Create OSS bucket using <code>ossutil<\/code> utility<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ossutil mb oss:\/\/$BUCKET \\\r\n--storage-class Standard \\\r\n--acl=private<\/code><\/pre>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Create-an-RAM-user-and-secrets-file-for-Velero\">Create a RAM user and secrets file for Velero<\/h2>\r\n\r\n\r\n\r\n<ul>\r\n<li>Create the RAM user and attach the below policies to give\u00a0<code>velero<\/code>\u00a0the necessary permissions:<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>{\r\n    \"Version\": \"1\",\r\n    \"Statement\": [\r\n        {\r\n            \"Action\": [\r\n                \"ecs:DescribeSnapshots\",\r\n                \"ecs:CreateSnapshot\",\r\n                \"ecs:DeleteSnapshot\",\r\n                \"ecs:DescribeDisks\",\r\n                \"ecs:CreateDisk\",\r\n                \"ecs:Addtags\",\r\n                \"oss:PutObject\",\r\n                \"oss:GetObject\",\r\n                \"oss:DeleteObject\",\r\n                \"oss:GetBucket\",\r\n                \"oss:ListObjects\"\r\n            ],\r\n            \"Resource\": [\r\n                \"*\"\r\n            ],\r\n            \"Effect\": \"Allow\"\r\n        }\r\n    ]\r\n}<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Create an access key and secret key for the user.<\/li>\r\n<li>Create a Velero-specific credentials file example: credentials-velero<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>ALIBABA_CLOUD_ACCESS_KEY_ID=&lt;ALIBABA_CLOUD_ACCESS_KEY_ID&gt;\r\nALIBABA_CLOUD_ACCESS_KEY_SECRET=&lt;ALIBABA_CLOUD_ACCESS_KEY_SECRET&gt;\r\nALIBABA_CLOUD_OSS_ENDPOINT=&lt;ALIBABA_CLOUD_OSS_ENDPOINT&gt;<\/code><\/pre>\r\n\r\n\r\n\r\n<p>Note: oss endpoint is the value oss-$REGION.aliyuncs.com<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Install-the-velero-and-velero-plugin-for-alibabacloud\">Install the velero and velero-plugin for alibabacloud<\/h2>\r\n\r\n\r\n\r\n<ul>\r\n<li>Create a namespace velero and secret cloud-credentials<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>kubectl create namespace velero<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Run the following command to create and run velero and velero-plugin for alibabacloud<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>velero install \\\r\n  --provider alibabacloud \\\r\n    --namespace velero \\ \r\n  --image registry.$REGION.aliyuncs.com\/acs\/velero:1.4.2-2b9dce65-aliyun \\\r\n  --bucket $BUCKET \\\r\n  --secret-file .\/credentials-velero \\\r\n  --use-volume-snapshots=false \\\r\n  --backup-location-config region=$REGION \\\r\n  --use-restic \\\r\n  --plugins registry.$REGION.aliyuncs.com\/acs\/velero-plugin-alibabacloud:v1.0.0-2d33b89 \\\r\n  --wait<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>We should see Velero\u2019s pods come up.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>kubectl logs deploy\/velero -n velero<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"435\" class=\"wp-image-10301\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/veloro_pods.png?w=640\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Create-the-backup-into-OSS-bucket\">Create the backup into the OSS bucket<\/h2>\r\n\r\n\r\n\r\n<ul>\r\n<li>Use the below commands to create the backup:<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. velero backup create my-backup\r\n2. velero backup logs my-backup<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10303\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/velero_backup.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1233\" height=\"546\" class=\"wp-image-10305\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/oss_bucket.png?w=1024\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li><strong>Restore the backup in the <\/strong>same cluster or another cluster<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Create a new cluster and restore the backup using velero<\/p>\r\n\r\n\r\n\r\n<p>Note: If we will create a new cluster, follow the above steps to Install the velero and velero-plugin for alibabacloud k8s cluster<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>To restore the backup from the OSS bucket<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>velero get backup<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10328\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/azure_backup-1.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>Restore the backup in the cluster.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10331\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/velero_restore-2.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\" id=\"Run-velero-on-AzureCloud-to-migrate-the-kubernets-resources\"><strong>Run velero on AzureCloud to migrate the Kubernetes resources<\/strong><\/h2>\r\n\r\n\r\n\r\n<p><strong>Run velero on AzureCloud<\/strong><\/p>\r\n\r\n\r\n\r\n<p>To do backup\/migrate on Alibaba Cloud through Velero utility, you need to install and configure velero and velero-plugin for azurecloud.<\/p>\r\n<p><strong>Curious what a 30-day, no-downtime migration looks like?<\/strong><a href=\"https:\/\/opstree.com\/case-study\/migration-from-gcp-to-azure-with-zero-downtime-in-just-30-days\/\" target=\"_blank\" rel=\"noopener\"><br \/><strong>Here\u2019s one example: Migration from GCP to Azure<\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"Migrate-the-OSS-bucket-to-Azure-storage-account\">Migrate the OSS bucket to the Azure storage account<\/h3>\r\n\r\n\r\n\r\n<ul>\r\n<li>First, create a storage account, this will store the backups.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. STORAGE_ACCOUNT='Name'\r\n2. STORAGE_RESOURCE_GROUP='RG_name'\r\n3. az storage account create -n $STORAGE_ACCOUNT -g $STORAGE_RESOURCE_GROUP<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Then, create the container to place the backups.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. STORAGE_CONTAINER_NAME='Container_name'\r\n2. az storage container create --account-name $STORAGE_ACCOUNT -n $STORAGE_CONTAINER_NAME<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1271\" height=\"443\" class=\"wp-image-10310\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/azure_storage.png?w=1024\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<ul>\r\n<li>Using the azure utility, run below command from alibaba bastion host to migrate the bucket from alibaba to azure storage.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. azcopy cp \"\/root\/uat-noon1\/*\" \"https:\/\/storageaccount.blob.core.windows.net\/new1?XXXXXXXXXXXX --recursive=true.<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>We should see all backups in the <a href=\"https:\/\/azure.microsoft.com\/en-in\/pricing\/purchase-options\/azure-account\" target=\"_blank\" rel=\"noopener\">Azure storage account<\/a>.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10312\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/azure_storage_backup.png?w=995\" alt=\"\" width=\"779\" height=\"388\" \/><\/figure>\r\n\r\n\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"Create-Credentials-file-for-azure-Velero\">Create Credentials file for azure Velero<\/h3>\r\n\r\n\r\n\r\n<ul>\r\n<li>Start by getting the resource group where the virtual machines for our <a href=\"https:\/\/opstree.com\/blog\/2022\/01\/04\/records-creation-in-azure-dns-from-aks-externaldns\/\" target=\"_blank\" rel=\"noopener\">AKS cluster<\/a>.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. AZURE_RESOURCE_GROUP=$(az aks show -n mycluster -g myresourcegroup --query \"nodeResourceGroup\" -o tsv)<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Then, get the Azure subscription and Azure AD tenant information.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. AZURE_SUBSCRIPTION_ID=$(az account list --query '[?isDefault].id' -o tsv)\r\n2. AZURE_TENANT_ID=$(az account list --query '[?isDefault].tenantId' -o tsv)<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Now create an Azure service principal for Velero to authenticate and create env variable for client id &amp; client secret.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. AZURE_CLIENT_SECRET=$(az ad sp create-for-rbac --name \"mycluster-velero\" --role \"Contributor\" --query 'password' -o tsv)\r\n2. AZURE_CLIENT_ID=$(az ad sp list --display-name \"mycluster-velero\" --query '[0].appId' -o tsv)<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Create a file called\u00a0<code>credentials-velero-azure<\/code><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>cat &lt;&lt; EOF  &gt; .\/credentials-velero-azure\r\nAZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}\r\nAZURE_TENANT_ID=${AZURE_TENANT_ID}\r\nAZURE_CLIENT_ID=${AZURE_CLIENT_ID}\r\nAZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}\r\nAZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP}\r\nAZURE_CLOUD_NAME=AzurePublicCloud\r\nEOF<\/code><\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"Install-the-velero-and-velero-plugin-for-azurecloud\">Install the velero and velero-plugin for azurecloud<\/h3>\r\n\r\n\r\n\r\n<ul>\r\n<li>Using\u00a0<code>kubectl<\/code>, upload the credentials to a Kubernetes secret in a new\u00a0<code>velero<\/code>\u00a0namespace.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>1. kubectl create ns velero\r\n2. kubectl create secret generic velero-credentials -n velero --from-literal=\"cloud=$(cat .\/credentials-velero-azure)\"<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Now, we install Velero using Helm and using Velero\u2019s Azure plugin.<br \/>&#8211; First, add the\u00a0VMware Helm repo.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>helm repo add vmware-tanzu https:\/\/vmware-tanzu.github.io\/helm-charts<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>Install the velero using the helm chart.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>helm install velero vmware-tanzu\/velero --namespace velero --version 2.13.2 \\\r\n--set \"initContainers[0].image=velero\/velero-plugin-for-microsoft-azure:v1.1.0\" \\\r\n--set \"initContainers[0].imagePullPolicy=IfNotPresent\" \\\r\n--set \"initContainers[0].volumeMounts[0].mountPath=\/target\" \\\r\n--set \"initContainers[0].volumeMounts[0].name=plugins\" \\\r\n--set \"initContainers[0].name=velero-plugin-for-azure\" \\\r\n--set credentials.existingSecret='velero-credentials' \\\r\n--set configuration.provider='azure' \\\r\n--set configuration.backupStorageLocation.bucket=$STORAGE_CONTAINER_NAME \\\r\n--set configuration.backupStorageLocation.config.resourceGroup=$STORAGE_RESOURCE_GROUP \\\r\n--set configuration.backupStorageLocation.config.storageAccount=$STORAGE_ACCOUNT \\\r\n--set configuration.backupStorageLocation.config.subscriptionId=$AZURE_SUBSCRIPTION_ID \\\r\n--set configuration.volumeSnapshotLocation.name='azure-eastus' \\\r\n--set configuration.volumeSnapshotLocation.config.resourceGroup=$STORAGE_RESOURCE_GROUP \\\r\n--set configuration.volumeSnapshotLocation.config.subscriptionId=$AZURE_SUBSCRIPTION_ID<\/code><\/pre>\r\n\r\n\r\n\r\n<ul>\r\n<li>You should see Velero\u2019s pods come up.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>kubectl get pods -n velero<\/code><\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"779\" height=\"114\" class=\"wp-image-10318\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/azure_velero.png?w=779\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\" id=\"Testing-the-backup-and-restore\/migrate-from-storage-account\">Testing the backup and restore\/migrate from the storage account<\/h3>\r\n\r\n\r\n\r\n<ul>\r\n<li>List the backup from the storage account.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10320\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/azure_backup.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>Restore the Kubernetes backup in azure cluster<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10322\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/velero_restore.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Note: Backup restore starts and it will take some time<\/p>\r\n\r\n\r\n\r\n<ul>\r\n<li>After backup restores successfully, check all namespaces, secrets &amp; PV of Kubernetes cluster:<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"522\" height=\"289\" class=\"wp-image-10324\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/restored.png?w=522\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"803\" height=\"376\" class=\"wp-image-10325\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/restore_secrets.png?w=803\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-10326\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/03\/restored_pv.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n\r\n\r\n<h2>Conclusion:<\/h2>\r\n\r\n\r\n\r\n<p>Valero is an open-source tool for securely backing up and restoring resources in the Kubernetes cluster, performing disaster recovery, moving resources and persistent volumes to another Kubernetes cluster. The best part about the Valero tool is that you need not worry about your Kubernetes cluster, it will take auto backup on a timely basis. Last but not least it has the capabilities to restore the complete Kubernetes cluster or the basis of namespaces in another cluster if something goes wrong with your Kubernetes cluster.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter is-content-justification-right is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\r\n","protected":false},"excerpt":{"rendered":"<p>Introduction &#8220;Murphy&#8217;s law doesn&#8217;t mean that something bad will happen. It means that whatever can happen, will happen.&#8221;\u00a0This is something related to destiny but we should not totally rely upon it and should be prepared for the worst.The same philosophy referenced above applies to the tech world too. That&#8217;s the reason we should be prepared &hellip; <a href=\"https:\/\/opstree.com\/blog\/2022\/04\/05\/know-how-to-use-velero-to-backup-and-migrate-kubernetes-resources-and-persistent-volumes\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Know How to Use Velero to Backup and Migrate Kubernetes Resources and Persistent Volumes&#8221;<\/span><\/a><\/p>\n","protected":false},"author":160010275,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[111871292,768739340,768739351,46713213],"tags":[5469,460,768739309,718680572,1158,4996032,1536661],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-2CE","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10084"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/160010275"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=10084"}],"version-history":[{"count":26,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10084\/revisions"}],"predecessor-version":[{"id":30274,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/10084\/revisions\/30274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=10084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=10084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=10084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}