독립형 Velero 및 Restic을 사용하여 TKG 클러스터에서 실행되는 워크로드를 백업 및 복원할 수 있습니다. 이 방법은 vSphere용 Velero 플러그인 사용에 대한 대안입니다. 독립형 Velero를 사용하는 주된 이유는 이식성이 필요한 경우입니다. 상태 저장 워크로드에는 Restic이 필요합니다.

사전 요구 사항

독립형 Velero 및 Restic을 사용하여 TKG 클러스터에서 워크로드를 백업하고 복원하려면 대상 클러스터에 독립형 Velero 및 Restic 버전을 설치해야 합니다. 별도의 대상 클러스터에서 복원을 수행하려면 Velero와 Restic도 대상 클러스터에 설치해야 합니다. TKG 클러스터에 독립형 Velero 및 Restic 설치 및 구성의 내용을 참조하십시오.

TKG 클러스터에서 실행되는 상태 비저장 애플리케이션 백업

TKG 클러스터에서 실행되는 상태 비저장 애플리케이션을 백업하려면 Velero를 사용해야 합니다.

이 예에서는 --include namespaces 태그(모든 애플리케이션 구성 요소가 해당 네임스페이스에 있는 경우)를 사용하여 예제 상태 비저장 애플리케이션을 백업하고 복원하는 방법을 보여줍니다.
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

S3 호환 개체 저장소(예: MinIO 서버)에서 Velero 버킷을 확인합니다.

Velero는 Kubernetes CRD(사용자 지정 리소스 정의)에 일부 메타데이터를 씁니다.
kubectl get crd
Velero CRD를 사용하면 다음과 같은 특정 명령을 실행할 수 있습니다.
kubectl get backups.velero.io -n velero
kubectl describe backups.velero.io guestbook-backup -n velero

TKG 클러스터에서 실행되는 상태 비저장 애플리케이션 복원

TKG 클러스터에서 실행되는 상태 비저장 애플리케이션을 복원하려면 Velero를 사용해야 합니다.

예제 애플리케이션의 복원을 테스트하려면 예제 애플리케이션을 삭제합니다.

네임스페이스를 삭제합니다.
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

TKG 클러스터에서 실행되는 상태 저장 애플리케이션 백업

TKG 클러스터에서 실행되는 상태 저장 애플리케이션을 백업하려면 애플리케이션 메타데이터 및 영구 볼륨에 저장된 애플리케이션 데이터를 모두 백업해야 합니다. 이렇게 하려면 Velero와 Restic이 모두 필요합니다.

이 예에서는 방명록 애플리케이션을 사용합니다. TKG 클러스터에 방명록 애플리케이션을 배포했다고 가정합니다. TKG 클러스터에 방명록 애플리케이션 배포의 내용을 참조하십시오.

상태 저장 백업 및 복원을 시연할 수 있도록 프런트 엔드 웹 페이지를 사용하여 방명록 애플리케이션에 메시지를 제출하여 메시지가 지속되도록 합니다. 예:

제출한 메시지는 지속될 메시지 목록에 표시됩니다.

이 예에서는 --include namespace 태그와 포드 주석을 사용하여 방명록 애플리케이션을 백업하고 복원하는 방법을 보여줍니다.
참고: 이 예에서는 주석을 사용합니다. 하지만 Velero 버전 1.5 이상에서는 더 이상 주석이 필요하지 않습니다. 주석을 사용하지 않으려면 백업을 생성할 때 --default-volumes-to-restic 옵션을 사용하면 됩니다. 그러면 Restic을 사용하여 모든 PV가 자동으로 백업됩니다. 자세한 내용은 https://velero.io/docs/v1.5/restic/의 내용을 참조하십시오.
백업 절차를 시작하려면 포드의 이름을 가져옵니다.
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

영구 볼륨은 Redis 포드에 연결됩니다. Restic을 사용하여 이러한 상태 저장 포드를 백업하기 때문에 volumeMount라는 이름으로 상태 저장 포드에 주석을 추가해야 합니다.

상태 저장 포드에 주석을 추가하려면 volumeMount를 알고 있어야 합니다. mountName을 가져오려면 다음 명령을 실행합니다.
kubectl describe pod redis-leader-deployment-64fb8775bf-kbs6s -n guestbook

결과에 redis-leader-dataContainers.leader.Mounts: /data가 표시됩니다. 이 마지막 토큰이 리더 포드 주석에 사용할 volumeMount 이름입니다. 팔로워의 경우 redis-follower-data입니다. 소스 YAML에서 volumeMount 이름을 가져올 수도 있습니다.

각 Redis 포드에 주석을 추가합니다. 예를 들면 다음과 같습니다.
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 백업을 수행합니다.
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
Velero를 사용하면 다음과 같은 다른 명령을 실행할 수 있습니다.
kubectl get backups.velero.io -n velero

NAME               AGE
guestbook-backup   4m58s
그리고:
kubectl describe backups.velero.io guestbook-backup -n velero

TKG 2.0 클러스터에서 실행되는 상태 저장 애플리케이션 복원

TKG 클러스터에서 실행되는 상태 저장 애플리케이션을 복원하려면 애플리케이션 메타데이터 및 영구 볼륨에 저장된 애플리케이션 데이터를 모두 복원해야 합니다. 이렇게 하려면 Velero와 Restic이 모두 필요합니다.

이 예에서는 이전 섹션에서 설명한 대로 상태 저장 방명록 애플리케이션을 백업했다고 가정합니다.

상태 저장 애플리케이션의 복원을 테스트하려면 해당 네임스페이스를 삭제합니다.
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

마지막으로 방명록 프런트 엔드 서비스의 외부 IP를 사용하여 방명록 프런트 엔드에 액세스하고 자습서 시작 부분에서 제출한 메시지가 복원되었는지 확인합니다. 예:

복원된 메시지 목록입니다.