VMware TANZU/TKG: Tanzu Kubernetes Grid

vSphere with Tanzu에서 Increment backup

vmguru 2023. 2. 6. 15:18

vSphere with Tanzu는 opensource Velero(VMware contribution)를 가지고서 Kubernetes workload에 대한 백업을 지원하고 있습니다.

 

 

https://velero.io/

 

Velero

Backup and migrate Kubernetes resources and persistent volumes Velero is an open source tool to safely backup and restore, perform disaster recovery, and migrate Kubernetes cluster resources and persistent volumes.

velero.io

 

 

Velero features

 

 

Velero 도구는 재해 복구, 데이터 마이그레이션, 혹은 데이터 보호를 위한 백업&복구 도구로서 기능을 수행할 수 있습니다.

백업 방식으로 2가지 모드로 온디맨드와 스케줄 모드를 제공합니다.

 

 

Ondemand Backup
복사된 Kubernetes 객체의 tarball을 클라우드 객체 스토리지에 업로드하며, 지정된 경우 클라우드 공급자 API를 호출하여 영구 볼륨의 디스크 스냅샷을 만듭니다.

선택적으로 백업 중에 실행할 백업 후크를 지정할 수 있습니다. 예를 들어 스냅샷을 찍기 전에 메모리 내 버퍼를 디스크로 플러시하도록 데이터베이스에 지시해야 할 수 있습니다. 백업 후크에 대해 자세히 알아보세요.

클러스터 백업은 엄격하게 원자적이지 않습니다. Kubernetes 개체가 백업 시 생성되거나 편집되는 경우 백업에 포함되지 않을 수 있습니다. 일관성 없는 정보를 캡처할 확률은 낮지만 가능합니다.

Scheduled Backup
예약 작업을 사용하면 반복 간격으로 데이터를 백업할 수 있습니다. 언제든지 예약 백업을 생성할 수 있으며 첫 번째 백업은 예약의 지정된 간격으로 수행됩니다. 이러한 간격은 Cron 표현식으로 지정됩니다.

Velero는 이름이 <SCHEDULE NAME>-<TIMESTAMP>인 일정에서 생성된 백업을 저장합니다. 여기서 <TIMESTAMP>는 YYYYMMDDhhmmss 형식입니다. 자세한 내용은 백업 참조 설명서를 참조하십시오.

 

 

Velero Backup workflow

 

 

velero backup create test-backup을 실행할 때:
Velero 클라이언트는 Kubernetes API 서버를 호출하여 Backup 객체를 생성합니다.
BackupController는 새 백업 개체를 인식하고 유효성 검사를 수행합니다.
BackupController는 백업 프로세스를 시작합니다. API 서버에 리소스를 쿼리하여 백업할 데이터를 수집합니다.
BackupController는 객체 스토리지 서비스(예: AWS S3)를 호출하여 백업 파일을 업로드합니다.

기본적으로 velero backup create는 영구 볼륨의 디스크 스냅샷을 만듭니다. 추가 플래그를 지정하여 스냅샷을 조정할 수 있습니다. 사용 가능한 플래그를 보려면 velero backup create --help를 실행하십시오. 스냅샷은 --snapshot-volumes=false 옵션으로 비활성화할 수 있습니다.

 

그렇다면 vSphere with Tanzu에서 Velero 도구는 증분 백업을 지원할까요?

- 지원하지 않습니다.

 

이러한 증분 백업과 같은 기능은 3rd party backup 도구들이 지원을 하고 있습니다. 단 다른 도구들은 Velero Plugin을 함께 이용을 하고 있습니다.

 

아래와 같은 형태로 VM의 CBT 옵션을 조정하여 block 변경 사항을 추적하고 백업에 이용할 수 있습니다.

CBT에 관한 내용은 KB 참조 VMware KB: https://kb.vmware.com/s/article/1020128

 

 

* 방안 1

1. Supervisor control Plane VM 접속

 

# kubectl config get-contexts

 

2. 현재 'kubernetes-admin' context 이용 확인

 

3. 개별 VM spec: CBT 정보 수정

kubectl edit virtualmachine <VM-Name> -n <Your-vSphere-Namespace>

 

 

4. spec: 항목의 CBT 값을 수정

advancedOptions:

changeBlockTracking: true

 

 

5. 지정한 vSphere-Namespace 내의 전체 VM 변경 내용 적용

kubectl get virtualmachines -n <Your-vSphere-Namespace> -o name | sed -e 's/.*\///g' | xargs -I {} kubectl patch virtualmachine {} -n <Your-vSphere-Namespace> --type=json -p '[{ "op": "add", "path": "/spec/advancedOptions", "value": {"changeBlockTracking": true}}]'

 

 

vCenter UI 통해서 변경 내역 표시됨, VM Edit에서의 VM 옵션 고급 파라메터 값에서 'True' 변경되는 것을 확인 .

 

임의 변경을 하는 방안이기에 지속성을 가지지 않기에 아래 조건에서 운영팀에서 CBT 적용 여부를 직접 관리를 해줘야 합니다.

- New Cluster 배포는 CBT  적용 안됨.

- 기존 Cluster 확장 , 새롭게 배포되는 VM 적용 안됨.

- Cluster 업그레이드 경우에도 새롭게 VM 생성되는 것으로 적용 안됨.

 

운영팀에서 직접 위와 같은 작업 이후에는 다시 CBT enabled 하는 작업을 진행이  필요 하기에, 별도로 수동 관리하는 방안이나, 배포 파이프라인, webhook 대체 방안으로 확인할 필요가 있습니다.

 

 

* 방안 2 *

1. supervisor cluster  연결

2. 이미 설치된 velero plugin 대한 CBT 활성화 명령줄 실행

velero-vsphere configure --enable-cbt-in-guests -n <guest cluster namespace>

 

3. guest cluster VM 대한 CBT  변경 상태 확인

kubectl get -n <게스트 클러스터 네임스페이스> virtualmachine <게스트 클러스터 작업자 노드 VM 이름> -o jsonpath='{.status.changeBlockTracking}'

 

4. vCenter UI에서 변경 사항 표시 확인

 

 

* 방안 3 *

1. 신규 설치 , velero-vsphere install 시점에 옵션 조정

velero-vsphere install 명령줄 수행 , CBT 옵션을 마지막에 추가

--enable-cbt-in-guests