OpenShift를 사용하여 가상 머신을 백업하고 복원하는 방법

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2024/08/21/how-back-and-restore-virtual-machines-openshift#backups_and_restores

Red Hat OpenShift Virtualization 으로의 이전을 계획 중이라면 , 기존 가상화 플랫폼 과 유사한 기능을 입증하기 위해 확인해야 할 기능 목록이 있을 수 있습니다 . 이 문서에서는 그러한 기능 중 하나인 가상 머신 백업 및 복원에 대해 안내합니다. 이 작업을 간소화할 수 있는 여러 파트너 제품이 있지만, 이 단계에서는 Red Hat에서 제공하는 OpenShift API for Data Protection을 바로 사용하는 빠른 방법을 보여줍니다 .

준비

이 지침에서는 OpenShift 클러스터에 대한 관리 권한이 있다고 가정합니다. 이 클러스터에 다음 세 가지 Operator를 설치하고 구성하세요.

  • Red Hat OpenShift Virtualization : 이 지침을 참조하여 OpenShift Virtualization을 설치하고 HyperConverged Operator 인스턴스를 생성하세요.
  • OpenShift APIs for Data Protection(OADP) : OADP를 설치하려면 이 지침을 참조하세요 .
  • MinIO : 이 단계에서는 실행 중인 클러스터에서 비운영 백업 및 복원을 위해 MinIO가 로컬에 설치되어 있다고 가정합니다. 명령줄이나 OpenShift 콘솔에서 MinIO 운영자를 설치하고 테넌트와 버킷을 구성하려면 이 지침을 참조하거나 , 다음 섹션을 읽고 MinIO 운영자 관리 인터페이스를 사용하세요. MinIO 운영자를 사용할 수 없는 경우, 이 지침 의 “MinIO 서버 설치” 섹션을  독립형 MinIO 스토리지 설정 방법의 예로 사용할 수도 있습니다. 어떤 경우든 액세스 키 ID와 비밀 키를 기록해 두세요. 이 예에서 테넌트 이름은 “minio”, 네임스페이스는 “oadp-minio-tenant”, 새 버킷 이름은 “oadp-bucket”입니다.

MinIO 콘솔 구성(선택 사항)

MinIO 운영자는 스토리지 프로비저닝 및 구성, 버킷 생성 및 탐색에 사용할 수 있는 편리한 관리 콘솔을 제공합니다. 사용해 보려면 먼저 MinIO 콘솔 포드를 찾아 다음을 사용하여 포트를 전달하세요 oc.

$ oc get pod -n minio-operator -l app=console -o jsonpath='{.items..metadata.name}'
console-f5db76d94-5qtfc
$ oc port-forward -n minio-operator console-f5db76d94-5qtfc 9443:9443
Forwarding from  127.0.0.1:9443 -> 9443
Forwarding from  [::1]:9443 -> 9443

브라우저에서  https://localhost:9443 에 로그인하면 로그인 토큰을 입력하라는 메시지가 표시됩니다. 다른 터미널에서 다음과 같이 토큰을 받으세요.

$ oc get secret -n minio-operator console-sa-secret -o jsonpath={.data.token} |  base64 -d
eyJhbGciOiJSUzI1NiIsImtpZCI6IjB2RVRlSVdFdnNWdGtoS3pQSHZESm5BSXdtQlg3WER0MzE4………

매우 긴 문자열이므로 “JWT” ​​상자에 직접 붙여넣으세요. 테넌트를 생성하기 전에 테넌트를 저장할 네임스페이스를 생성하고, 허용 가능한 보조 그룹에서 사용자 ID를 가져오세요.

$ oc new-project oadp-minio-tenant
Now using project "oadp-minio-tenant" on server
"https://api.ocp.captive.lab:6443".
$ oc get namespace oadp-minio-tenant -o jsonpath='{.metadata.annotations.openshift\.io/sa\.scc\.supplemental-groups}' | cut -d / -f 1
1000760000

이제 MinIO 콘솔에서 테넌트를 생성할 수 있습니다. “구성” 섹션에서 “보안 컨텍스트” 옵션을 활성화하고 이 ID를 “사용자 권한으로 실행”, “그룹 권한으로 실행” 및 “FsGroup” 필드에 복사하세요. 이 예시에서는 단일 노드 OpenShift 클러스터에서 실행되므로 서버 수를 1로 줄였습니다. 테넌트는 단일 노드에서 포드를 독립적으로 예약할 수 없으므로 기본값인 4개로 시작되지 않을 수 있습니다. 테넌트 생성에는 몇 분 정도 걸릴 수 있지만, “초기 사용자 프로비저닝”에서 멈춘 것처럼 보이면 MinIO 운영자 포드를 다시 시작해야 할 수 있습니다.

 $ oc delete pod -n minio-operator -l name=minio-operator
pod "minio-operator-bb56876d7-mjzsr" deleted

가상 머신 준비

 아직 단일 가상 머신(VM)을 생성하지 않았다면 이 블로그 게시물을 참조하세요 . OADP가 VM을 제대로 백업하고 복원할 수 있는지 확인하려면 복원 완료 후 확인할 수 있는 테스트 데이터를 만드는 것이 좋습니다. 한 가지 빠른 방법은 다음과 같이 VM 내부에서 난수를 저장하는 것입니다.

[fedora@testvm ~]$ dd if=/dev/urandom of=verification.test bs=1M count=512 status=progress
349175808 bytes (349 MB, 333 MiB) copied, 1 s, 349 MB/s
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.53152 s, 351 MB/s
[fedora@testvm ~]$ sha1sum verification.test
481c9d852b3679a5525d542ec0ce4784ab4bf188 verification.test

복원 후 VM이 부팅되고 동일한 데이터가 포함된 동일한 파일이 표시됩니다. 이 게시물의 나머지 부분에서는 VM의 이름은 testvm 네임스페이스 oadp-test에 있다고 가정합니다 .

MinIO를 위한 OADP 구성

이제 OADP가 이전에 구성된 MinIO 스토리지를 가리키도록 하는 DataProtectionApplication (DPA) 를 생성할 차례입니다 . DataProtectionApplication을 생성하면 자동으로 BackupStorageLocation이 생성됩니다.

OADP에 MinIO 시크릿 제공

첫 번째 단계는 OADP에 MinIO 로그인 방법을 알려주는 것입니다. MinIO 버킷의 액세스 자격 증명을 저장할 파일을 만들고, 키 필드를 적절히 입력하세요. MinIO 콘솔에서 credentials.json을 다운로드한 경우 , accessKeysecretKey 필드에 저장됩니다 .

$ cat <<EOF > minio-credentials
[minio-profile]
aws_access_key_id=<insert access key here>
aws_secret_access_key=<insert secret key here>
EOF

이 파일을 사용하여 다음과 같이 openshift-adp 네임스페이스에 시크릿을 생성합니다 .

$ oc create secret generic minio-credentials -n openshift-adp --from-file cloud=minio-credentials

DataProtectionApplication 만들기

이제 클러스터의 값과 일치하는 값으로 필드가 설정된 DataProtectionApplication를 만듭니다.

$ cat <<EOF > dpa.yaml
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: dpa
  namespace: openshift-adp
spec:
  backupLocations:
    - velero:
        provider: aws
        config:
          profile: minio-profile
          s3ForcePathStyle: 'true'
          s3Url: 'https://minio.oadp-minio-tenant.svc.cluster.local'
          region: anywhere
          insecureSkipTLSVerify: 'true'
        credential:
          key: cloud
          name: minio-credentials
        default: true
        objectStorage:
          bucket: oadp-bucket
          prefix: oadp-vm-test
  configuration:
    velero:
      defaultPlugins:
        - csi
        - openshift
        - aws
        - kubevirt
EOF
$ oc create -f dpa.yaml

주의해야 할 사항:

  • Amazon 서비스에 실제로 연결되어 있지 않더라도 공급자 필드는 여전히 aws로 설정되어 있습니다. MinIO는 S3와 API 호환되므로 OADP는 동일한 aws 플러그인을 사용하여 액세스합니다.
  • spec.configuration.velero.defaultPlugins 목록에서 kubevirt 플러그인을 사용하는 것은 스냅샷을 찍는 동안 데이터 일관성을 보장하기 위해 게스트 파일 시스템을 동결하는 데 필요합니다.
  • csi가상 머신을 백업하는 데 필요한 플러그인 목록에 있는 플러그인을 사용합니다 .
  • 프로필 minio-profile은 위 파일의 제목과 일치해야 합니다 minio-credentials.
  • insecureSkipTLSVerify 옵션과 HTTPS URL—MinIO 오퍼레이터는 기본적으로 HTTPS를 설정하며, 테스트하는 가장 쉬운 방법은 TLS 검증을 건너뛰는 것입니다. 올바른 방법으로 설정하려면 objectStorage 섹션 아래에 caCert 필드를 설정하고 base64로 인코딩된 인증서를 포함하세요.
  • MinIO에 사용되는 URL에는 테넌트 이름이 포함되므로, 선택한 테넌트 이름에 따라 DataProtectionApplication에 다른 URL을 제공해야 합니다.

DataProtectionApplication의 상태를 확인하여 올바르게 조정되고 있는지 확인하십시오.

$ oc get dpa dpa -n openshift-adp -o jsonpath='{.status}'
{"conditions":[{"lastTransitionTime":"2024-05-21T16:52:35Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}

또한 BackupStorageLocation의 상태를 확인하세요 . BSL의 이름은 DPA의 이름에 다음 -1이 추가된 형태입니다.

$ oc get bsl -n openshift-adp
NAME PHASE LAST VALIDATED AGE DEFAULT
dpa-1 Available 2s 22h true

다음 단계로 진행하기 전에 DPA를 조정됨으로 표시하고 BSL을 사용 가능으로 표시해야 합니다.

백업 및 복원

백업 시 VM 볼륨은 CSI를 통해 스냅샷을 생성하여 저장됩니다. CSI 백업은 VM 데이터 자체의 사본을 저장하는 것이 아니라, VM이 제거되고 복원될 때 동일한 볼륨에 대한 액세스를 재설정하는 데 사용할 수 있는 Kubernetes 객체만 저장합니다. 실제 VM 데이터를 백업해야 하는 경우, Data Mover 기능을 활성화하여 CSI 백업을 구성해야 합니다. 이렇게 하면 VM 데이터가 백업 스토리지에 업로드됩니다. 이 지침에서는 CSI만 사용하는 백업과 Data Mover를 활성화한 백업을 차례로 설명합니다.

CSI

DPA는 이전 섹션에서 CSI 전용 백업에 대해 이미 구성되어 있으므로 백업 생성으로 바로 진행할 수 있습니다.

백업 생성

VM의 네임스페이스로 CRD를 생성하여 백업을 시작합니다.

$ cat <<EOF > backup.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
  name: testvm-backup
  namespace: openshift-adp
spec:
  includedNamespaces:
    - oadp-test
  storageLocation: dpa-1
EOF
$ oc create -f backup.yaml

백업이 각 단계를 거치며 진행되면서 모든 내용을 수집하여 백업 저장소에 넣는 모습을 지켜보세요.

$ oc get backup testvm-backup -n openshift-adp -o yaml -o jsonpath='{.status.phase}{"\n"}' -w
InProgress
InProgress
InProgress
Finalizing
Completed

이제 VM을 제거할 수 있습니다.

$ oc delete virtualmachine testvm -n oadp-test
virtualmachine.kubevirt.io "testvm" deleted

MinIO 콘솔을 열었다면 버킷을 탐색하여 백업에 포함된 항목을 확인할 수 있습니다. PV가 없고, VM 디스크를 나타낼 만큼 큰 파일도 없습니다. 콘텐츠는 백업 스토리지에 그대로 남아 있으며, 복원된 VM을 해당 콘텐츠에 빠르게 연결할 수 있는 충분한 정보가 포함된 CSI 스냅샷이 있습니다. 이 경우, 클러스터는 LVM 스토리지를 실행 중이며, VolumeSnapshot 항목에는 LVM에 있는 스냅샷의 UUID가 표시됩니다.

$ oc get volumesnapshot velero-testvm-jdmsb -n oadp-test -o jsonpath='{.metadata.annotations.velero\.io/csi-volumesnapshot-handle}{"\n"}'
e58b8c90-77c1-4cd6-98d4-e47cc6fc1eb9

클러스터에 로그인하면 VM 자체가 삭제되었음에도 불구하고 이 스냅샷에 대한 논리 볼륨이 여전히 존재한다는 것을 알 수 있습니다.

$ ssh core@ocp
[core@ocp ~]$ sudo lvdisplay vg1/e58b8c90-77c1-4cd6-98d4-e47cc6fc1eb9
--- Logical volume ---
LV Path                /dev/vg1/e58b8c90-77c1-4cd6-98d4-e47cc6fc1eb9
LV Name                e58b8c90-77c1-4cd6-98d4-e47cc6fc1eb9
VG Name                vg1
LV UUID                dFGbkd-ovgT-3ctK-3i5S-d5JK-utv4-6lgJPN
LV Write Access        read only
LV Creation host, time ocp, 2024-07-07 00:40:03 +0000
LV Pool name           thin-pool-1
LV Status              available
# open                 0
LV Size                30.00 GiB
Mapped size            16.11%
Current LE             7680
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     8192
Block device           253:15

복원을 만들기

VM을 삭제한 후 방금 저장한 백업을 가리키는 복원을 만듭니다.

$ cat <<EOF > restore.yaml
apiVersion: velero.io/v1
kind: Restore
metadata:
  name: testvm-restore
  namespace: openshift-adp
spec:
  backupName: testvm-backup
  restorePVs: true
EOF
$ oc create -f restore.yaml

restorePVs 플래그 사용에 주목하세요! 이전과 마찬가지로 상태를 살펴보세요.

$ oc get restore testvm-restore -n openshift-adp -o yaml -o jsonpath='{.status.phase}{"\n"}' -w
InProgress
InProgress
InProgress
Completed

이제 VM에 ​​로그인하면 동일한 테스트 데이터가 복원된 것을 볼 수 있습니다.

[fedora@testvm ~]$ cat sum.txt
e241d30591670ae0eb2ab58a216d7b24bef9f642 verification.test
[fedora@testvm ~]$ sha1sum verification.test
e241d30591670ae0eb2ab58a216d7b24bef9f642 verification.test

DataMover를 사용한 CSI

이제 실제 VM 디스크 데이터를 포함하도록 백업을 가져오려면 Data Mover를 사용하도록 편집고 DataProtectionApplication를 다시 만들고 구성하세요.

$ oc delete dpa -n openshift-adp dpa
dataprotectionapplication.oadp.openshift.io "dpa" deleted
$ cat <<EOF > dpa.yaml
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: dpa
  namespace: openshift-adp
spec:
  backupLocations:
    - velero:
        provider: aws
        config:
          profile: minio-profile
          s3ForcePathStyle: 'true'
          s3Url: 'https://minio.oadp-minio-tenant.svc.cluster.local'
          region: anywhere
          insecureSkipTLSVerify: 'true'
        credential:
          key: cloud
          name: minio-credentials
        default: true
        objectStorage:
          bucket: oadp-bucket
          prefix: oadp-vm-test
  configuration:
    nodeAgent:
      enable: true
      uploaderType: kopia
    velero:
      defaultPlugins:
        - csi
        - openshift
        - aws
        - kubevirt
EOF
$ oc create -f dpa.yaml

여기서 가장 큰 차이점은 nodeAgent 구성 추가입니다. 백업 및 복원 중에 대상 볼륨의 스냅샷인 PV가 연결된 Pod가 생성되어 VM 데이터를 복사할 수 있습니다.

백업을 만들기

이를 시도하려면 다른 백업을 만들고 snapshotMoveData 플래그를 설정해야 합니다.

$ cat <<EOF > backup.yaml
apiVersion: velero.io/v1
kind: Backup
metadata:
  name: testvm-backup-datamover
  namespace: openshift-adp
spec:
  snapshotMoveData: true
  includedNamespaces:
    - oadp-test
  storageLocation: dpa-1
EOF
$ oc create -f backup.yaml

이 작업은 CSI 전용 백업보다 시간이 조금 더 걸립니다.

$ oc get backup testvm-backup-datamover -n openshift-adp -o yaml -o jsonpath='{.status.phase}{"\n"}' -w
InProgress
InProgress
InProgress
WaitingForPluginOperations
Finalizing
Completed

MinIO 콘솔을 실행했다면 버킷에서 oadp-vm-test 접두사 안에 “kopia” 디렉터리가 있는지 확인하세요. 이 디렉터리에는 전체 VM을 복원하는 데 사용될 수 있을 것 같은 의심스러운 대용량 파일들이 많이 포함되어 있을 것입니다.

다시 한번 VM을 삭제하고 복원을 시도해 보세요.

$ oc delete virtualmachine testvm -n oadp-test
virtualmachine.kubevirt.io "testvm" deleted

복원을 만들기

새로운 복원은 이전과 사실상 동일하며, Data Mover 복원을 나타내는 데 특별한 플래그가 필요하지 않습니다.

$ cat <<EOF > restore.yaml
apiVersion: velero.io/v1
kind: Restore
metadata:
  name: testvm-restore-datamover
  namespace: openshift-adp
spec:
  backupName: testvm-backup-datamover
  restorePVs: true
EOF
$ oc create -f restore.yaml

진행 상황을 확인하세요:

$ oc get restore testvm-restore-datamover -n openshift-adp -o jsonpath='{.status.phase}{"\n"}' -w
InProgress
InProgress
InProgress
WaitingForPluginOperations
Completed

몇 분 후 VM이 시작됩니다. VM에 다시 로그인하여 데이터를 확인하세요.

[fedora@testvm ~]$ cat sum.txt
e241d30591670ae0eb2ab58a216d7b24bef9f642  verification.test
[fedora@testvm ~]$ sha1sum verification.test
e241d30591670ae0eb2ab58a216d7b24bef9f642  verification.test

결론

이 단계들은 비운영 클러스터 구성에서 VM 백업 및 복원을 테스트하는 매우 간단한 방법을 보여주었습니다. 이 글을 읽고 나면 다음과 같은 내용을 이해하셨기를 바랍니다.

  • OpenShift가 가상 머신에 대한 백업 및 복원 기능을 제공할 수 있다는 확신.
  • VM 백업 및 복원을 위해 “데이터 무버” 옵션이 제공하는 기능에 대한 더 명확한 아이디어.

OADP는 저장 및 구성을 위한 훨씬 더 많은 옵션을 제공합니다. 설명서를 참조  하고 기능을 시험해 보시기 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

가상 머신 마이그레이션 전에 꼭 물어봐야 할 9가지 필수 질문: 과제, 전략 및 실제 통찰력

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.출처: https://www.redhat.com/en/blog/9-essential-questions-ask-virtual-machine-migration-challenges-strategies-and-real-world-insights 가상화 환경이 발전함에 따라 많은 고객이 기존 가상화…