14.3. 가상 머신 백업
OADP(OpenShift API for Data Protection) Backup
CR(사용자 정의 리소스)을 생성하여 VM(가상 머신) 을 백업합니다.
Backup
CR은 다음 작업을 수행합니다.
- Multicloud Object Gateway, Noobaa 또는 Minio와 같은 S3 호환 개체 스토리지에 아카이브 파일을 만들어 OpenShift Virtualization 리소스를 백업합니다.
다음 옵션 중 하나를 사용하여 VM 디스크를 백업합니다.
- Ceph RBD 또는 Ceph FS와 같은 CSI(Container Storage Interface) 클라우드 스토리지의 CSI(Container Storage Interface) 스냅샷
- 오브젝트 스토리지의 Restic 파일 시스템 백업.
OADP는 백업 작업 전에 VM 파일 시스템을 정지하고 백업이 완료되면 이를 해제 해제하는 백업 후크를 제공합니다.
kubevirt-controller
는 백업 작업 전후에 Velero가 virt-freezer
바이너리를 실행할 수 있는 주석을 사용하여 virt-launcher
Pod를 생성합니다.
freeze
및 unfreeze
API는 VM 스냅샷 API의 하위 리소스입니다. 자세한 내용은 가상 머신 스냅샷 정보를 참조하십시오.
Backup
CR에 후크를 추가하여 백업 작업 전후에 특정 VM에서 명령을 실행할 수 있습니다.
Backup
CR 대신 Schedule
CR 을 생성하여 백업을 예약합니다.
14.3.1. Backup CR 생성
Backup CR(사용자 정의 리소스)을 생성하여 Kubernetes 이미지, 내부 이미지 및 PV(영구 볼륨)를 백업
합니다.
사전 요구 사항
- OADP(OpenShift API for Data Protection) Operator를 설치해야 합니다.
-
DataProtectionApplication
CR은Ready
상태여야 합니다. 백업 위치 사전 요구 사항:
- Velero용으로 S3 오브젝트 스토리지가 구성되어 있어야 합니다.
-
DataProtectionApplication
CR에 백업 위치가 구성되어 있어야 합니다.
스냅샷 위치 사전 요구 사항:
- 클라우드 공급자에는 기본 스냅샷 API가 있거나 CSI(Container Storage Interface) 스냅샷을 지원해야 합니다.
-
CSI 스냅샷의 경우 CSI 드라이버를 등록하려면
VolumeSnapshotClass
CR을 생성해야 합니다. -
DataProtectionApplication
CR에 구성된 볼륨 위치가 있어야 합니다.
절차
다음 명령을 입력하여
backupStorageLocations
CR을 검색합니다.$ oc get backupStorageLocations -n openshift-adp
출력 예
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
다음 예와 같이
Backup
CR을 생성합니다.apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> labels: velero.io/storage-location: default namespace: openshift-adp spec: hooks: {} includedNamespaces: - <namespace> 1 includedResources: [] 2 excludedResources: [] 3 storageLocation: <velero-sample-1> 4 ttl: 720h0m0s labelSelector: 5 matchLabels: app=<label_1> app=<label_2> app=<label_3> orLabelSelectors: 6 - matchLabels: app=<label_1> app=<label_2> app=<label_3>
- 1
- 백업할 네임스페이스의 배열을 지정합니다.
- 2
- 선택 사항: 백업에 포함할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우 'po')이거나 정규화될 수 있습니다. 지정하지 않으면 모든 리소스가 포함됩니다.
- 3
- 선택 사항: 백업에서 제외할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우 'po')이거나 정규화될 수 있습니다.
- 4
backupStorageLocations
CR의 이름을 지정합니다.- 5
- 지정된 라벨이 모두 있는 백업 리소스의 {key,value} 쌍의 맵입니다.
- 6
- 지정된 라벨이 하나 이상 있는 백업 리소스의 {key,value} 쌍의 맵입니다.
Backup
CR의 상태가Completed
인지 확인합니다.$ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'
14.3.1.1. CSI 스냅샷을 사용하여 영구 볼륨 백업
Backup CR을 생성하기 전에 클라우드 스토리지의 VolumeSnapshotClass
CR(사용자 정의 리소스)을 편집하여 CSI(Container Storage Interface) 스냅샷을 사용하여 영구 볼륨을 백업
합니다.
사전 요구 사항
- 클라우드 공급자는 CSI 스냅샷을 지원해야 합니다.
-
DataProtectionApplication
CR에서 CSI를 활성화해야 합니다.
절차
metadata.labels.velero.io/csi-volumesnapshot-class: "true"
키-값 쌍을VolumeSnapshotClass
CR에 추가합니다.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: <volume_snapshot_class_name> labels: velero.io/csi-volumesnapshot-class: "true" driver: <csi_driver> deletionPolicy: Retain
이제 Backup
CR을 생성할 수 있습니다.
14.3.1.2. Restic을 사용하여 애플리케이션 백업
Restic을 사용하여 Kubernetes 리소스, 내부 이미지 및 영구 볼륨을 백업하여 Backup
CR(사용자 정의 리소스)을 편집합니다.
DataProtectionApplication
CR에서 스냅샷 위치를 지정할 필요가 없습니다.
Restic은 hostPath
볼륨 백업을 지원하지 않습니다. 자세한 내용은 추가 Rustic 제한 사항을 참조하십시오.
사전 요구 사항
- OADP(OpenShift API for Data Protection) Operator를 설치해야 합니다.
-
DataProtectionApplication
CR에서spec.configuration.restic.enable
을false
로 설정하여 기본 Restic 설치를 비활성화할 수 없습니다. -
DataProtectionApplication
CR은Ready
상태여야 합니다.
절차
다음 예와 같이
Backup
CR을 편집합니다.apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> labels: velero.io/storage-location: default namespace: openshift-adp spec: defaultVolumesToFsBackup: true 1 ...
- 1
- OADP 버전 1.2 이상에서
spec
블록 내에defaultVolumesToFsBackup: true
설정을 추가합니다. OADP 버전 1.1에서defaultVolumesToRestic: true
를 추가합니다.
14.3.1.3. 백업 후크 생성
Backup CR(사용자 정의 리소스)을 편집하여 Pod의 컨테이너에서 명령을 실행하는 백업
후크를 생성합니다.
포드를 백업하기 전에 사전 후크가 실행됩니다. 백업 후 후크가 실행됩니다.
절차
다음 예와 같이
Backup
CR의spec.hooks
블록에 후크를 추가합니다.apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> namespace: openshift-adp spec: hooks: resources: - name: <hook_name> includedNamespaces: - <namespace> 1 excludedNamespaces: 2 - <namespace> includedResources: [] - pods 3 excludedResources: [] 4 labelSelector: 5 matchLabels: app: velero component: server pre: 6 - exec: container: <container> 7 command: - /bin/uname 8 - -a onError: Fail 9 timeout: 30s 10 post: 11 ...
- 1
- 선택 사항: 후크가 적용되는 네임스페이스를 지정할 수 있습니다. 이 값을 지정하지 않으면 후크가 모든 네임스페이스에 적용됩니다.
- 2
- 선택 사항: 후크가 적용되지 않는 네임스페이스를 지정할 수 있습니다.
- 3
- 현재 Pod는 후크를 적용할 수 있는 유일한 지원 리소스입니다.
- 4
- 선택 사항: 후크가 적용되지 않는 리소스를 지정할 수 있습니다.
- 5
- 선택 사항: 이 후크는 레이블과 일치하는 오브젝트에만 적용됩니다. 이 값을 지정하지 않으면 후크가 모든 네임스페이스에 적용됩니다.
- 6
- 백업 전에 실행할 후크 배열입니다.
- 7
- 선택 사항: 컨테이너를 지정하지 않으면 Pod의 첫 번째 컨테이너에서 명령이 실행됩니다.
- 8
- 이는 추가되는 init 컨테이너의 진입점입니다.
- 9
- 오류 처리에 허용되는 값은
Fail
및Continue
입니다. 기본값은Fail
입니다. - 10
- 선택 사항: 명령이 실행될 때까지 대기하는 시간입니다. 기본값은
30s
입니다. - 11
- 이 블록은 백업 후 실행할 후크 배열과 pre-backup 후크와 동일한 매개변수를 정의합니다.
14.3.2. 백업 예약
Backup
CR 대신 Schedule
CR(사용자 정의 리소스)을 생성하여 백업을 예약합니다.
다른 백업이 생성되기 전에 백업이 완료될 수 있도록 백업 일정에 충분한 시간을 남겨 둡니다.
예를 들어 네임스페이스의 백업이 일반적으로 10분 정도 걸리는 경우 15분마다 백업을 더 자주 예약하지 마십시오.
사전 요구 사항
- OADP(OpenShift API for Data Protection) Operator를 설치해야 합니다.
-
DataProtectionApplication
CR은Ready
상태여야 합니다.
절차
backupStorageLocations
CR을 검색합니다.$ oc get backupStorageLocations -n openshift-adp
출력 예
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
다음 예와 같이
Schedule
CR을 생성합니다.$ cat << EOF | oc apply -f - apiVersion: velero.io/v1 kind: Schedule metadata: name: <schedule> namespace: openshift-adp spec: schedule: 0 7 * * * 1 template: hooks: {} includedNamespaces: - <namespace> 2 storageLocation: <velero-sample-1> 3 defaultVolumesToFsBackup: true 4 ttl: 720h0m0s EOF
- 1
- 백업을 예약하는 Cron 표현식(예:
0 7 * * *
)은 7:00에 매일 백업을 수행합니다. - 2
- 백업할 네임스페이스의 배열입니다.
- 3
backupStorageLocations
CR의 이름입니다.- 4
- 선택 사항: OADP 버전 1.2 이상에서 Restic을 사용하여 볼륨 백업을 수행할 때
defaultVolumesToFsBackup: true
key-value 쌍을 구성에 추가합니다. OADP 버전 1.1에서 Restic을 사용하여 볼륨을 백업할 때defaultVolumesToRestic: true
key-value 쌍을 추가합니다.
예약된 백업이 실행된 후
Schedule
CR의 상태가Completed
인지 확인합니다.$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'