Você pode fazer backup e restaurar cargas de trabalho em execução em clusters TKG 2 em Supervisor usando o Velero e o Restic autônomos. Esse método é uma alternativa ao uso do Velero Plugin for vSphere. O principal motivo para usar o Velero autônomo é se você precisar de portabilidade. O Restic é necessário para cargas de trabalho com estado.
Pré-requisitos
Fazer backup de um aplicativo sem estado em execução em um cluster do TKG 2
O backup de um aplicativo sem estado em execução em um cluster TKG requer o uso do Velero.
--include namespaces
em que todos os componentes do aplicativo estão nesse namespace.
velero backup create example-backup --include-namespaces example-backup
Backup request "example-backup" submitted successfully. Run `velero backup describe example-backup` or `velero backup logs example-backup` for more details.
velero backup get
velero backup describe example-backup
Verifique o bucket do Velero no armazenamento de objetos compatível com S3, como o servidor MinIO.
kubectl get crd
kubectl get backups.velero.io -n velero
kubectl describe backups.velero.io guestbook-backup -n velero
Restaurar um aplicativo sem estado em execução em um cluster TKG
A restauração de um aplicativo sem estado em execução em um cluster TKG requer o uso do Velero.
Para testar a restauração de um aplicativo de exemplo, exclua-o.
kubectl delete ns guestbook namespace "guestbook" deleted
velero restore create --from-backup example-backup
Restore request "example-backup-20200721145620" submitted successfully. Run `velero restore describe example-backup-20200721145620` or `velero restore logs example-backup-20200721145620` for more details.
velero restore describe example-backup-20200721145620
velero restore get
kubectl get ns
kubectl get pod -n example
kubectl get svc -n example
Fazer backup de um aplicativo com monitoramento de estado em execução em um cluster TKG
O backup de um aplicativo com monitoramento de estado em execução em um cluster TKG envolve o backup dos metadados do aplicativo e dos dados do aplicativo armazenados em um volume persistente. Para fazer isso, você precisa do Velero e do Restic.
Para este exemplo, vamos usar o aplicativo Guestbook. Se for assumido que você implantou o aplicativo Guestbook em um cluster TKG. Consulte Implantar o aplicativo Guestbook em um cluster TKG 2.
Para que possamos demonstrar o backup e a restauração com estado, envie alguma mensagem para o aplicativo Guestbook usando a página da Web de front-end para que as mensagens sejam persistidas. Por exemplo:
--include namespace
, bem como as anotações do pod.
--default-volumes-to-restic
ao criar o backup. Isso fará o backup automático de todos os PVs usando o Restic. Consulte
https://velero.io/docs/v1.5/restic/ para obter mais informações.
kubectl get pod -n guestbook
kubectl get pod -n guestbook NAME READY STATUS RESTARTS AGE guestbook-frontend-deployment-85595f5bf9-h8cff 1/1 Running 0 55m guestbook-frontend-deployment-85595f5bf9-lw6tg 1/1 Running 0 55m guestbook-frontend-deployment-85595f5bf9-wpqc8 1/1 Running 0 55m redis-leader-deployment-64fb8775bf-kbs6s 1/1 Running 0 55m redis-follower-deployment-84cd76b975-jrn8v 1/1 Running 0 55m redis-follower-deployment-69df9b5688-zml4f 1/1 Running 0 55m
Os volumes persistentes são anexados aos pods do Redis. Como estamos fazendo backup desses pods com estado com o Restic, precisamos adicionar anotações aos pods com estado com o nome volumeMount
.
volumeMount
para anotar o pod com estado. Para obter o
mountName
, execute o seguinte comando.
kubectl describe pod redis-leader-deployment-64fb8775bf-kbs6s -n guestbook
Nos resultados, você vê Containers.leader.Mounts: /data
de redis-leader-data
. Esse último token é o nome volumeMount
a ser usado para a anotação do pod líder. Para o seguidor, será redis-follower-data
. Você também pode obter o nome volumeMount
do YAML de origem.
kubectl -n guestbook annotate pod redis-leader-64fb8775bf-kbs6s backup.velero.io/backup-volumes=redis-leader-data
pod/redis-leader-64fb8775bf-kbs6s annotated
kubectl -n guestbook describe pod redis-leader-64fb8775bf-kbs6s | grep Annotations Annotations: backup.velero.io/backup-volumes: redis-leader-data
kubectl -n guestbook describe pod redis-follower-779b6d8f79-5dphr | grep Annotations Annotations: backup.velero.io/backup-volumes: redis-follower-data
velero backup create guestbook-backup --include-namespaces guestbook
Backup request "guestbook-backup" submitted successfully. Run `velero backup describe guestbook-pv-backup` or `velero backup logs guestbook-pv-backup` for more details.
velero backup get NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR guestbook-backup Completed 0 0 2020-07-23 16:13:46 -0700 PDT 29d default <none>
velero backup describe guestbook-backup --details
kubectl get backups.velero.io -n velero NAME AGE guestbook-backup 4m58s
kubectl describe backups.velero.io guestbook-backup -n velero
Restaurar um aplicativo com monitoramento de estado em execução em um cluster TKG
A restauração de um aplicativo com monitoramento de estado em execução em um cluster TKG envolve a restauração dos metadados do aplicativo e dos dados do aplicativo armazenados em um volume persistente. Para fazer isso, você precisa do Velero e do Restic.
Este exemplo pressupõe que você tenha feito backup do aplicativo de livro de visitas com estado, conforme descrito na seção anterior.
kubectl delete ns guestbook namespace "guestbook" deleted
kubectl get ns kubectl get pvc,pv --all-namespaces
velero restore create --from-backup <velero-backup-name>
velero restore create --from-backup guestbook-backup
Restore request "guestbook-backup-20200723161841" submitted successfully. Run `velero restore describe guestbook-backup-20200723161841` or `velero restore logs guestbook-backup-20200723161841` for more details.
velero restore describe guestbook-backup-20200723161841 Name: guestbook-backup-20200723161841 Namespace: velero Labels: <none> Annotations: <none> Phase: Completed Backup: guestbook-backup Namespaces: Included: all namespaces found in the backup Excluded: <none> Resources: Included: * Excluded: nodes, events, events.events.k8s.io, backups.velero.io, restores.velero.io, resticrepositories.velero.io Cluster-scoped: auto Namespace mappings: <none> Label selector: <none> Restore PVs: auto Restic Restores (specify --details for more information): Completed: 3
velero restore get NAME BACKUP STATUS ERRORS WARNINGS CREATED SELECTOR guestbook-backup-20200723161841 guestbook-backup Completed 0 0 2021-08-11 16:18:41 -0700 PDT <none>
kubectl get ns NAME STATUS AGE default Active 16d guestbook Active 76s ... velero Active 2d2h
vkubectl get all -n guestbook NAME READY STATUS RESTARTS AGE pod/frontend-6cb7f8bd65-h2pnb 1/1 Running 0 6m27s pod/frontend-6cb7f8bd65-kwlpr 1/1 Running 0 6m27s pod/frontend-6cb7f8bd65-snwl4 1/1 Running 0 6m27s pod/redis-leader-64fb8775bf-kbs6s 1/1 Running 0 6m28s pod/redis-follower-779b6d8f79-5dphr 1/1 Running 0 6m28s pod/redis-follower-899c7e2z65-8apnk 1/1 Running 0 6m28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/guestbook-frontend LoadBalancer 10.10.89.59 10.19.15.99 80:31513/TCP 65s service/redis-follower ClusterIP 10.111.163.189 <none> 6379/TCP 65s service/redis-leader ClusterIP 10.111.70.189 <none> 6379/TCP 65s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/guestbook-frontend-deployment 3/3 3 3 65s deployment.apps/redis-follower-deployment 1/2 2 1 65s deployment.apps/redis-leader-deployment 1/1 1 1 65s NAME DESIRED CURRENT READY AGE replicaset.apps/guestbook-frontend-deployment-56fc5b6b47 3 3 3 65s replicaset.apps/redis-follower-deployment-6fc9cf5759 2 2 1 65s replicaset.apps/redis-leader-deployment-7d89bbdbcf 1 1 1 65s
kubectl get pvc,pv -n guestbook NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/redis-leader-claim Bound pvc-a2f6e6d4-42db-4fb8-a198-5379a2552509 2Gi RWO thin-disk 2m40s persistentvolumeclaim/redis-follower-claim Bound pvc-55591938-921f-452a-b418-2cc680c0560b 2Gi RWO thin-disk 2m40s NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/pvc-55591938-921f-452a-b418-2cc680c0560b 2Gi RWO Delete Bound guestbook/redis-follower-claim thin-disk 2m40s persistentvolume/pvc-a2f6e6d4-42db-4fb8-a198-5379a2552509 2Gi RWO Delete Bound guestbook/redis-leader-claim thin-disk 2m40s
Por fim, acesse o front-end do livro de visitas usando o IP externo do serviço de front-end do livro de visitas e verifique se as mensagens que você enviou no início do tutorial foram restauradas. Por exemplo: