Backup de Clusters Kubernetes com Velero
Clusters Kubernetes gerenciam aplicações críticas em produção, e perder dados ou configurações pode ter um impacto severo no negócio. Apesar de o Kubernetes ser projetado para ser resiliente e escalável, ele não é imune a falhas humanas, problemas de infraestrutura ou falhas catastróficas. Portanto, um plano de backup confiável é essencial para garantir a continuidade das operações e evitar perdas de dados.

Apresentação do Velero
O Velero é uma ferramenta open-source desenvolvida pela VMware para backup e recuperação de clusters Kubernetes. Ele permite capturar snapshots do estado do cluster, incluindo volumes persistentes e recursos do Kubernetes, facilitando a restauração em casos de desastre ou migração entre ambientes.
Recursos do Velero
- Backup e restauração de objetos do Kubernetes
- Snapshots de volumes persistentes
- Migração de clusters
- Retenção de dados baseada em políticas
- Suporte a múltiplos provedores de armazenamento, incluindo S3 e NFS
Instalando o Velero
A instalação do Velero pode ser feita de diversas formas, mas o método mais comum é utilizando o CLI oficial. Para instalar:
- Baixe o binário do Velero:
curl -LO https://github.com/vmware-tanzu/velero/releases/latest/download/velero-linux-amd64.tar.gz tar -xvf velero-linux-amd64.tar.gz sudo mv velero /usr/local/bin/
- Configure o backend de armazenamento (S3, por exemplo).
- Instale o Velero no cluster:
velero install --provider aws --bucket <NOME_DO_BUCKET> --backup-location-config region=<REGIAO>,s3ForcePathStyle=true,s3Url=<ENDPOINT_S3>
Isso instalará os componentes do Velero no namespace velero
e configurará a conexão com o armazenamento S3.
Executando o client do Velero em um container Docker
Para interagir com o Velero e criar backups de forma automatizada, podemos utilizar um container Docker com o client. Isso facilita a execução via pipelines de CI/CD. Aqui um exemplo de um Dockerfile com a instalação do Velero e do kubectl para interagir com o cluster Kubernetes:
FROM velero/velero:latest as velero
FROM alpine:latest as kubectl
RUN apk add curl \
&& curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" \
&& chmod +x ./kubectl
FROM alpine:latest
#No caso de execução local, para setar credenciais do k8s
#COPY meu_cluster.yaml /root/.kube/config
COPY --from=velero /velero /usr/local/bin/velero
COPY --from=kubectl ./kubectl /usr/local/bin/kubectl
Backup de volumes com NFS (FileSystemBackup)
Para realizar backups de volumes usando o NFS Provisioner, utilizamos o recurso FileSystemBackup (FSB) do Velero.
Documentação: https://velero.io/docs/v1.15/file-system-backup/
Instalação do Velero usando o FileSystemBackup
O Velero suporta múltiplos backends de armazenamento, incluindo o protocolo S3. Para configurar com o appliance NetApp StorageGRID (uma implementação compatível com S3), usamos um endpoint específico e credenciais configuradas via Secret.
O primeiro passo é criar um Secret com as credenciais de acesso ao StorageGRID. O arquivo credentials-velero
deve conter as credenciais de acesso ao bucket S3. O formato do arquivo é o seguinte.
Arquivo credentials-velero
:
[default]
aws_access_key_id=<CHAVE>
aws_secret_access_key=<SEGREDO>
kubectl create secret generic cloud-credentials --namespace velero --from-file=credentials-velero
Obs importante: É necessário manter o velero-plugin-for-aws
na versão 1.9.0 para funcionar corretamente com os buckets do NetApp. Documentação da issue no GitHub: https://github.com/vmware-tanzu/velero/issues/8013
O comando seguinte instala o Velero com o plugin do AWS e configura o bucket S3 para armazenar os backups.
velero install \
--provider aws \
--use-node-agent \
--use-volume-snapshots=false \
--plugins velero/velero-plugin-for-aws:v1.9.0 \
--bucket meu-bucket \
--secret-file ./credentials-velero
--backup-location-config region=whatever,s3ForcePathStyle="true",s3Url=https://s3.meudominio.com
Estratégias para backup de volumes
Existem duas abordagens principais para backup de volumes:
Opt-in (especificar quais volumes serão incluídos no backup)
Exemplo:
#Anotar nos pods os volumes a serem incluídos no bkp
kubectl -n YOUR_POD_NAMESPACE annotate pod/YOUR_POD_NAME backup.velero.io/backup-volumes=YOUR_VOLUME_NAME_1,YOUR_VOLUME_NAME_2,...
#Criar o backup:
velero backup create BACKUP_NAME OTHER_OPTIONS
Opt-out (especificar quais volumes serão excluídos do backup)
#Anotar nos pods os volumes que não serão incluídos no bkp
kubectl -n sample annotate pod/app1 backup.velero.io/backup-volumes-excludes=pvc1-vm
#OPT-OUT
velero backup create BACKUP_NAME --default-volumes-to-fs-backup OTHER_OPTIONS
Agendamento de Backups
O Velero permite a criação de backups manuais e agendados. Para criar um backup manual:
velero backup create meu-backup --include-namespaces=meu-namespace
Para criar backups periódicos, utilizamos schedules
:
velero schedule create backup-diario --schedule "0 2 * * *" --include-namespaces=meu-namespace
Conclusão
O Velero é uma ferramenta essencial para qualquer equipe que opera clusters Kubernetes, oferecendo backup e recuperação eficientes. Sua integração com S3, incluindo implementações como o NetApp StorageGRID, proporciona flexibilidade para diferentes infraestruturas. Garantir backups regulares e testá-los periodicamente é uma prática fundamental para evitar surpresas em momentos críticos.