vSphere with Tanzu에서 Increment backup
vSphere with Tanzu는 opensource Velero(VMware contribution)를 가지고서 Kubernetes workload에 대한 백업을 지원하고 있습니다.
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 도구는 재해 복구, 데이터 마이그레이션, 혹은 데이터 보호를 위한 백업&복구 도구로서 기능을 수행할 수 있습니다.
백업 방식으로 2가지 모드로 온디맨드와 스케줄 모드를 제공합니다.
Ondemand Backup
복사된 Kubernetes 객체의 tarball을 클라우드 객체 스토리지에 업로드하며, 지정된 경우 클라우드 공급자 API를 호출하여 영구 볼륨의 디스크 스냅샷을 만듭니다.
선택적으로 백업 중에 실행할 백업 후크를 지정할 수 있습니다. 예를 들어 스냅샷을 찍기 전에 메모리 내 버퍼를 디스크로 플러시하도록 데이터베이스에 지시해야 할 수 있습니다. 백업 후크에 대해 자세히 알아보세요.
클러스터 백업은 엄격하게 원자적이지 않습니다. Kubernetes 개체가 백업 시 생성되거나 편집되는 경우 백업에 포함되지 않을 수 있습니다. 일관성 없는 정보를 캡처할 확률은 낮지만 가능합니다.
Scheduled Backup
예약 작업을 사용하면 반복 간격으로 데이터를 백업할 수 있습니다. 언제든지 예약 백업을 생성할 수 있으며 첫 번째 백업은 예약의 지정된 간격으로 수행됩니다. 이러한 간격은 Cron 표현식으로 지정됩니다.
Velero는 이름이 <SCHEDULE NAME>-<TIMESTAMP>인 일정에서 생성된 백업을 저장합니다. 여기서 <TIMESTAMP>는 YYYYMMDDhhmmss 형식입니다. 자세한 내용은 백업 참조 설명서를 참조하십시오.
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