독립형 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 버킷을 확인합니다.
kubectl get 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
태그와 포드 주석을 사용하여 방명록 애플리케이션을 백업하고 복원하는 방법을 보여줍니다.
--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-data
의 Containers.leader.Mounts: /data
가 표시됩니다. 이 마지막 토큰이 리더 포드 주석에 사용할 volumeMount
이름입니다. 팔로워의 경우 redis-follower-data
입니다. 소스 YAML에서 volumeMount
이름을 가져올 수도 있습니다.
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
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를 사용하여 방명록 프런트 엔드에 액세스하고 자습서 시작 부분에서 제출한 메시지가 복원되었는지 확인합니다. 예: