Puede realizar operaciones de copia de seguridad y restauración de las cargas de trabajo que se ejecutan en los clústeres de TKG mediante Velero y Restic independientes. Este método es una alternativa al uso de un complemento complemento de Velero para vSphere. La razón principal para usar Velero independiente es la necesidad de portabilidad. Se requiere Restic para las cargas de trabajo con estado.
Requisitos previos
Para realizar copias de seguridad y restaurar cargas de trabajo en clústeres de TKG mediante Restic y Velero independientes, debe instalar la versión independiente de estos en el clúster de destino. Si la restauración se va a realizar en un clúster de destino independiente, Velero y Restic también deben estar instalados en el clúster de destino. Consulte Instalar y configurar Velero y Restic independientes en clústeres de TKG.
Realizar una copia de seguridad de una aplicación sin estado que se ejecuta en un clúster de TKG
La copia de seguridad de una aplicación sin estado que se ejecuta en un clúster de TKG requiere el uso de Velero.
--include namespaces
en la que todos los componentes de la aplicación se encuentran en ese espacio de nombres.
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
Compruebe el depósito Velero en el almacén de objetos compatible con S3, como el servidor MinIO.
kubectl get crd
kubectl get backups.velero.io -n velero
kubectl describe backups.velero.io guestbook-backup -n velero
Restaurar una aplicación sin estado en ejecución en un clúster de TKG
La restauración de una aplicación sin estado que se ejecuta en un clúster de TKG requiere el uso de Velero.
Para probar la restauración de una aplicación de ejemplo, elimínela.
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
Realizar una copia de seguridad de una aplicación con estado que se ejecuta en un clúster de TKG
Realizar una copia de seguridad de una aplicación con estado que se ejecuta en un clúster de TKG implica realizar una copia de seguridad de los metadatos de la aplicación y los datos de la aplicación almacenados en un volumen persistente. Para ello, necesita Velero y Restic.
En este ejemplo, utilizaremos la aplicación del libro de visitas. Si se supone que implementó la aplicación del libro de visitas en un clúster de TKG. Consulte Implementar la aplicación del libro de visitas en un clúster de TKG.
Para que podamos demostrar una copia de seguridad y una restauración con estado, envíe un mensaje a la aplicación del libro de visitas mediante la página web de front-end para que los mensajes persistan. Por ejemplo:
--include namespace
, así como las anotaciones del pod.
--default-volumes-to-restic
al crear la copia de seguridad. Esto hará una copia de seguridad automática de todos los VA mediante Restic. Consulte
https://velero.io/docs/v1.5/restic/ para obtener más información.
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
Los volúmenes persistentes se asocian a los pods de Redis. Debido a que estamos realizando una copia de seguridad de estos pods con estado con Restic, es necesario agregar anotaciones a los pods con estado con el nombre volumeMount
.
volumeMount
para anotar el pod con estado. Para obtener
mountName
, ejecute el siguiente comando.
kubectl describe pod redis-leader-deployment-64fb8775bf-kbs6s -n guestbook
En los resultados, verá Containers.leader.Mounts: /data
de redis-leader-data
. Este último token es el nombre volumeMount
que se utilizará para la anotación del pod principal. Para el seguidor, será redis-follower-data
. También puede obtener el nombre de volumeMount
del YAML de origen.
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 una aplicación con estado que se ejecuta en un clúster de TKG 2.0
La restauración de una aplicación con estado que se ejecuta en un clúster de TKG implica restaurar tanto los metadatos de la aplicación como los datos de la aplicación almacenados en un volumen persistente. Para ello, necesita Velero y Restic.
En este ejemplo, se supone que se realizó una copia de seguridad de la aplicación de libro de visitas con estado, como se describe en la sección 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 último, acceda al front-end del libro de visitas mediante la dirección IP externa del servicio de front-end del libro de visitas y compruebe que se restauren los mensajes que envió al principio del tutorial. Por ejemplo: