Skip to content

Velero

sobre

Estamos instalando o velero no GKE, o qual vai usar bucket GCS.

Kubeconfig

Carregue o kubeconfig

cd /diretorio/do/projeto
export KUBECONFIG=$PWD/kube_config_cluster.yml

Gcloud cli

Você precisa ter um gcloud-client instalado e funcionado.

Permissões

liste

gcloud config list

defina a var

export PROJECT_ID=$(gcloud config get-value project)
````

defina a var
export GSA_NAME=velero
crie a conta
gcloud iam service-accounts create $GSA_NAME \ --display-name "Velero service account"
liste as contas

```
gcloud iam service-accounts list

crie a var

export SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \
  --filter="displayName:Velero service account" \
  --format 'value(email)')
````

crie a role

```bash
ROLE_PERMISSIONS=(
    compute.disks.get
    compute.disks.create
    compute.disks.createSnapshot
    compute.projects.get
    compute.snapshots.get
    compute.snapshots.create
    compute.snapshots.useReadOnly
    compute.snapshots.delete
    compute.zones.get
    storage.objects.create
    storage.objects.delete
    storage.objects.get
    storage.objects.list
    iam.serviceAccounts.signBlob
)

gcloud iam roles create velero.server \
    --project $PROJECT_ID \
    --title "Velero Server" \
    --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
    --role projects/$PROJECT_ID/roles/velero.server

gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}

dê permissão e crie a chave

gcloud iam service-accounts keys create credentials-velero \
    --iam-account $SERVICE_ACCOUNT_EMAIL

Instalando

Instale o velero

velero install velero-infra \
    --provider gcp \
    --plugins velero/velero-plugin-for-gcp:v1.13.0 \
    --bucket plateduc-velero \
    --secret-file ./velero.json

Checando a instalação

kubectl get deployment/velero --namespace velero

Saída esperada

NAME     READY   UP-TO-DATE   AVAILABLE   AGE
velero   1/1     1            1           2m

Verifique se o location está disponivel

velero get backup-location

Saída esperada

NAME      PROVIDER   BUCKET/PREFIX      PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
default   gcp        velero-infra   Available   2025-04-07 07:41:11 -0300 -03   ReadWrite     true

Se aparecer "PHASE Available" o location está funcionando.

Pronto, tudo instalado, agora vamos ver os comandos para fazer backup, restore e agendamentos.

Marcando volumes para backup

Você pode espeficiar os volumes de um POD que precisam ir pro restic assim

kubectl annotate pod meu-pod backup.velero.io/backup-volumes=meu-volume

Ou se preferir, pode definir que todos os volumes do NS devem ir pro restic

kubectl annotate namespace meu-namespace backup.velero.io/backup-volumes=true

Operando o velero

Fazendo backup completo

velero backup create meu-backup --include-namespaces '*' --wait

Fazendo backups definindo o alvo

Existem muitas formas de fazer backup pelo velero, a mais indicada para a SEMAD é o backup do namespace completo, com seus volumes.

velero backup create bkp-20250497-ns-projetoX --include-namespaces projetoX --wait

Esse comando fará o backup do namespace e de todos os seus recursos.

Fazendo restore

velero restore create restore-bkp-20250497-ns-projetoX --from-backup bkp-20250497-ns-projetoX --wait

Note que o restore irá sobrescrever o namespace e seus dados, tenha cuidado.

Fazendo restore em outro NS

Esse método funciona para configurações, mas não funciona para volumes se for o mesmo cluster de onde o backup foi gerado.

velero restore create  --from-backup BACKUP_NAME --namespace-mappings OLD_NS:NEW_NS --wait

Agendando backups

Agendando um backup do namespace projetoX, diariamente, 01 da manha, com tempo de vida de 240h.

velero schedule create backup-diario-projetoX \
  --schedule="0 1 * * *" \
  --include-namespaces projetoX \
  --ttl 240h
  --wait

refs

  • https://velero.io
  • https://velero.io/docs
  • https://velero.io/docs/v1.17/basic-install/
  • https://velero.io/docs/v1.17/backup-reference/
  • https://velero.io/docs/v1.17/restore-reference/
  • https://velero.io/docs/v1.17/resource-filtering/