NetApp Tech Blog에 갔다가 Trident 관련해서 흥미로운 주제의 글이 보여서 AI 번역(+약간 수정)의 힘을 빌려 읽어보았습니다.
출처: https://community.netapp.com/t5/Tech-ONTAP-Blogs/Crash-Consistent-Backup-and-Restore-Operations-for-OpenShift-Virtualization-VMs/ba-p/459417
이전 블로그 에서는 KubeVirt 기반 플랫폼에서 VM의 포괄적인 데이터 보호 기능을 강화하는 Trident 25.02 릴리스의 백업 및 복원 기능을 소개했습니다. 이 블로그에서는 VM 백업을 생성하고 복원하는 방법에 대한 자세한 가이드를 제공합니다. 또한, 단일 네임스페이스 내에서 여러 VM을 관리할 때 특히 유용한 VM 리소스에 레이블을 사용하여 VM 백업을 생성하는 방법을 시연합니다. 레이블 선택기를 사용하여 백업에서 특정 VM을 복원하여 원하는 VM만 복원되도록 하는 방법도 보여드리겠습니다.
필수 조건
하드웨어 요구 사항
OpenShift 클러스터에서 워커 노드를 생성하는 데 사용할 수 있는 베어 메탈 서버가 있는지 확인하세요.
OpenShift 클러스터 설정
베어 메탈 서버가 포함된 OpenShift 클러스터를 설치합니다 .
OpenShift 가상화 설치
Operator Hub에서 OpenShift Virtualization Operator를 설치하고 구성하세요 . 설치가 완료되면 콘솔에 가상화 옵션이 표시되어 UI에서 VM을 생성할 수 있습니다.
보관 요구 사항
Trident를 사용하여 스토리지를 프로비저닝하려면 클러스터의 작업자 노드에서 ONTAP 스토리지를 사용할 수 있고 접근할 수 있는지 확인하세요.
트라이던트 설치 및 구성
OpenShift 클러스터에 Trident 25.02 버전 이상을 설치하세요. Trident를 사용하여 백엔드 객체와 스토리지 클래스를 생성하여 스토리지 리소스를 프로비저닝하세요.
트라이던트 프로텍트 설치
OpenShift Virtualization VM의 백업 및 복원 기능을 활성화하려면 클러스터에 Trident Protect 25.02를 설치합니다 .
이러한 필수 구성 요소와 설정 지침을 따르면 Trident 25.02에서 제공하는 강력한 백업 및 복원 기능을 활용하여 OpenShift 가상화 환경에서 VM에 대한 충돌 일관성 있는 데이터 보호를 보장할 수 있습니다.
아래에서는 전제 조건에 언급된 대로 이미 설정된 리소스를 볼 수 있습니다.
루트 디스크와 데이터 디스크를 사용하여 “demo” 네임스페이스에 VM을 만듭니다.
다음 스크린샷은 템플릿을 사용하여 콘솔에서 VM을 생성하는 과정을 보여줍니다. 루트 디스크는 기본 스토리지 클래스를 자동으로 선택하므로 기본 스토리지 클래스가 적절하게 설정되어 있는지 확인하세요. 제 설정에서는 기본 스토리지 클래스가 sc-zonea-san 입니다. 추가 디스크를 생성할 때 스토리지 클래스 sc-zonea-san을 선택하고 ” Apply optimized storage settings ” 확인란을 선택해야 합니다 . 이렇게 하면 액세스 모드가 RWX로, 볼륨 모드가 차단으로 설정됩니다.
참고: Trident는 SAN(iSCSI, NVMe/TCP 및 FC)의 블록 볼륨 모드에서 RWX 액세스 모드를 지원합니다. (NAS의 기본 액세스 모드입니다.) 나중에 VM의 라이브 마이그레이션을 수행해야 하는 경우 RWX 액세스 모드가 필요합니다.
VM, Pod, PVC 목록
AppVault 자격 증명으로 시크릿을 생성하고 Trident-Protect를 위한 AppVault를 생성합니다.
# cat appvault-secret.yaml
apiVersion: v1
stringData:
accessKeyID: "<access key of S3>"
secretAccessKey: "<secret access key of S3>"
# you can also provide base 64 encoded values instead of string values
#data:
# base 64 encoded values
# accessKeyID: < base 64 encoded access key>
# secretAccessKey: <base 64 encoded secretAccess key>
kind: Secret
metadata:
name: appvault-secret
namespace: trident-protect
type: Opaque
# cat appvault.yaml
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: ontap-s3-appvault
namespace: trident-protect
spec:
providerConfig:
azure:
accountName: ""
bucketName: ""
endpoint: ""
gcp:
bucketName: ""
projectID: ""
s3:
bucketName: trident-protect
endpoint: <lif for S3 access>
secure: "false"
skipCertValidation: "true"
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: appvault-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: appvault-secret
providerType: OntapS3
# oc create -f appvault-secret.yaml -n trident-protect
# oc create -f appvault.yaml -n trident-protect
“demo” 네임스페이스의 모든 리소스를 포함하는 앱 만들기
네임스페이스 데모 에는 VM이 하나만 있으므로 생성된 Trident Protect 앱은 해당 VM을 나타냅니다. 나중에 네임스페이스에 VM이 두 개 이상 있는 경우 선택적으로 앱을 생성하는 방법을 살펴보겠습니다.
# tp create app demo-vm --namespaces demo -n demo --dry-run > app.yaml yaml [root@localhost VM-DataProtection]# cat app.yaml apiVersion: protect.trident.netapp.io/v1 kind: Application metadata: creationTimestamp: null name: demo-vm namespace: demo spec: includedNamespaces: - namespace: demo # oc create -f app.yaml -n demo
백업 만들기
주문형 백업 만들기
# tp create schedule backup-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 45 --backup-retention 1 -n demo --dry-run>backup-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/backup-schedule1 created
#cat backup-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
creationTimestamp: null
name: backup-schedule1
namespace: demo
spec:
appVaultRef: ontap-s3-appvault
applicationRef: demo-vm
backupRetention: "1"
dayOfMonth: ""
dayOfWeek: ""
enabled: true
granularity: Hourly
hour: ""
minute: "45"
recurrenceRule: ""
snapshotRetention: "0"
status: {}
# oc create -f backup-schedule-demo-vm.yaml -n demo
# tp create backup demo-vm-backup-on-demand --app demo-vm --appvault ontap-s3-appvault -n demo Backup "demo-vm-backup-on-demand" created.
백업 일정 만들기
# tp create schedule backup-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 45 --backup-retention 1 -n demo --dry-run>backup-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/backup-schedule1 created
#cat backup-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
creationTimestamp: null
name: backup-schedule1
namespace: demo
spec:
appVaultRef: ontap-s3-appvault
applicationRef: demo-vm
backupRetention: "1"
dayOfMonth: ""
dayOfWeek: ""
enabled: true
granularity: Hourly
hour: ""
minute: "45"
recurrenceRule: ""
snapshotRetention: "0"
status: {}
# oc create -f backup-schedule-demo-vm.yaml -n demo
백업에서 복원
생성한 모든 백업에서 VM을 동일한 네임스페이스 또는 다른 네임스페이스로 복원할 수 있습니다. 각 복원 작업의 예를 보여드리겠습니다.
이제 백업에서 VM을 데모 네임스페이스로 복원합니다.
# tp create bir demo-fedora-restore --backup demo/demo-vm-backup-on-demand -n demo --dry-run>vm-demo-bir.yaml
# cat vm-demo-bir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
annotations:
protect.trident.netapp.io/max-parallel-restore-jobs: "25"
creationTimestamp: null
name: demo-fedora-restore
namespace: demo
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/demo-vm-backup-on-demand_f6af3513-9739-480e-88c7-4cca45808a80
appVaultRef: ontap-s3-appvault
resourceFilter: {}
status:
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo-bir.yaml -n demo
backupinplacerestore.protect.trident.netapp.io/demo-fedora-restore created
VM, Pod 및 PVC가 동일한 데모 네임스페이스에 생성되었는지 확인합니다.
다른 네임스페이스로 복원
# tp create br demo2-fedora-restore --backup demo/hourly-4c094-20250312154500 --namespace-mapping demo:demo2 -n demo2 --dry-run>vm-demo2-br.yaml
# cat vm-demo2-br.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
annotations:
protect.trident.netapp.io/max-parallel-restore-jobs: "25"
creationTimestamp: null
name: demo2-fedora-restore
namespace: demo2
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/hourly-4c094-20250312154500_aaa14543-a3fa-41f1-a04c-44b1664d0f81
appVaultRef: ontap-s3-appvault
namespaceMapping:
- destination: demo2
source: demo
resourceFilter: {}
status:
conditions: null
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo2-br.yaml -n demo2
이전 예제에서는 네임스페이스 내에서 단일 VM을 백업하는 방법을 보여드렸습니다. 백업에 전체 네임스페이스를 포함함으로써 해당 VM과 연결된 모든 리소스가 캡처되었습니다. 하지만 동일한 네임스페이스 내에 여러 VM이 있는 경우에는 어떻게 될까요? 특정 VM과 해당 리소스를 선택적으로 백업한 후, 올바른 백업에서 복원하려면 어떻게 해야 할까요?
제가 방법을 알려드리겠습니다.
동일한 네임스페이스(demo)에 다른 VM(demo-centos)을 생성합니다.
이제 demo-centos VM에 대한 VM과 관련 리소스에 레이블을 지정합니다.
demo-centos VM과 해당 PVC에만 레이블이 지정되었음을 확인할 수 있습니다.
특정 VM에 대한 앱만 만들기 (레이블 선택기 사용)
# tp create app demo-centos-app --namespaces 'demo(category=protect-demo-centos)' -n demo --dry-run>demo-centos-app.yaml
# cat demo-centos-app.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
creationTimestamp: null
name: demo-centos-app
namespace: demo
spec:
includedNamespaces:
- labelSelector:
matchLabels:
category: protect-demo-centos
namespace: demo
status:
conditions: null
# oc create -f demo-centos-app.yaml -n demo
application.protect.trident.netapp.io/demo-centos-app created앱(demo-centos-app)을 사용하여 특정 VM의 백업만 생성합니다.
# tp create backup demo-centos-backup-on-demand --app demo-centos-app --appvault ontap-s3-appvault -n demo Backup "demo-centos-backup-on-demand" created.
이 백업에서 복원합니다(demo-centos만 복원됨)
이제 demo-centos VM을 삭제하고 방금 만든 백업에서 복원합니다.
[root@localhost VM-DataProtection]# tp create bir demo-centos-restore --backup demo/demo-centos-backup-on-demand -n demo --dry-run>demo-centos-bir.yaml
[root@localhost VM-DataProtection]# cat demo-centos-bir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
annotations:
protect.trident.netapp.io/max-parallel-restore-jobs: "25"
creationTimestamp: null
name: demo-centos-restore
namespace: demo
spec:
appArchivePath: demo-centos-app_a7f2c791-f450-4245-871e-aa33cb4ffbf5/backups/demo-centos-backup-on-demand_e8ff8965-0c37-46ac-966f-97ed378c73f8
appVaultRef: ontap-s3-appvault
resourceFilter: {}
status:
postRestoreExecHooksRunResults: null
state: ""
[root@localhost VM-DataProtection]# oc create -f demo-centos-bir.yaml -n demo
backupinplacerestore.protect.trident.netapp.io/demo-centos-restore created
demo-centos VM과 해당 PVC가 복구되었는지 확인하세요.
결론
이 블로그에서는 Trident Protect의 강력한 백업 및 복원 기능을 사용하여 OpenShift Virtualization에서 VM을 보호하는 방법을 살펴보았습니다. 백업을 생성하고 VM을 복원하는 방법과 레이블 선택기를 사용하여 네임스페이스 내의 특정 VM을 선택적으로 백업하고 복원하는 방법을 알아보았습니다. 자세한 내용은 Trident Protect 설명서 를 참조하십시오 . 또한 OpenShift Virtualization VM의 장애 조치(Failover) 및 장애 복구(Failback) 시나리오에 대한 지침은 솔루션 설명서를 참조하십시오 .