Em um cenário de infraestrutura cada vez mais dinâmico e complexo como o Kubernetes, a segurança e a resiliência dos dados são prioridades máximas. Perdas inesperadas podem ocorrer, seja por falhas de hardware, erros humanos ou até mesmo desastres. É nesse contexto que o Velero, uma ferramenta Open Source robusta e flexível, se destaca como um aliado essencial para a proteção do seu ambiente Kubernetes.
O que é o Velero?
Criado em 2017 pela Heptio, o Velero é uma ferramenta poderosa construída especificamente para os desafios do backup e restauração de recursos e volumes persistentes em clusters Kubernetes. Diferente de soluções adaptadas que tentam se encaixar nesse formato, o Velero entende a granularidade dos recursos Kubernetes e as complexidades dos ambientes nativos da nuvem. Sua versatilidade permite sua execução em diversas plataformas, desde provedores de nuvem líderes de mercado até ambientes on-premises.
Isso se traduz em vantagens significativas para o seu fluxo de trabalho:
Integração e Eficiência Nativas: Por ser construído para o Kubernetes, o Velero entende profundamente sua arquitetura, garantindo backups e restaurações mais eficientes e confiáveis.
Proteção Robusta contra Perdas de Dados: Realize backups consistentes de todo o seu cluster ou de recursos específicos (deployments, PersistentVolumes, etc.), assegurando a capacidade de restaurar rapidamente seu ambiente em caso de falhas, erros humanos ou desastres.
Migrações de Clusters Simplificadas: Facilite a movimentação de suas cargas de trabalho e configurações entre diferentes clusters Kubernetes, ideal para atualizações de versão, mudanças de provedor de nuvem ou consolidação de infraestrutura.
Replicação Perfeita para Desenvolvimento e Testes: Crie cópias fiéis de seus clusters de produção em ambientes de desenvolvimento e teste. Isso garante consistência, acelera o ciclo de vida do software e permite testes mais realistas e seguros.
A Arquitetura do Velero
Velero Server: Um servidor executado como um conjunto de pods dentro do seu cluster Kubernetes. Ele é o responsável por orquestrar as operações de backup e restauração.
Velero CLI: Uma interface de linha de comando que você instala localmente para interagir com o Velero Server, permitindo a execução de comandos de backup, restauração e agendamento.
Para uma compreensão aprofundada e acesso à documentação mais recente, visite este link.
Como o Velero Funciona: As Três Operações Primordiais
O Velero centraliza suas funcionalidades em três operações fundamentais:
Backup Sob Demanda: Permite a criação de backups manuais do seu cluster ou de recursos específicos sempre que necessário.
Backups Agendados: Oferece a capacidade de definir políticas de backup recorrentes, automatizando a proteção dos seus dados em intervalos regulares.
Restauração: A funcionalidade crucial para recuperar os dados e recursos previamente selecionados, seja restaurando todo o cluster ou apenas partes dele.
Essas operações são gerenciadas através de Custom Resource Definitions (CRDs) do Kubernetes, armazenadas no `etcd`. O Velero utiliza controladores que monitoram esses recursos personalizados e executam as ações necessárias para realizar os backups e restaurações, garantindo um fluxo de trabalho consistente e automatizado.
Uma característica notável do Velero é sua flexibilidade na seleção dos objetos a selecionados ou restaurados. Você pode optar por incluir todos os objetos do seu cluster ou aplicar filtros por tipo de recurso (como Deployments, Services), namespace e/ou labels específicos. Essa granularidade oferece controle preciso sobre o processo de proteção e recuperação.
Velero em Cenários Críticos: Recuperação de Desastres Simplificada
Imagine a seguinte situação: você possui um cluster Kubernetes que não foi atualizado há algum tempo e precisa realizar upgrades significativos, mas a familiaridade com as ferramentas instaladas é limitada. Em um cenário como este, onde o risco de falhas durante a atualização é maior, o Velero se torna um escudo protetor.
Antes de iniciar qualquer modificação, você pode utilizar o Velero para criar um backup completo do estado atual do cluster. Isso garante um ponto de restauração seguro. Caso o processo de atualização encontre problemas inesperados ou cause instabilidade no sistema (algo possível dada a falta de familiaridade com o ambiente), você pode restaurar o cluster para o estado funcional anterior, minimizando o tempo de inatividade e garantindo a continuidade das operações. Essa capacidade oferece tranquilidade e segurança ao lidar com ambientes desconhecidos ou complexos.
Fluxo de Trabalho do Backup: Um Cenário Prático
Vamos entender o processo de backup com um exemplo simples utilizando o comando:
Este comando desencadeia um fluxo de trabalho que pode ser dividido em quatro etapas principais (conforme ilustrado na imagem abaixo):
Início da Requisição: O administrador ou desenvolvedor do cluster utilizando o Velero CLI envia uma solicitação de criação de um objeto de `Backup` para a API do Kubernetes.
Validação pelo BackupController: O BackupController, um componente do Velero Server, detecta a criação do novo objeto `Backup` e realiza a validação da requisição, verificando se todos os parâmetros necessários estão presentes e corretos.
Coleta de Dados: Após a validação bem-sucedida, o BackupController inicia o processo de coleta de dados. Ele consulta o servidor da API do Kubernetes para obter informações sobre os recursos que precisam ser selecionados, com base nas especificações do objeto `Backup`.
Upload para o Armazenamento de Objetos: Uma vez que os dados dos recursos são coletados e processados, o Velero realiza uma chamada para o serviço de armazenamento de objetos configurado (exemplos serão mostrados na tabela abaixo). Os arquivos de backup contendo os metadados e, opcionalmente, os dados dos volumes persistentes são carregados neste local seguro.
Observação importante: Por padrão, o Velero cria snapshots de disco para todos os volumes persistentes presentes no cluster. No entanto, o usuário tem a flexibilidade de configurar flags adicionais para personalizar o comportamento dos snapshots, como especificar provedores de snapshot diferentes ou incluir metadados adicionais.

Backups sob demanda: Detalhes do Processo
A operação de backup sob demanda envolve principalmente dois processos distintos:
Carregamento de Objetos: Os objetos do Kubernetes (definições de Deployments, Services, etc.) são copiados do `etcd` e empacotados em um arquivo `tarball`. Este arquivo é então carregado para o armazenamento de objetos configurados na nuvem ou no ambiente local.
Snapshots de Volumes Persistentes: Se especificado na configuração do backup, o Velero realiza chamadas para a API do provedor de nuvem para criar instâncias de disco (snapshots) dos volumes persistentes associados aos recursos selecionados.
O Velero oferece suporte a uma ampla gama de provedores de nuvem e soluções de armazenamento, com diferentes níveis de suporte (mantido pela equipe do Velero ou pela comunidade):
Suporte Mantido pelo Velero | |||||
Provider | Object Store | Volume Snapshotter | Plugin Provider Repo | Setup Instructions | Parameters |
Amazon Web Services (AWS) | AWS S3 | AWS EBS | Velero plugin for AWS | AWS Plugin Setup | BackupStorageLocation VolumeSnapshotLocation |
Google Cloud Platform (GCP) | Google Cloud Storage | Google Compute Engine Disks | Velero plugin for GCP | GCP Plugin Setup | BackupStorageLocation VolumeSnapshotLocation |
Microsoft Azure | Azure Blob Storage | Azure Managed Disks | Velero plugin for Microsoft Azure | Azure Plugin Setup | BackupStorageLocation VolumeSnapshotLocation |
VMware vSphere | 🚫 | vSphere Volumes | VMware vSphere | vSphere Plugin Setup | 🚫 |
Container Storage Interface (CSI) | 🚫 | CSI Volumes | Velero plugin for CSI | CSI Plugin Setup | 🚫 |
Suporte da Comunidade Velero | |||||
Provider | Object Store | Volume Snapshotter | Plugin Documentation | ||
AlibabaCloud | Alibaba Cloud OSS | Alibaba Cloud | AlibabaCloud | ||
DigitalOcean | DigitalOcean Object Storage | DigitalOcean Volumes Block Storage | StackPointCloud | ||
Hewlett Packard | 🚫 | HPE Storage | Hewlett Packard | ||
OpenEBS | 🚫 | OpenEBS CStor Volume | OpenEBS | ||
OpenStack | Swift | Cinder | OpenStack | ||
Portworx | 🚫 | Portworx Volume | Portworx | ||
Storj | Storj Object Storage | 🚫 | Storj |
É importante consultar a documentação específica de cada plugin para obter informações detalhadas sobre configurações e parâmetros.
Backups agendados: Automatizando a Proteção Contínua
Os backups agendados permitem definir políticas de backup que são executadas em intervalos regulares, garantindo uma proteção contínua dos seus dados sem intervenção manual. Você pode criar um agendamento a qualquer momento, e o primeiro backup será executado no momento da criação ou no próximo intervalo definido pela expressão cron.
Os backups agendados seguem a seguinte convenção de nomenclatura:
O <TIMESTAMP> é formatado como AAAAMMDDhhmmss (ANO-MÊS-DIA-HORA-MINUTO-SEGUNDO). Por exemplo, se você criar um agendamento de backup para uma aplicação Nginx chamada "nginx-backup", o nome do backup será salvo da seguinte forma em uma execução em 25 de abril de 2025 às 11:49:28:
Onde:
Schedule Name ou ‘Nome do agendamento’: `nginx-backup`
Timestamp: `20250425114928` (25/04/2025 - 11:49:28)
Restauração: Recuperando Seus Dados com Flexibilidade
A restauração é a etapa crucial para recuperar os objetos e volumes persistentes a partir de um backup previamente criado. O Velero oferece grande flexibilidade nesse processo. Você não está limitado a restaurar todo o cluster; pode escolher restaurar apenas um subconjunto específico de objetos e volumes persistentes conforme sua necessidade.
Uma funcionalidade poderosa do Velero é o suporte ao re-mapeamento de múltiplos namespaces. Isso significa que você pode restaurar recursos de um backup para um namespace diferente do original, oferecendo diversas opções de recuperação e migração. Você pode até mesmo especificar nomes personalizados para os recursos restaurados.
Uma Demonstração Prática com Velero
Nesta seção, vamos mergulhar em uma demonstração prática do Velero, garantindo a segurança e a resiliência das suas aplicações Kubernetes. Veremos como instalá-lo e utilizá-lo em um cenário de teste simples, mas poderoso. Para instalação vamos seguir a documentação deste link.
Para começar, vamos instalar o Velero em nosso ambiente Linux. O processo é direto, seguindo a documentação oficial e utilizando a versão 1.16. Primeiro, baixamos o binário com o seguinte comando:
Com o arquivo baixado, precisamos extrair o conteúdo do tarball para acessar o executável do Velero. Utilizamos o comando:
Acesse o arquivo compactado execute:
Para que o sistema reconheça o comando velero globalmente, movemos o binário extraído para um diretório presente no nosso $PATH, como /usr/local/bin para a maioria dos usuários Linux:
Para confirmar que a instalação foi bem-sucedida, basta executar o comando velero version. Se tudo estiver correto, você verá informações sobre a versão instalada.

Agora que o Velero CLI está instalado, vamos configurar um ambiente de teste mais completo, explorando o seu potencial máximo com PersistentVolumes. Utilizaremos um exemplo fornecido na própria documentação do Velero, disponível neste link.
Para este teste, vamos clonar o repositório oficial do Velero, que contém diversos exemplos úteis:
Acessamos o diretório clonado para encontrar os arquivos de exemplo:
Para simular um ambiente de armazenamento de backup, utilizaremos o 'minio', um projeto open source que implementa um servidor de armazenamento de objetos compatível com a API S3 da AWS. A instalação do Velero com o Minio neste ambiente foi facilitada por um projeto contribuinte, que pode ser encontrado neste link:
O processo envolve três etapas:
1. Criando as Credenciais (Arquivo credentials-velero): Na pasta do Velero, criamos um arquivo chamado credentials-velero com as seguintes informações de acesso ao Minio:
2. Em seguida, aplicamos a configuração do Minio no nosso cluster Kubernetes:
3. Finalmente, instalamos o servidor Velero no nosso cluster, configurado para usar o Minio como backend de armazenamento:
Ambiente pronto:

Nosso ambiente de teste está pronto! Agora, vamos examinar o arquivo examples/nginx-app/with-pv.yaml. Este arquivo define uma aplicação Nginx completa, incluindo:
É nela que vamos testar nossa ferramenta, podemos ver que o mesmo vai criar um namespace chamado nginx-example, com todos os ambiente da sua estrutura um PersistentVolumes, Deployments e um Service, simulando um aplicação completa, nisto vamos executamos o seguinte comando:
A saída deste comando confirma a criação dos recursos no namespace nginx-example.

Agora, com a nossa aplicação em execução, vamos utilizar o Velero para criar um backup completo deste ambiente, incluindo o PersistentVolume. O comando para isso é:
Que basicamente diz:
Criará um novo backup chamado nginx-backup.
Incluirá todos os recursos Kubernetes presentes no namespace nginx-example neste backup.
Ao encontrar PersistentVolumes provisionados por um driver CSI dentro do namespace nginx-example, o Velero tentará criar snapshots desses volumes.
O Velero aguardará no máximo 20 minutos pela conclusão de cada operação de snapshot CSI. Se uma operação de snapshot não terminar dentro de 20 minutos, o Velero tratará isso como um timeout.
Após a conclusão bem-sucedida do backup, podemos obter detalhes sobre ele utilizando o comando velero backup describe nginx-backup-project. A saída nos fornece informações valiosas, como o status (Completed), os namespaces e recursos incluídos, a localização do armazenamento do backup (default no nosso caso, configurado para o Minio), e os detalhes da operação.
Como vimos anteriormente, o backup do namespace nginx-example foi concluído com sucesso, protegendo todos os 11 itens da nossa aplicação, incluindo o PersistentVolume.
Para demonstrar a capacidade de restauração do Velero, vamos simular uma falha grave deletando o namespace inteiro da nossa aplicação:
Este comando removerá todos os recursos da aplicação Nginx, incluindo o Deployment, o Service e o PersistentVolumeClaim.

Com o nosso ambiente simuladamente perdido, podemos restaurá-lo facilmente utilizando o Velero com o seguinte comando:
Este comando instrui o Velero a criar uma nova restauração a partir do backup nginx-backup-project.

Após a conclusão da restauração, podemos verificar que o namespace nginx-example foi recriado e todos os recursos da nossa aplicação, incluindo o Deployment, o Service e o Pod com o PersistentVolume, foram restaurados ao estado em que estavam no momento do backup.
Com este simples exemplo, demonstramos o poder do Velero para proteger suas aplicações Kubernetes, permitindo a recuperação rápida e confiável em cenários de desastre ou falha. A capacidade de fazer backup e restaurar namespaces inteiros, incluindo dados persistentes, torna o Velero uma ferramenta indispensável para qualquer ambiente Kubernetes de produção.
Conclusão
Em suma, o Velero emerge como uma solução de backup e restauração excepcionalmente robusta e adaptável para o ecossistema Kubernetes. Sua capacidade de proteger desde recursos individuais até clusters inteiros, aliada à flexibilidade de agendamento e restauração granular, o torna uma ferramenta indispensável para garantir a resiliência e a segurança de aplicações conteinerizadas.
A arquitetura bem definida, com o Velero Server orquestrando as operações e o Velero CLI facilitando a interação, simplifica a gestão de backups e restaurações. A compatibilidade com diversos provedores de nuvem e soluções de armazenamento, impulsionada tanto pelos mantenedores quanto pela ativa comunidade Open Source, amplia ainda mais sua aplicabilidade em diferentes cenários.
Para os administradores de cluster, o Velero representa muito mais do que uma simples ferramenta de backup. Ele se torna um guardião essencial, oferecendo a tranquilidade de poder recuperar ambientes em situações críticas, facilitar migrações complexas e replicar ambientes para desenvolvimento e testes com confiança. A capacidade de re-mapear namespaces e proteger locais de armazenamento durante a restauração demonstra a atenção aos detalhes e a preocupação em fornecer um controle preciso sobre o ciclo de vida dos dados do cluster.
Portanto, para aqueles que buscam uma estratégia de proteção de dados eficaz e confiável em seus ambientes Kubernetes, o Velero não é apenas uma boa opção – é uma ferramenta primordial é extremamente valiosa, capacitando os cuidadores de cluster a manter a integridade, a disponibilidade e a continuidade de suas aplicações com segurança e eficiência.