Kubernetes Cluster Backup and Migration with Velero

Edward ObohEdward Oboh
6 min read

Introduction

Velero is an open-source tool that offers a reliable and efficient way to back up and migrate Kubernetes clusters. It is widely used for disaster recovery, backups, and cluster migrations. Velero’s flexibility and support for multiple storage providers make it an essential tool in any Kubernetes administrator's toolkit.

This guide will walk you through the steps required to use Velero for backing up your Kubernetes clusters and migrating them to new environments. This covers both disaster recovery and cluster migration scenarios.

Key Features of Velero

  • Backup: Velero’s primary feature is its ability to back up Kubernetes clusters comprehensively. This includes not only persistent volumes but also critical Kubernetes resources like deployments, services, and custom resource definitions (CRDs). Backups are stored in object storage, providing a secure and reliable way to protect your data. Velero allows you to schedule regular backups, ensuring that your cluster's state is consistently saved and available for future restoration.

  • Restore: In addition to backing up your cluster, Velero excels at restoring these backups when needed. Whether you need to restore a single resource, an entire namespace, or even the whole cluster, Velero provides a flexible and straightforward process. This feature is essential for recovering from data loss, corruption, or accidental deletions. Velero’s restore capabilities also support restoring backups into different clusters, making it a versatile tool for both recovery and migration scenarios.

Use Cases for Velero

  • Disaster Recovery: Velero is a critical component in any disaster recovery strategy for Kubernetes clusters. By regularly backing up your cluster's state, Velero ensures that you have the necessary data to recover from catastrophic failures, such as system crashes, or malicious attacks. In the event of a disaster, Velero enables you to quickly restore your cluster to a previous state, minimizing downtime and ensuring business continuity.

  • Cluster Migration: Velero is also highly effective for migrating workloads between Kubernetes clusters. Whether you’re moving to a new cloud provider, upgrading your Kubernetes version, or replatforming, Velero simplifies the process of transferring your applications and data. By creating backups in the source cluster and restoring them in the target cluster, Velero ensures a smooth and reliable migration, reducing the risk of errors and minimizing disruption to your services.

Prerequisites

Before using Velero, ensure that you have the following prerequisites in place:

  1. Kubernetes Cluster Setup

    You should have a Kubernetes cluster running with sufficient privileges to create backups and perform restores.

  2. Installing kubectl

    Ensure that kubectl is installed and configured to interact with your cluster. If you don't have kubectl installed, follow the official installation guide to get it set up.

  3. Setting Up Object Storage

    Velero requires an object storage provider to store backups. The supported providers include AWS S3, Google Cloud Storage, and Azure Blob Storage. Set up the storage provider of your choice and obtain the necessary credentials for Velero to access it.

  4. Configuring Velero CLI

    Download and install the Velero CLI from the official release page. This CLI is essential for interacting with Velero and managing backups and restores.

Installing Velero

Installing Velero involves setting up the Velero CLI on your local machine and deploying the Velero server components into your Kubernetes cluster.

  1. Installing Velero CLI

    First, you need to install the Velero Command Line Interface (CLI), which you’ll use to manage Velero’s backup, restore, and migration tasks.

  2. Deploying Velero Server into the Kubernetes Cluster

    With the CLI installed, the next step is deploying the Velero server into your Kubernetes cluster. The server handles the execution of backups, restores, and migrations.

  3. Installation Command:

    Use the following command to deploy Velero:

     velero install \
       --provider <provider-name> \
       --bucket <bucket-name> \
       --secret-file <credentials-file-path> \
       --backup-location-config region=<region> \
       --snapshot-location-config region=<region>
    

    Replace the placeholders with your specific details, such as the cloud provider, bucket name, and credentials file.

    When setting up credentials for your cloud provider, the content of the credentials file typically follows a specific format. For example, if you are using AWS, the credentials file should look like this:

     [default]
     aws_access_key_id=YOUR_AWS_ACCESS_KEY_ID
     aws_secret_access_key=YOUR_AWS_SECRET_ACCESS_KEY
    

When you install Velero into your Kubernetes cluster, several key components are deployed to manage backup and restore operations. The Velero Deployment serves as the core server, while specialized controllers monitor and execute tasks—automatically triggering backups and restores as needed. Additionally, the installation configures where your backups and, if supported, volume snapshots are stored, ensuring Velero can efficiently handle your cluster’s data protection needs.

Verify Installation

After deploying the server, verify that Velero is running properly. List the pods in the velero namespace to ensure they are all Running:

kubectl get pods -n velero

Configuring Backup

Setting Up Backup Storage Location

Velero stores backups in object storage, which requires configuring a backup storage location during installation. You can also add additional storage locations post-installation:

velero backup-location create <location-name> \
  --provider <provider-name> \
  --bucket <bucket-name> \
  --config region=<region>

Creating a Backup

To create a backup of your entire cluster, use the following command:

velero backup create <backup-name>

You can also create a backup of specific namespaces or resources:

velero backup create <backup-name> --include-namespaces <namespace1>,<namespace2>

Scheduling Automated Backups

Velero allows you to schedule automated backups using Kubernetes CronJobs. Here’s an example of scheduling a daily backup:

velero schedule create <schedule-name> --schedule="0 2 * * *"

This command schedules a backup to be taken daily at 2 AM.

Restoring from a Backup

Listing Available Backups

To list all available backups, use:

velero backup get

This command will display all backups with their respective statuses.

Restoring Namespaces

To restore a specific namespace from a backup:

velero restore create --from-backup <backup-name> --include-namespaces <namespace>

Restoring Specific Resources

To restore specific resources, such as deployments or services, from a backup:

velero restore create --from-backup <backup-name> --include-resources <resource1>,<resource2>

Verification of the Restore Process

After the restore process is complete, verify that all resources have been restored correctly by checking the status of the restored resources in the target namespace.

💡
Some resources, such as PersistentVolumeClaims (PVCs) or services with external IPs, may require special handling during migration. Review the Velero migration documentation for detailed instructions.

Advanced Configuration, Monitoring, and Troubleshooting

Velero offers several advanced features and tools to customize your backup and restore operations, extend its functionality, and ensure the security and reliability of your data. You can tailor your backups by excluding specific resources or adding custom labels, ensuring that only the most relevant data is captured. Additionally, Velero supports plugins that enhance its capabilities, such as integrating additional storage providers or managing custom resource backups.

Security is a top priority, and it's essential to ensure that your backups are encrypted and access to backup files is restricted. Using encrypted object storage buckets and securing API access with IAM roles or service accounts are best practices to protect your data.

To keep track of your backups, Velero allows you to monitor the status of backup and restore jobs through its commands or by integrating with tools like Prometheus and Grafana. If issues arise, such as failed backups or incomplete restores, Velero's logs provide detailed information that can help you diagnose and resolve these problems.

Conclusion

Velero is a powerful and adaptable tool, whether you're looking for a straightforward backup solution or managing more complex tasks like disaster recovery and cluster migration. Its flexibility and support for plugins allow you to extend its functionality to suit your specific needs. As you incorporate Velero into your Kubernetes environment, it becomes a reliable part of your infrastructure, helping you maintain a secure and resilient system.

References

  1. Velero Documentation

  2. GitHub Gist with Command Snippets

  3. Velero AWS Plugin GitHub Page

1
Subscribe to my newsletter

Read articles from Edward Oboh directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Edward Oboh
Edward Oboh

The goal is to write about various topics that catch my interest, even those I may not be very familiar with. Check the links for more information about me.