Velero — Backup do seu cluster Kubernetes em 5 minutos
Vamos velejar para um lugar mais seguro!
O que é Velero?
Velero é um projeto open source desenvolvido pela Heptio, antes chamado de Ark, para backup, restore e migrações de recursos e volumes do Kubernetes facilmente.
Velero consiste de:
- Um servidor rodando em seu cluster
- Uma CLI para rodar comandos no servidor Velero
O que ele faz?
- Armazena recursos do Kubernetes em Object Storages altamente disponíves(S3, GCS, Blob Storage, etc)
- Faz backup de PVs/PVCs usando mecanismos de snapshot de discos dos provedores cloud
- Agendamento de backups com a sintaxe cron
- Rotacionamento de backups automático com TTL(Time to Live)
- Tem suporte a plugins desenvolvidos pela comunidade
Quer saber mais? Dê uma olhada no nosso Kubilab #01, onde fazemos uma demo destruindo os recursos de um cluster e recriando-os utilizando apenas o Velero.
Após o vídeo, temos o passo-a-passo de como conseguir instalar ele do zero aí no seu cluster, tanto AWS como GCP!
Antes de instalar o Velero…
..você precisará de:
- Um cluster Kubernetes rodando com suporte a CRD
- Kubectl configurado
- Uma CLI de um cloud provider (aws, gcloud)
Um aviso rápido
Openshift possui suporte nativo como qualquer outro cluster de Kubernetes que suporte CRDs. Abaixo estão as versões suportadas para cada plataforma:
- Kubernetes ≥ 1.7
- Openshift ≥ 3.7
Instalação
A instalação é feita de 3 etapas, sendo:
- Deploy de pré-requisitos do Velero
- Configurando credenciais e recursos cloud
- Configuração e deploy do Velero
1. Deploy de pré-requisitos do Velero
Baixe a última versão disponível do Velero na página Github Releases. Nós usaremos a versão v0.11.0 que é a última disponível no momento da escrita:
Agora temos o namespace, RBAC e CRDs do Velero criados.
A próxima etapa é configurar o arquivo credentials-velero criando um Object Storage e credenciais de cloud provider (IAM).
2. Configurando credenciais e recursos cloud
É hora de configurar credenciais cloud para comunicação, e Object Storage para armazenamento de metadados/recursos. Ao rodar os comandos relacionados ao cloud provider, você deve ter o arquivo credentials-velero no diretório $VELERO_FOLDER/credentials-velero.
AWS
GCP
3. Deploy e configuração do Velero
Com o arquivo credentials-velero e Object Storage configurados, precisaremos apenas criar o Kubernetes Secret a partir do arquivo credentials-velero, e então fazer o deploy do Velero.
AWS
GCP
Parabéns! Seu Velero está instalado e rodando. Agora, vamos entender alguns conceitos antes de criar nosso primeiro backup.
Velero 101
É importante saber o que está acontecendo nos bastidores antes de rodar comandos aleatórios e acabar em apuros. Abaixo há alguns conceitos sobre o que você precisa saber sobre o Velero:
Backup: CRD que armazena informações como data de criação, quais namespaces devem ser incluídos, quais PVCs estão attachados, etc.
BackupLocation: CRD que armazena informações como qual região e object storage devem ser usados para armazenar backups.
SnapshotLocation: CRD que armazena informações como qual região deve ser utilizada para snapshots de PVCs.
Restore: CRD que armazena informações como qual conteúdo de um backup deve ser restaurado.
BackupController: Controlador dentro do servidor Velero que gerencia os CRDs (backups/restores/schedules) e processa chamadas da API do Kubernetes.
Para mais detalhes, veja a documentação oficial.
Criando seu primeiro backup
Velero não é uma ferramenta intrusiva se você utiliza apenas as funcionalidades de backup, já que ele irá ler os recursos sem modificá-los.
Velero usa os verbos mais famosos disponíveis do kubectl(get, create, describe, logs e delete), então você vai se sentir em casa utilizando a sua CLI.
É possivel criar backups únicos e isolados ao rodar “velero create backup”, mas eu fortemente recomendo o agendamento de backups, já que tudo acontece automaticamente embaixo do BackupController, o qual também organiza backups por timestamps.
Vamos criar um agendamento para backup do cluster inteiro, todo dia meia-noite, com tempo de expiração de 24 horas:
velero schedule create all-cluster \
--schedule="0 0 * * *" \
--include-resources '*' \
--include-namespaces '*' \
--include-cluster-resources=true \
--ttl 24h \
--labels entireCluster=true
Após criar o agendamento, o BackupController sempre criará um novo backup, indepentendemente do tempo de agendamento. A duração do backup depende do número de recursos e PVCs envolvidos no processo.
Para listar todos os backups:
velero backup get
Para descrever mais detalhes de um backup:
velero backup describe <YOUR-BACKUP-NAME>
Ver logs de um backup:
velero backup logs <YOUR-BACKUP-NAME>
Criando seu primeiro restore
Fique atento pois todo restore pode modificar estados dos objetos do cluster se o estado deles diferirem do estado de backup.
Para restaurar completamente seu backup:
velero restore create --from-backup <YOUR-BACKUP-NAME> \
--include-namespaces '*' \
--include-resources '*' \
--include-cluster-resources true \
--restore-volumes true
Uma ótima funcionaldiade do Velero é a habilidade de selecionar o que será restaurado a partir de um backup completo. Para restaurar apenas o namespace default a partir de um backup criado:
velero restore create --from-backup <YOUR-BACKUP-NAME> \
--include-namespaces default \
--include-resources '*' \
--restore-volumes true
Isso é tudo pessoal!
Não deixe de nos seguir no Twitter para novas informações e ouça também o Kubicast, o podcast sobre containers e kubernetes.