4.4. 백업 및 복원
4.4.1. 애플리케이션 백업
Backup CR(사용자 정의 리소스)을 생성하여 애플리케이션을 백업합니다. Backup CR 생성을 참조하십시오.
Backup CR은 Kubernetes 리소스 및 내부 이미지, S3 오브젝트 스토리지, 클라우드 공급자가 기본 스냅샷 API 또는 CSI(Container Storage Interface)를 사용하는 경우 OpenShift Data Foundation 4와 같은 스냅샷을 생성하는 경우 S3 오브젝트 스토리지, 영구 볼륨(PV)에 대한 백업 파일을 생성합니다.
CSI 볼륨 스냅샷에 대한 자세한 내용은 CSI 볼륨 스냅샷을 참조하십시오.
S3 스토리지의 CloudStorage API는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
-
클라우드 공급자에 기본 스냅샷 API가 있거나 CSI 스냅샷을 지원하는 경우
BackupCR은 스냅샷을 생성하여 PV(영구 볼륨)를 백업합니다. CSI 스냅샷 작업에 대한 자세한 내용은 CSI 스냅샷을 사용하여 영구 볼륨 백업을 참조하십시오. - 클라우드 공급자가 스냅샷을 지원하지 않거나 애플리케이션이 NFS 데이터 볼륨에 있는 경우 Restic을 사용하여 백업을 생성할 수 있습니다. Restic을 사용하여 애플리케이션 백업을 참조하십시오.
OADP(OpenShift API for Data Protection)는 다른 소프트웨어에 의해 생성된 볼륨 스냅샷 백업 기능을 지원하지 않습니다.
백업 작업 전이나 후에 명령을 실행하기 위해 백업 후크를 생성할 수 있습니다. 백업 후크 생성 을 참조하십시오.
Backup CR 대신 Schedule CR을 생성하여 백업을 예약할 수 있습니다. 백업 일정을 참조하십시오.
4.4.1.1. 백업 CR 생성
Backup CR(사용자 정의 리소스)을 생성하여 Kubernetes 이미지, 내부 이미지, PV(영구 볼륨)를 백업합니다.
사전 요구 사항
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplicationCR은Ready상태에 있어야 합니다. 백업 위치 사전 요구 사항:
- Velero에 대해 구성된 S3 오브젝트 스토리지가 있어야 합니다.
-
DataProtectionApplicationCR에 구성된 백업 위치가 있어야 합니다.
스냅샷 위치 사전 요구 사항:
- 클라우드 공급자에는 기본 스냅샷 API가 있거나 CSI(Container Storage Interface) 스냅샷을 지원해야 합니다.
-
CSI 스냅샷의 경우 CSI 드라이버를 등록하려면
VolumeSnapshotClassCR을 생성해야 합니다. -
DataProtectionApplicationCR에 구성된 볼륨 위치가 있어야 합니다.
절차
다음 명령을 입력하여
backupStorageLocationsCR을 검색합니다.$ oc get backupStorageLocations -n openshift-adp
출력 예
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
다음 예와 같이
BackupCR을 생성합니다.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'의 경우')이거나 정규화된 것일 수 있습니다. 지정하지 않으면 모든 리소스가 포함됩니다.
- 3
- 선택 사항: 백업에서 제외할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우')이거나 정규화된 것일 수 있습니다.
- 4
backupStorageLocationsCR의 이름을 지정합니다.- 5
- 지정된 라벨이 모두 있는 백업 리소스의 {key,value} 쌍의 맵입니다.
- 6
- 지정된 라벨이 하나 이상 있는 백업 리소스의 {key,value} 쌍의 맵입니다.
BackupCR의 상태가Completed인지 확인합니다.$ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'
4.4.1.2. CSI 스냅샷을 사용하여 영구 볼륨 백업
Backup CR을 생성하기 전에 클라우드 스토리지의 VolumeSnapshotClass CR(사용자 정의 리소스)을 편집하여 CSI(Container Storage Interface) 스냅샷을 사용하여 영구 볼륨을 백업합니다.
사전 요구 사항
- 클라우드 공급자는 CSI 스냅샷을 지원해야 합니다.
-
DataProtectionApplicationCR에서 CSI를 활성화해야 합니다.
절차
volume
ClassCR에metadata.labels.velero.io/csi-volumesnapshot-class: "true"키-값 쌍을 추가합니다.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을 생성할 수 있습니다.
4.4.1.3. Restic을 사용하여 애플리케이션 백업
Backup CR(사용자 정의 리소스)을 편집하여 Restic을 사용하여 Kubernetes 리소스, 내부 이미지 및 영구 볼륨을 백업합니다.
DataProtectionApplication CR에서 스냅샷 위치를 지정할 필요가 없습니다.
Restic은 hostPath 볼륨 백업을 지원하지 않습니다. 자세한 내용은 추가 Restic 제한을 참조하십시오.
사전 요구 사항
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplicationCR에서spec.configuration.restic.enable을false로 설정하여 기본 Restic 설치를 비활성화해서는 안 됩니다. -
DataProtectionApplicationCR은Ready상태에 있어야 합니다.
절차
다음 예와 같이
BackupCR을 편집합니다.apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> labels: velero.io/storage-location: default namespace: openshift-adp spec: defaultVolumesToRestic: true 1 ...- 1
spec블록에defaultVolumesToRestic: true를 추가합니다.
4.4.1.4. CSI 스냅샷에 데이터 Mover 사용
OADP Data Mover를 통해 고객은 CSI(Container Storage Interface) 볼륨 스냅샷을 원격 오브젝트 저장소에 백업할 수 있습니다.
Data Mover가 활성화되면 오류, 실수로 삭제 또는 클러스터 손상이 발생하는 경우 오브젝트 저장소에서 가져온 CSI 볼륨 스냅샷을 사용하여 상태 저장 애플리케이션을 복원할 수 있습니다.
Data Mover 솔루션은volSync의 Restic 옵션을 사용합니다.
data Mover는 CSI 볼륨 스냅샷의 백업 및 복원만 지원합니다.
OADP 1.2에서 VSB(Data Mover VolumeSnapshotBackups ) 및 VolumeSnapshotRestores (VSR)는 VolumeSnapshotMover(VSM)를 사용하여 큐에 추가됩니다. VSM의 성능은 동시에 진행 중 VSB 및 VSR 수를 지정하여 향상됩니다. 모든 비동기 플러그인 작업이 완료되면 백업이 완료된 것으로 표시됩니다.
OADP 1.1 Data Mover는 기술 프리뷰 기능입니다.
OADP 1.2 Data Mover는 기능 및 성능이 크게 개선되었지만 여전히 기술 프리뷰 기능입니다.
OADP Data Mover는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
Red Hat은 ODF CephFS 볼륨을 백업 및 복원하기 위해 OADP 1.2 Data Mover를 사용하는 고객은 성능을 개선하기 위해 OpenShift Container Platform 버전 4.12 이상을 업그레이드하거나 설치하는 것이 좋습니다. OADP Data Mover는 OpenShift Container Platform 버전 4.12 이상에서 CephFS shallow 볼륨을 활용할 수 있으며, 이 볼륨은 백업 시간을 개선할 수 있습니다.
사전 요구 사항
-
StorageClass및VolumeSnapshotClassCR(사용자 정의 리소스)에서 CSI를 지원하는지 확인했습니다. 하나의
volumeSnapshotClassCR에만 주석snapshot.storage.kubernetes.io/is-default-class: true가 있는지 확인했습니다.참고OpenShift Container Platform 버전 4.12 이상에서 이것이 유일한 기본
volumeSnapshotClass인지 확인합니다.-
VolumeSnapshotClassCR의deletionPolicy가Retain으로 설정되어 있는지 확인했습니다. -
하나의
storageClassCR에만 주석storageclass.kubernetes.io/is-default-class: true가 있는지 확인했습니다. -
VolumeSnapshotClassCR에velero.io/csi-volumesnapshot-class: 'true'레이블이 포함되어 있습니다. OADP 네임스페이스에주석이 있는지 확인했습니다.oc annotate --overwrite namespace/openshift-adp volsync.backube/privileged-movers='true'참고OADP 1.1에서 위의 설정은 필수입니다.
OADP 1.2에서는 대부분의 시나리오에서
privileged-movers설정이 필요하지 않습니다. 컨테이너 권한 복원은volsync 사본에 적합해야 합니다. 일부 사용자 시나리오에서는privileged-mover=true설정이 해결되어야 하는 권한 오류가 있을 수 있습니다.OLM(Operator Lifecycle Manager)을 사용하여ECDHESync Operator를 설치했습니다.
참고OADP Data Mover를 사용하려면volSync Operator가 필요합니다.
- OLM을 사용하여 OADP Operator를 설치했습니다.
절차
.yaml파일을 생성하여 Restic 시크릿을 구성합니다.apiVersion: v1 kind: Secret metadata: name: <secret_name> type: Opaque stringData: # The repository encryption key RESTIC_PASSWORD: my-secure-restic-password
- 다음 예와 유사한 DPA CR을 생성합니다. 기본 플러그인에는 CSI가 포함됩니다.
위의 단계의 restic 시크릿 이름을
spec.features.dataMover.credentialName으로 DPA CR에 추가합니다. 이 단계가 완료되지 않으면 기본적으로 시크릿 이름dm-credential.참고이 DPA에서
CSI및VSM은defaultPlugins로 포함됩니다. 또한dataMover.enable플래그도 포함되어 있습니다.DPA(Data Protection Application) CR의 예
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: velero-sample namespace: openshift-adp spec: features: dataMover: enable: true credentialName: <secret-name> maxConcurrentBackupVolumes: "3" 1 maxConcurrentRestoreVolumes: "3" 2 pruneInterval: "14" 3 volumeOptionsForStorageClasses: 4 gp2-csi-copy-1: destinationVolumeOptions: storageClassName: csi-copy-2 sourceVolumeOptions: storageClassName: csi-copy-1 backupLocations: - velero: config: profile: default region: us-east-1 credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <bucket_name> prefix: <bucket-prefix> provider: aws configuration: restic: enable: false velero: defaultPlugins: - openshift - aws - csi - vsm 5- 1
- OADP 1.2만 해당 선택 사항: 백업에 대해 대기열에 추가할 수 있는 스냅샷 수의 상한을 지정합니다. 기본값은 10입니다.
- 2
- OADP 1.2만 해당 선택 사항: 복원을 위해 대기열에 지정할 수 있는 스냅샷 수의 상한을 지정합니다. 기본값은 10입니다.
- 3
- OADP 1.2만 해당 선택 사항: 리포지토리에서 Restic 정리를 실행하는 사이의 일 수를 지정합니다. 정리 작업에서는 데이터를 사용 가능한 공간으로 다시 구성하지만 프로세스의 일부로 중요한 I/O 트래픽을 생성할 수도 있습니다. 이 옵션을 설정하면 더 이상 참조되지 않는 데이터에서 스토리지 소비와 액세스 비용 간의 절충이 가능합니다.
- 4
- OADP 1.2만 해당 선택 사항: 백업 및 복원을 위해 VolumeSync 볼륨 옵션을 지정합니다.
- 5
- OADP 1.2만 해당
OADP Operator는
VolumeSnapshotBackup및VolumeSnapshotRestore두 가지 사용자 지정 리소스 정의(CRD)를 설치합니다.VolumeSnapshotBackupCRD 예apiVersion: datamover.oadp.openshift.io/v1alpha1 kind: VolumeSnapshotBackup metadata: name: <vsb_name> namespace: <namespace_name> 1 spec: volumeSnapshotContent: name: <snapcontent_name> protectedNamespace: <adp_namespace> resticSecretRef: name: <restic_secret_name>- 1
- 볼륨 스냅샷이 존재하는 네임스페이스를 지정합니다.
VolumeSnapshotRestoreCRD의 예apiVersion: datamover.oadp.openshift.io/v1alpha1 kind: VolumeSnapshotRestore metadata: name: <vsr_name> namespace: <namespace_name> 1 spec: protectedNamespace: <protected_ns> 2 resticSecretRef: name: <restic_secret_name> volumeSnapshotMoverBackupRef: sourcePVCData: name: <source_pvc_name> size: <source_pvc_size> resticrepository: <your_restic_repo> volumeSnapshotClassName: <vsclass_name>
다음 단계를 수행하여 볼륨 스냅샷을 백업할 수 있습니다.
백업 CR을 생성합니다.
apiVersion: velero.io/v1 kind: Backup metadata: name: <backup_name> namespace: <protected_ns> 1 spec: includedNamespaces: - <app_ns> storageLocation: velero-sample-1- 1
- Operator가 설치된 네임스페이스를 지정합니다. 기본 네임스페이스는
openshift-adp입니다.
최대 10분 동안 기다린 후 다음 명령을 입력하여
VolumeSnapshotBackupCR 상태가Completed인지 확인합니다.$ oc get vsb -n <app_ns>
$ oc get vsb <vsb_name> -n <app_ns> -o jsonpath="{.status.phase}"스냅샷이 DPA에 구성된 오브젝트 저장소에서 생성됩니다.
참고VolumeSnapshotBackupCR의 상태가실패가 되는 경우 문제 해결을 위한 Velero 로그를 참조하십시오.
다음 단계를 수행하여 볼륨 스냅샷을 복원할 수 있습니다.
-
Velero CSI 플러그인에서 생성한 애플리케이션 네임스페이스 및
volumeSnapshotContent를 삭제합니다. RestoreCR을 생성하고restorePVs를true로 설정합니다.CR
복원예apiVersion: velero.io/v1 kind: Restore metadata: name: <restore_name> namespace: <protected_ns> spec: backupName: <previous_backup_name> restorePVs: true
최대 10분 동안 기다린 후 다음 명령을 입력하여
VolumeSnapshotRestoreCR 상태가Completed인지 확인합니다.$ oc get vsr -n <app_ns>
$ oc get vsr <vsr_name> -n <app_ns> -o jsonpath="{.status.phase}"애플리케이션 데이터와 리소스가 복원되었는지 확인합니다.
참고VolumeSnapshotRestoreCR의 상태가 'Failed'이면 문제 해결 방법은 Velero 로그를 참조하십시오.
-
Velero CSI 플러그인에서 생성한 애플리케이션 네임스페이스 및
4.4.1.5. Ceph 스토리지에서 OADP 1.2 Data Mover 사용
OADP 1.2 Data Mover를 사용하여 CephFS, CephRBD 또는 둘 다 사용하는 클러스터의 애플리케이션 데이터를 백업하고 복원할 수 있습니다.
OADP 1.2 Data Mover는 대규모 환경을 지원하는 Ceph 기능을 활용합니다. 이러한 방법 중 하나는 OpenShift Container Platform 4.12 이상에서 사용할 수 있는 단순 복사 방법입니다. 이 기능은 소스 PVC(영구 볼륨 클레임)에 있는 것 이외의 StorageClass 및 AccessMode 리소스 백업 및 복원을 지원합니다.
CephFS shallow copy 기능은 백업 기능입니다. 복원 작업의 일부가 아닙니다.
4.4.1.5.1. Ceph 스토리지와 함께 OADP 1.2 Data Mover를 사용하기 위한 사전 요구 사항
다음 사전 요구 사항은 Ceph 스토리지를 사용하는 클러스터에서 OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하는 모든 데이터 백업 및 복원 작업에 적용됩니다.
- OpenShift Container Platform 4.12 이상을 설치했습니다.
- OADP Operator가 설치되어 있습니다.
-
네임스페이스
openshift-adp에 시크릿cloud-credentials를 생성했습니다. - Red Hat OpenShift Data Foundation을 설치했습니다.
- Operator Lifecycle Manager를 사용하여 최신volSync Operator를 설치했습니다.
4.4.1.5.2. OADP 1.2 Data Mover와 함께 사용할 사용자 정의 리소스 정의
Red Hat OpenShift Data Foundation을 설치하면 기본 CephFS 및 CephRBD StorageClass 및 VolumeSnapshotClass CR(사용자 정의 리소스)이 자동으로 생성됩니다. OADP(OpenShift API for Data Protection) 1.2 Data Mover와 함께 사용하려면 이러한 CR을 정의해야 합니다.
CR을 정의한 후 백업 및 복원 작업을 수행하기 전에 환경에 몇 가지 다른 변경을 수행해야 합니다.
4.4.1.5.3. OADP 1.2 Data Mover와 함께 사용할 CephFS 사용자 정의 리소스 정의
Red Hat OpenShift Data Foundation을 설치하면 기본 CephFS StorageClass 사용자 정의 리소스(CR) 및 기본 CephFS VolumeSnapshotClass CR이 자동으로 생성됩니다. OADP(OpenShift API for Data Protection) 1.2 Data Mover와 함께 사용할 이러한 CR을 정의할 수 있습니다.
절차
다음 예와 같이
VolumeSnapshotClassCR을 정의합니다.VolumeSnapshotClassCR의 예apiVersion: snapshot.storage.k8s.io/v1 deletionPolicy: Retain 1 driver: openshift-storage.cephfs.csi.ceph.com kind: VolumeSnapshotClass metadata: annotations: snapshot.storage.kubernetes.io/is-default-class: true 2 labels: velero.io/csi-volumesnapshot-class: true 3 name: ocs-storagecluster-cephfsplugin-snapclass parameters: clusterID: openshift-storage csi.storage.k8s.io/snapshotter-secret-name: rook-csi-cephfs-provisioner csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage
다음 예와 같이
StorageClassCR을 정의합니다.StorageClassCR의 예kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ocs-storagecluster-cephfs annotations: description: Provides RWO and RWX Filesystem volumes storageclass.kubernetes.io/is-default-class: true 1 provisioner: openshift-storage.cephfs.csi.ceph.com parameters: clusterID: openshift-storage csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage fsName: ocs-storagecluster-cephfilesystem reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate- 1
true로 설정해야 합니다.
4.4.1.5.4. OADP 1.2 Data Mover와 함께 사용할 CephRBD 사용자 정의 리소스 정의
Red Hat OpenShift Data Foundation을 설치하면 기본 CephRBD StorageClass CR(사용자 정의 리소스) 및 기본 CephRBD VolumeSnapshotClass CR이 자동으로 생성됩니다. OADP(OpenShift API for Data Protection) 1.2 Data Mover와 함께 사용할 이러한 CR을 정의할 수 있습니다.
절차
다음 예와 같이
VolumeSnapshotClassCR을 정의합니다.VolumeSnapshotClassCR의 예apiVersion: snapshot.storage.k8s.io/v1 deletionPolicy: Retain 1 driver: openshift-storage.rbd.csi.ceph.com kind: VolumeSnapshotClass metadata: labels: velero.io/csi-volumesnapshot-class: true 2 name: ocs-storagecluster-rbdplugin-snapclass parameters: clusterID: openshift-storage csi.storage.k8s.io/snapshotter-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage
다음 예와 같이
StorageClassCR을 정의합니다.StorageClassCR의 예kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ocs-storagecluster-ceph-rbd annotations: description: 'Provides RWO Filesystem volumes, and RWO and RWX Block volumes' provisioner: openshift-storage.rbd.csi.ceph.com parameters: csi.storage.k8s.io/fstype: ext4 csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner imageFormat: '2' clusterID: openshift-storage imageFeatures: layering csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage pool: ocs-storagecluster-cephblockpool csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate
4.4.1.5.5. OADP 1.2 Data Mover와 함께 사용할 추가 사용자 정의 리소스 정의
기본 StorageClass 및 CephRBD VolumeSnapshotClass CR(사용자 정의 리소스)을 생성한 후 다음 CR을 생성해야 합니다.
-
shallow 복사 기능을 사용하도록 정의된 CephFS
StorageClassCR -
Rustic
SecretCR
절차
CephFS
StorageClassCR을 생성하고 다음 예와 같이backingSnapshot매개변수를true로 설정합니다.backingSnapshot이true로 설정된 CephFSStorageClassCR의 예kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ocs-storagecluster-cephfs-shallow annotations: description: Provides RWO and RWX Filesystem volumes storageclass.kubernetes.io/is-default-class: false provisioner: openshift-storage.cephfs.csi.ceph.com parameters: csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner clusterID: openshift-storage fsName: ocs-storagecluster-cephfilesystem csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage backingSnapshot: true 1 csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: Immediate- 1
true로 설정해야 합니다.
중요CephFS
VolumeSnapshotClass및StorageClassCR의 값이provisioner에 대해 동일한지 확인합니다.다음 예와 같이 Restic
SecretCR을 구성합니다.Restic
SecretCR의 예apiVersion: v1 kind: Secret metadata: name: <secret_name> namespace: <namespace> type: Opaque stringData: RESTIC_PASSWORD: <restic_password>
4.4.1.5.6. OADP 1.2 Data Mover 및 CephFS 스토리지를 사용하여 데이터 백업 및 복원
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 CephFS의 단순 복사 기능을 활성화하여 CephFS 스토리지를 사용하여 데이터를 백업하고 복원할 수 있습니다.
사전 요구 사항
- 상태 저장 애플리케이션은 CephFS를 프로비저너로 사용하는 PVC(영구 볼륨 클레임)가 있는 별도의 네임스페이스에서 실행됩니다.
-
StorageClass및VolumeSnapshotClassCR(사용자 정의 리소스)은 CephFS 및 OADP 1.2 데이터 Mover에 대해 정의됩니다. -
openshift-adp네임스페이스에는 시크릿cloud-credentials가 있습니다.
4.4.1.5.7. CephFS 스토리지와 함께 사용할 DPA 생성
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 CephFS 스토리지를 사용하여 데이터를 백업하고 복원하기 전에 DPA(Data Protection Application) CR을 생성해야 합니다.
절차
다음 명령을 실행하여
VolumeSnapshotClassCR의deletionPolicy필드가Retain으로 설정되어 있는지 확인합니다.$ oc get volumesnapshotclass -A -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{" "}{"Retention Policy: "}{.deletionPolicy}{"\n"}{end}'다음 명령을 실행하여
VolumeSnapshotClassCR의 레이블이true로 설정되어 있는지 확인합니다.$ oc get volumesnapshotclass -A -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{" "}{"labels: "}{.metadata.labels}{"\n"}{end}'다음 명령을 실행하여
StorageClassCR의storageclass.kubernetes.io/is-default-class주석이true로 설정되어 있는지 확인합니다.$ oc get storageClass -A -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{" "}{"annotations: "}{.metadata.annotations}{"\n"}{end}'다음 예와 유사한 DPA(Data Protection Application) CR을 생성합니다.
DPA CR 예
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: velero-sample namespace: openshift-adp spec: backupLocations: - velero: config: profile: default region: us-east-1 credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <my_bucket> prefix: velero provider: aws configuration: restic: enable: false 1 velero: defaultPlugins: - openshift - aws - csi - vsm features: dataMover: credentialName: <restic_secret_name> 2 enable: true 3 volumeOptionsForStorageClasses: ocs-storagecluster-cephfs: sourceVolumeOptions: accessMode: ReadOnlyMany cacheAccessMode: ReadWriteMany cacheStorageClassName: ocs-storagecluster-cephfs storageClassName: ocs-storagecluster-cephfs-shallow
4.4.1.5.8. OADP 1.2 데이터 Mover 및 CephFS 스토리지를 사용하여 데이터 백업
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 CephFS 스토리지의 부분 복사 기능을 활성화하여 CephFS 스토리지를 사용하여 데이터를 백업할 수 있습니다.
절차
다음 예와 같이
BackupCR을 생성합니다.BackupCR의 예apiVersion: velero.io/v1 kind: Backup metadata: name: <backup_name> namespace: <protected_ns> spec: includedNamespaces: - <app_ns> storageLocation: velero-sample-1
다음 단계를 완료하여
VolumeSnapshotBackupCR의 진행 상황을 모니터링합니다.모든
VolumeSnapshotBackupCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsb -n <app_ns>
특정
VolumeSnapshotBackupCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsb <vsb_name> -n <app_ns> -ojsonpath="{.status.phase}`
-
VolumeSnapshotBackupCR의 상태가Completed가 될 때까지 몇 분 정도 기다립니다. -
Restic 시크릿에 제공된 오브젝트 저장소에 스냅샷이 하나 이상 있는지
확인합니다./<OADP_namespace> 접두사가 있는 대상.BackupStorageLocation스토리지 공급자에서 이 스냅샷을 확인할 수 있습니다
4.4.1.5.9. OADP 1.2 Data Mover 및 CephFS 스토리지를 사용하여 데이터 복원
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 백업 프로세스에 CephFS 스토리지의 부분 복사 기능이 활성화된 경우 CephFS 스토리지를 사용하여 데이터를 복원할 수 있습니다. 단순 복사 기능은 복원 프로시저에서 사용되지 않습니다.
절차
다음 명령을 실행하여 애플리케이션 네임스페이스를 삭제합니다.
$ oc delete vsb -n <app_namespace> --all
다음 명령을 실행하여 백업 중에 생성된
VolumeSnapshotContentCR을 삭제합니다.$ oc delete volumesnapshotcontent --all
다음 예와 같이
RestoreCR을 생성합니다.CR
복원예apiVersion: velero.io/v1 kind: Restore metadata: name: <restore_name> namespace: <protected_ns> spec: backupName: <previous_backup_name>
다음을 수행하여
VolumeSnapshotRestoreCR의 진행 상황을 모니터링합니다.모든
VolumeSnapshotRestoreCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsr -n <app_ns>
특정
VolumeSnapshotRestoreCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsr <vsr_name> -n <app_ns> -ojsonpath="{.status.phase}
다음 명령을 실행하여 애플리케이션 데이터가 복원되었는지 확인합니다.
$ oc get route <route_name> -n <app_ns> -ojsonpath="{.spec.host}"
4.4.1.5.10. OADP 1.2 Data Mover 및 분할 볼륨을 사용하여 데이터 백업 및 복원(CephFS 및 Ceph RBD)
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 CephFS 및 CephRBD를 모두 사용하는 환경인 분할 볼륨이 있는 환경에서 데이터를 백업하고 복원할 수 있습니다.
사전 요구 사항
- 상태 저장 애플리케이션은 CephFS를 프로비저너로 사용하는 PVC(영구 볼륨 클레임)가 있는 별도의 네임스페이스에서 실행됩니다.
-
StorageClass및VolumeSnapshotClassCR(사용자 정의 리소스)은 CephFS 및 OADP 1.2 데이터 Mover에 대해 정의됩니다. -
openshift-adp네임스페이스에는 시크릿cloud-credentials가 있습니다.
4.4.1.5.11. 분할 볼륨과 함께 사용할 DPA 생성
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 분할 볼륨을 사용하여 데이터를 백업하고 복원하기 전에 DPA(Data Protection Application) CR을 생성해야 합니다.
절차
다음 예와 같이 DPA(Data Protection Application) CR을 생성합니다.
분할 볼륨이 있는 환경의 DPA CR의 예
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: velero-sample namespace: openshift-adp spec: backupLocations: - velero: config: profile: default region: us-east-1 credential: key: cloud name: cloud-credentials default: true objectStorage: bucket: <my-bucket> prefix: velero provider: aws configuration: restic: enable: false velero: defaultPlugins: - openshift - aws - csi - vsm features: dataMover: credentialName: <restic_secret_name> 1 enable: true volumeOptionsForStorageClasses: 2 ocs-storagecluster-cephfs: sourceVolumeOptions: accessMode: ReadOnlyMany cacheAccessMode: ReadWriteMany cacheStorageClassName: ocs-storagecluster-cephfs storageClassName: ocs-storagecluster-cephfs-shallow ocs-storagecluster-ceph-rbd: sourceVolumeOptions: storageClassName: ocs-storagecluster-ceph-rbd cacheStorageClassName: ocs-storagecluster-ceph-rbd destinationVolumeOptions: storageClassName: ocs-storagecluster-ceph-rbd cacheStorageClassName: ocs-storagecluster-ceph-rbd
4.4.1.5.12. OADP 1.2 Data Mover 및 분할 볼륨을 사용하여 데이터 백업
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 볼륨이 분할된 환경에서 데이터를 백업할 수 있습니다.
절차
다음 예와 같이
BackupCR을 생성합니다.BackupCR의 예apiVersion: velero.io/v1 kind: Backup metadata: name: <backup_name> namespace: <protected_ns> spec: includedNamespaces: - <app_ns> storageLocation: velero-sample-1
다음 단계를 완료하여
VolumeSnapshotBackupCR의 진행 상황을 모니터링합니다.모든
VolumeSnapshotBackupCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsb -n <app_ns>
특정
VolumeSnapshotBackupCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsb <vsb_name> -n <app_ns> -ojsonpath="{.status.phase}`
-
VolumeSnapshotBackupCR의 상태가Completed가 될 때까지 몇 분 정도 기다립니다. -
Restic 시크릿에 제공된 오브젝트 저장소에 스냅샷이 하나 이상 있는지
확인합니다./<OADP_namespace> 접두사가 있는 대상.BackupStorageLocation스토리지 공급자에서 이 스냅샷을 확인할 수 있습니다
4.4.1.5.13. OADP 1.2 Data Mover 및 분할 볼륨을 사용하여 데이터 복원
OADP(OpenShift API for Data Protection) 1.2 Data Mover를 사용하여 백업 프로세스에 CephFS 스토리지의 부분 복사 기능이 활성화된 경우 볼륨이 분할된 환경에서 데이터를 복원할 수 있습니다. 단순 복사 기능은 복원 프로시저에서 사용되지 않습니다.
절차
다음 명령을 실행하여 애플리케이션 네임스페이스를 삭제합니다.
$ oc delete vsb -n <app_namespace> --all
다음 명령을 실행하여 백업 중에 생성된
VolumeSnapshotContentCR을 삭제합니다.$ oc delete volumesnapshotcontent --all
다음 예와 같이
RestoreCR을 생성합니다.CR
복원예apiVersion: velero.io/v1 kind: Restore metadata: name: <restore_name> namespace: <protected_ns> spec: backupName: <previous_backup_name>
다음을 수행하여
VolumeSnapshotRestoreCR의 진행 상황을 모니터링합니다.모든
VolumeSnapshotRestoreCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsr -n <app_ns>
특정
VolumeSnapshotRestoreCR의 진행 상황을 확인하려면 다음 명령을 실행합니다.$ oc get vsr <vsr_name> -n <app_ns> -ojsonpath="{.status.phase}
다음 명령을 실행하여 애플리케이션 데이터가 복원되었는지 확인합니다.
$ oc get route <route_name> -n <app_ns> -ojsonpath="{.spec.host}"
4.4.1.6. OADP 1.1 Data Mover를 사용하여 백업 후 정리
OADP 1.1 Data Mover의 경우 백업을 수행한 후 데이터 정리를 수행해야 합니다.
정리는 다음 리소스를 삭제하는 것으로 구성됩니다.
- 버킷의 스냅샷
- 클러스터 리소스
- 스케줄에 의해 실행되거나 반복적으로 실행되는 백업 프로시저 후VSB(volume snapshot backups)
4.4.1.6.1. 버킷에서 스냅샷 삭제
OADP 1.1 Data Mover는 백업 후 버킷에 하나 이상의 스냅샷을 남겨 둘 수 있습니다. 모든 스냅샷을 삭제하거나 개별 스냅샷을 삭제할 수 있습니다.
절차
-
버킷의 모든 스냅샷을 삭제하려면 DPA(Data Protection Application)
.spec.backupLocation.objectStorage.bucket리소스에 지정된/<protected_namespace> 폴더를 삭제합니다. 개별 스냅샷을 삭제하려면 다음을 수행합니다.
-
DPA
.spec.backupLocation.objectStorage.bucket리소스에 지정된/<protected_namespace> 폴더를 찾습니다. -
/<volumeSnapshotContent name>-pvc접두사가 있는 적절한 폴더를 삭제합니다. 여기서 <VolumeSnapshotContent_name>은 PVC당 Data Mover에 의해 생성된VolumeSnapshotContent입니다.
-
DPA
4.4.1.6.2. 클러스터 리소스 삭제
OADP 1.1 Data Mover는 CSI(Container Storage Interface) 볼륨 스냅샷을 원격 오브젝트 저장소에 성공적으로 백업할지 여부에 관계없이 클러스터 리소스를 남겨 둘 수 있습니다.
4.4.1.6.2.1. 성공적인 백업 및 데이터 Mover를 사용한 복원 후 클러스터 리소스 삭제
성공적인 백업 후 애플리케이션 네임스페이스에 남아 있는 VolumeSnapshotBackup 또는 VolumeSnapshotRestore CR을 삭제하고 Data Mover를 사용한 복원을 삭제할 수 있습니다.
절차
Data Mover를 사용하는 백업 후 애플리케이션 PVC가 있는 네임스페이스인 애플리케이션 네임스페이스에 남아 있는 클러스터 리소스를 삭제합니다.
$ oc delete vsb -n <app_namespace> --all
Data Mover를 사용하는 복원 후에도 남아 있는 클러스터 리소스를 삭제합니다.
$ oc delete vsr -n <app_namespace> --all
필요한 경우 백업 후에도 남아 있는
VolumeSnapshotContent리소스를 삭제하고 Data Mover를 사용하는 위치를 복원합니다.$ oc delete volumesnapshotcontent --all
4.4.1.6.2.2. 부분적으로 성공한 또는 실패한 백업 후 클러스터 리소스 삭제 및 Data Mover를 사용한 복원
Data Mover를 사용하는 백업 및 복원 작업이 실패하거나 부분적으로만 성공하면 애플리케이션 네임스페이스에 존재하는 VolumeSnapshotBackup (VSB) 또는 VolumeSnapshotRestore CRD(사용자 정의 리소스 정의)를 정리하고 이러한 컨트롤러에서 생성한 추가 리소스를 정리해야 합니다.
절차
다음 명령을 입력하여 Data Mover를 사용한 백업 작업 후에도 남아 있는 클러스터 리소스를 정리합니다.
애플리케이션 네임스페이스에서 VSB CRD를 삭제하고 백업하고 복원할 애플리케이션 PVC가 있는 네임스페이스를 삭제합니다.
$ oc delete vsb -n <app_namespace> --all
VolumeSnapshotCR을 삭제합니다.$ oc delete volumesnapshot -A --all
VolumeSnapshotContentCR을 삭제합니다.$ oc delete volumesnapshotcontent --all
보호된 네임스페이스에서 PVC를 삭제하고 Operator가 설치된 네임스페이스를 삭제합니다.
$ oc delete pvc -n <protected_namespace> --all
네임스페이스에서
ReplicationSource리소스를 삭제합니다.$ oc delete replicationsource -n <protected_namespace> --all
다음 명령을 입력하여 Data Mover를 사용하여 복원 작업 후에도 남아 있는 클러스터 리소스를 정리합니다.
VSR CRD를 삭제합니다.
$ oc delete vsr -n <app-ns> --all
VolumeSnapshotCR을 삭제합니다.$ oc delete volumesnapshot -A --all
VolumeSnapshotContentCR을 삭제합니다.$ oc delete volumesnapshotcontent --all
네임스페이스에서
ReplicationDestination리소스를 삭제합니다.$ oc delete replicationdestination -n <protected_namespace> --all
4.4.1.7. 백업 후크 생성
Backup CR(사용자 정의 리소스)을 편집하여 Pod의 컨테이너에서 명령을 실행하는 백업 후크를 생성합니다.
Pod를 백업하기 전에 사전 후크가 실행됩니다. 백업 후 후크가 실행됩니다.
절차
다음 예제와 같이
BackupCR의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
- 이 블록은 사전 백업 후크와 동일한 매개변수를 사용하여 백업 후 실행할 후크 배열을 정의합니다.
4.4.1.8. 백업 예약
Backup CR 대신 Schedule CR(사용자 정의 리소스)을 생성하여 백업을 예약합니다.
다른 백업이 생성되기 전에 백업이 완료될 때까지 백업 일정에 충분한 시간을 남겨 둡니다.
예를 들어 네임스페이스 백업에 일반적으로 10분이 걸리는 경우 15분마다 백업을 더 자주 예약하지 마십시오.
사전 요구 사항
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplicationCR은Ready상태에 있어야 합니다.
절차
backupStorageLocationsCR을 검색합니다.$ oc get backupStorageLocations -n openshift-adp
출력 예
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
다음 예와 같이
ScheduleCR을 생성합니다.$ 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 defaultVolumesToRestic: true 4 ttl: 720h0m0s EOF
예약된 백업이 실행된 후
ScheduleCR의 상태가Completed인지 확인합니다.$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'
4.4.1.9. 백업 삭제
Backup CR(사용자 정의 리소스)을 삭제하여 백업 파일을 제거할 수 있습니다.
Backup CR 및 관련 오브젝트 스토리지 데이터를 삭제한 후에는 삭제된 데이터를 복구할 수 없습니다.
사전 요구 사항
-
백업CR을 생성했습니다. -
BackupCR의 이름과 이를 포함하는 네임스페이스를 알고 있습니다. - Velero CLI 툴을 다운로드했습니다.
- 클러스터에서 Velero 바이너리에 액세스할 수 있습니다.
절차
BackupCR을 삭제하려면 다음 작업 중 하나를 선택합니다.BackupCR을 삭제하고 연결된 오브젝트 스토리지 데이터를 유지하려면 다음 명령을 실행합니다.$ oc delete backup <backup_CR_name> -n <velero_namespace>
BackupCR을 삭제하고 연결된 오브젝트 스토리지 데이터를 삭제하려면 다음 명령을 실행합니다.$ velero backup delete <backup_CR_name> -n <velero_namespace>
다음과 같습니다.
- <backup_CR_name>
-
Backup사용자 정의 리소스의 이름을 지정합니다. - <velero_namespace>
-
Backup사용자 정의 리소스가 포함된 네임스페이스를 지정합니다.
추가 리소스
4.4.2. 애플리케이션 복원
Restore CR(사용자 정의 리소스)을 생성하여 애플리케이션 백업을 복원합니다. Restore CR 생성을 참조하십시오.
복원(CR)을 편집하여 애플리케이션을 복원하는 동안 Pod의 컨테이너에서 명령을 실행하기 위해 복원 후크를 생성할 수 있습니다. 복원 후크 생성참조
4.4.2.1. Restore CR을 생성
Restore CR을 생성하여 Backup CR(사용자 정의 리소스)을 복원합니다.
사전 요구 사항
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplicationCR은Ready상태에 있어야 합니다. -
Velero
BackupCR이 있어야 합니다. - PV(영구 볼륨) 용량이 백업 시 요청된 크기와 일치하도록 요청된 크기를 조정합니다.
절차
다음 예제와 같이
RestoreCR을 생성합니다.apiVersion: velero.io/v1 kind: Restore metadata: name: <restore> namespace: openshift-adp spec: backupName: <backup> 1 includedResources: [] 2 excludedResources: - nodes - events - events.events.k8s.io - backups.velero.io - restores.velero.io - resticrepositories.velero.io restorePVs: true 3
다음 명령을 입력하여
RestoreCR의 상태가Completed인지 확인합니다.$ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'다음 명령을 입력하여 백업 리소스가 복원되었는지 확인합니다.
$ oc get all -n <namespace> 1- 1
- 백업한 네임스페이스입니다.
Restic을 사용하여
DeploymentConfig오브젝트를 복원하거나 post-restore 후크를 사용하는 경우 다음 명령을 입력하여dc-restic-post-restore.shcleanup 스크립트를 실행합니다.$ bash dc-restic-post-restore.sh <restore-name>
참고복원 프로세스 과정에서 OADP Velero 플러그인은
DeploymentConfig오브젝트를 축소하고 Pod를 독립 실행형 Pod로 복원하여 클러스터가 복원 시 복원된DeploymentConfigPod를 즉시 삭제하지 못하도록 하고 Restic 및 post-restore 후크를 허용하여 복원된 Pod에서 작업을 완료할 수 있습니다. cleanup 스크립트는 이러한 연결이 끊긴 Pod를 제거하고DeploymentConfig오브젝트를 적절한 복제본 수로 백업합니다.예 4.1.
dc-restic-post-restore.shcleanup script#!/bin/bash set -e # if sha256sum exists, use it to check the integrity of the file if command -v sha256sum >/dev/null 2>&1; then CHECKSUM_CMD="sha256sum" else CHECKSUM_CMD="shasum -a 256" fi label_name () { if [ "${#1}" -le "63" ]; then echo $1 return fi sha=$(echo -n $1|$CHECKSUM_CMD) echo "${1:0:57}${sha:0:6}" } OADP_NAMESPACE=${OADP_NAMESPACE:=openshift-adp} if [[ $# -ne 1 ]]; then echo "usage: ${BASH_SOURCE} restore-name" exit 1 fi echo using OADP Namespace $OADP_NAMESPACE echo restore: $1 label=$(label_name $1) echo label: $label echo Deleting disconnected restore pods oc delete pods -l oadp.openshift.io/disconnected-from-dc=$label for dc in $(oc get dc --all-namespaces -l oadp.openshift.io/replicas-modified=$label -o jsonpath='{range .items[*]}{.metadata.namespace}{","}{.metadata.name}{","}{.metadata.annotations.oadp\.openshift\.io/original-replicas}{","}{.metadata.annotations.oadp\.openshift\.io/original-paused}{"\n"}') do IFS=',' read -ra dc_arr <<< "$dc" if [ ${#dc_arr[0]} -gt 0 ]; then echo Found deployment ${dc_arr[0]}/${dc_arr[1]}, setting replicas: ${dc_arr[2]}, paused: ${dc_arr[3]} cat <<EOF | oc patch dc -n ${dc_arr[0]} ${dc_arr[1]} --patch-file /dev/stdin spec: replicas: ${dc_arr[2]} paused: ${dc_arr[3]} EOF fi done
4.4.2.2. 복원 후크 생성
Restore CR(사용자 정의 리소스)을 편집하여 애플리케이션을 복원하는 동안 Pod의 컨테이너에서 명령을 실행하도록 복원 후크를 생성합니다.
다음 두 가지 유형의 복원 후크를 생성할 수 있습니다.
init후크는 애플리케이션 컨테이너가 시작되기 전에 설정 작업을 수행하기 위해 Pod에 init 컨테이너를 추가합니다.Restic 백업을 복원하면 복원 후크 init 컨테이너 앞에
restic-waitinit 컨테이너가 추가됩니다.-
exec후크는 복원된 Pod의 컨테이너에서 명령 또는 스크립트를 실행합니다.
절차
다음 예제와 같이
RestoreCR의spec.hooks블록에 후크를 추가합니다.apiVersion: velero.io/v1 kind: Restore metadata: name: <restore> namespace: openshift-adp spec: hooks: resources: - name: <hook_name> includedNamespaces: - <namespace> 1 excludedNamespaces: - <namespace> includedResources: - pods 2 excludedResources: [] labelSelector: 3 matchLabels: app: velero component: server postHooks: - init: initContainers: - name: restore-hook-init image: alpine:latest volumeMounts: - mountPath: /restores/pvc1-vm name: pvc1-vm command: - /bin/ash - -c timeout: 4 - exec: container: <container> 5 command: - /bin/bash 6 - -c - "psql < /backup/backup.sql" waitTimeout: 5m 7 execTimeout: 1m 8 onError: Continue 9- 1
- 선택 사항: 후크가 적용되는 네임스페이스 배열입니다. 이 값을 지정하지 않으면 후크가 모든 네임스페이스에 적용됩니다.
- 2
- 현재 Pod는 후크를 적용할 수 있는 유일한 지원 리소스입니다.
- 3
- 선택 사항: 이 후크는 라벨 선택기와 일치하는 오브젝트에만 적용됩니다.
- 4
- 선택 사항: Timeout은 Velero가
initContainers가 완료될 때까지 대기하는 최대 시간을 지정합니다. - 5
- 선택 사항: 컨테이너를 지정하지 않으면 Pod의 첫 번째 컨테이너에서 명령이 실행됩니다.
- 6
- 이는 추가 중인 init 컨테이너의 진입점입니다.
- 7
- 선택 사항: 컨테이너가 준비될 때까지 대기하는 시간입니다. 컨테이너가 시작되고 동일한 컨테이너의 이전 후크가 완료될 때까지 충분히 길어야 합니다. 설정하지 않으면 복원 프로세스가 무기한 대기합니다.
- 8
- 선택 사항: 명령을 실행할 때까지 대기하는 시간입니다. 기본값은
30s입니다. - 9
- 오류 처리에 허용되는 값은
Fail및Continue입니다.-
continue: 명령 실패만 기록합니다. -
실패: Pod의 모든 컨테이너에서 복구 후크를 더 이상 실행하지 않습니다.RestoreCR의 상태는partiallyFailed 입니다.
-