4.4. 백업 및 복원
4.4.1. 애플리케이션 백업
Backup
CR(사용자 정의 리소스)을 생성하여 애플리케이션을 백업합니다.
백업
CR은 S3 오브젝트 스토리지에서 Kubernetes 리소스 및 내부 이미지의 백업 파일을 생성하고, 클라우드 공급자가 기본 스냅샷 API 또는 CSI( Container Storage Interface)를 사용하여 OpenShift Container Storage 4와 같은 스냅샷을 생성하는 경우 S3 오브젝트 스토리지 및 PV(영구 볼륨) 의 스냅샷을 생성합니다. 자세한 내용은 CSI 볼륨 스냅샷을 참조하십시오.
S3 스토리지의 CloudStorage
API는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
클라우드 공급자에 기본 스냅샷 API가 있거나 CSI(Container Storage Interface) 스냅샷을 지원하는 경우 Backup
CR은 스냅샷을 생성하여 영구 볼륨을 백업합니다. 자세한 내용은 OpenShift Container Platform 설명서 의 CSI 볼륨 스냅샷 개요 를 참조하십시오.
클라우드 공급자가 스냅샷을 지원하지 않거나 애플리케이션이 NFS 데이터 볼륨에 있는 경우 Restic 을 사용하여 백업을 생성할 수 있습니다.
백업 작업 전후에 명령을 실행하도록 백업 후크 를 생성할 수 있습니다.
Backup
CR 대신 Schedule
CR 을 생성하여 백업을 예약할 수 있습니다.
4.4.1.1. 백업 CR 생성
Backup
CR(사용자 정의 리소스)을 생성하여 Kubernetes 이미지, 내부 이미지 및 PV(영구 볼륨)를 백업합니다.
전제 조건
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplication
CR은Ready
상태여야 합니다. 백업 위치 사전 요구 사항:
- Velero에 대해 S3 오브젝트 스토리지가 구성되어 있어야 합니다.
-
DataProtectionApplication
CR에 구성된 백업 위치가 있어야 합니다.
스냅샷 위치 사전 요구 사항:
- 클라우드 공급자에 기본 스냅샷 API가 있거나 CSI(Container Storage Interface) 스냅샷을 지원해야 합니다.
-
CSI 스냅샷의 경우 CSI 드라이버를 등록하려면
VolumeSnapshotClass
CR을 생성해야 합니다. -
DataProtectionApplication
CR에 볼륨 위치가 구성되어 있어야 합니다.
프로세스
다음 명령을 입력하여
backupStorageLocations
CR을 검색합니다.$ oc get backupStorageLocations
출력 예
NAME PHASE LAST VALIDATED AGE DEFAULT 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> - matchLabels: app=<label_2> - matchLabels: app=<label_3> orlabelSelectors: 6 - matchLabels: app=<label_1> - matchLabels: app=<label_2> - matchLabels: app=<label_3>
- 1
- 백업할 네임스페이스 배열을 지정합니다.
- 2
- 선택 사항: 백업에 포함할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우 'po')이거나 정규화될 수 있습니다. 지정하지 않으면 모든 리소스가 포함됩니다.
- 3
- 선택 사항: 백업에서 제외할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우 'po')이거나 정규화될 수 있습니다.
- 4
backupStorageLocations
CR의 이름을 지정합니다.- 5
- 지정된 라벨이 모두 있는 백업 리소스입니다.
- 6
- 지정된 라벨이 하나 이상 있는 백업 리소스입니다.
Backup
CR의 상태가Completed
인지 확인합니다.$ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'
4.4.1.2. CSI 스냅샷을 사용하여 영구 볼륨 백업
Backup
CR을 생성하기 전에 CSI 드라이버를 등록할 VolumeSnapshotClass
CR(사용자 정의 리소스)을 생성하여 CSI(Container Storage Interface) 스냅샷을 사용하여 영구 볼륨을 백업합니다.
전제 조건
- 클라우드 공급자는 CSI 스냅샷을 지원해야 합니다.
-
DataProtectionApplication
CR에서 CSI를 활성화해야 합니다.
프로세스
다음 예와 같이
VolumeSnapshotClass
CR을 생성합니다.Ceph RBD
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass deletionPolicy: Retain metadata: name: <volume_snapshot_class_name> labels: velero.io/csi-volumesnapshot-class: "true" snapshotter: openshift-storage.rbd.csi.ceph.com driver: openshift-storage.rbd.csi.ceph.com parameters: clusterID: openshift-storage csi.storage.k8s.io/snapshotter-secret-name: rook-csi-rbd-provisioner csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage
Ceph FS
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: <volume_snapshot_class_name> labels: velero.io/csi-volumesnapshot-class: "true" driver: openshift-storage.cephfs.csi.ceph.com deletionPolicy: Retain parameters: clusterID: openshift-storage csi.storage.k8s.io/snapshotter-secret-name: rook-csi-cephfs-provisioner csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage
기타 클라우드 공급자
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
볼륨 백업을 지원하지 않습니다. 자세한 내용은 추가 Rustic 제한을 참조하십시오.
전제 조건
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
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: defaultVolumesToRestic: true 1 ...
- 1
defaultVolumesToRestic: true
를spec
블록에 추가합니다.
4.4.1.4. CSI 스냅샷에 Data Mover 사용
CSI 스냅샷의 Data Mover는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
OADP 1.1.0 Data Mover를 사용하면 고객이 CSI(Container Storage Interface) 볼륨 스냅샷을 원격 오브젝트 저장소에 백업할 수 있습니다. Data Mover가 활성화되면 클러스터 장애, 실수로 삭제 또는 클러스터 손상이 발생하면 저장소에서 상태 저장 애플리케이션을 복원할 수 있습니다. OADP 1.1.0 Data Mover 솔루션은 VolSync의 Restic 옵션을 사용합니다.
Data Mover는 CSI 볼륨 스냅샷의 백업 및 복원만 지원합니다.
현재 Data Mover는 Google Cloud Storage(GCS) 버킷을 지원하지 않습니다.
전제 조건
-
StorageClass
및VolumeSnapshotClass
CR(사용자 정의 리소스)에서 CSI를 지원하는지 확인했습니다. -
하나의
volumeSnapshotClass
CR만snapshot.storage.kubernetes.io/is-default-class: true
가 있음을 확인했습니다. -
storageClass
CR이 하나만storageclass.kubernetes.io/is-default-class: true
가 있음을 확인했습니다. -
VolumeSnapshotClass
CR에velero.io/csi-volumesnapshot-class: 'true'
레이블이 포함되어 있습니다. OLM(Operator Lifecycle Manager)을 사용하여 VolSync Operator를 설치했습니다.
참고VolSync Operator는 기술 프리뷰 Data Mover에서만 사용해야 합니다. OADP 프로덕션 기능을 사용하는 데 Operator가 필요하지 않습니다.
- OLM을 사용하여 OADP Operator를 설치했습니다.
프로세스
다음과 같이
.yaml
파일을 생성하여 Restic 시크릿을 구성합니다.apiVersion: v1 kind: Secret metadata: name: <secret_name> namespace: openshift-adp type: Opaque stringData: RESTIC_PASSWORD: <secure_restic_password>
참고기본적으로 Operator는
dm-credential
이라는 시크릿을 찾습니다. 다른 이름을 사용하는 경우dpa.spec.features.dataMover.credentialName
을 사용하여 DPA(Data Protection Application) CR을 통해 이름을 지정해야 합니다.다음 예와 유사한 DPA CR을 생성합니다. 기본 플러그인에는 CSI가 포함됩니다.
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> 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: <true_or_false> velero: defaultPlugins: - openshift - aws - csi
- 1
- 이전 단계의 Restic 시크릿 이름을 추가합니다. 이 작업을 수행하지 않으면 기본 시크릿 이름
dm-credential
이 사용됩니다.
OADP Operator는 두 개의 CRD(사용자 정의 리소스 정의),
VolumeSnapshotBackup
및VolumeSnapshotRestore
를 설치합니다.VolumeSnapshotBackup
CRD의 예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
- 볼륨 스냅샷이 존재하는 네임스페이스를 지정합니다.
VolumeSnapshotRestore
CRD의 예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분 정도 기다린 후 다음 명령을 입력하여
VolumeSnapshotBackup
CR 상태가 완료되었는지 확인합니다.$ oc get vsb -n <app_ns>
$ oc get vsb <vsb_name> -n <app_ns> -o jsonpath="{.status.phase}"
오브젝트는 DPA에서 구성된 오브젝트 저장소에서 생성됩니다.
참고VolumeSnapshotBackup
CR의 상태가실패
가 되는 경우 문제를 해결하려면 Velero 로그를 참조하십시오.
다음 단계를 수행하여 볼륨 스냅샷을 복원할 수 있습니다.
-
Velero CSI 플러그인에서 생성한 애플리케이션 네임스페이스 및
volumeSnapshotContent
를 삭제합니다. Restore
CR을 생성하고restorePV
를true
로 설정합니다.Restore
CR의 예apiVersion: velero.io/v1 kind: Restore metadata: name: <restore_name> namespace: <protected_ns> spec: backupName: <previous_backup_name> restorePVs: true
최대 10분 정도 기다린 후 다음 명령을 입력하여
VolumeSnapshotRestore
CR 상태가 완료되었는지 확인합니다.$ oc get vsr -n <app_ns>
$ oc get vsr <vsr_name> -n <app_ns> -o jsonpath="{.status.phase}"
애플리케이션 데이터 및 리소스가 복원되었는지 확인합니다.
참고VolumeSnapshotRestore
CR의 상태가 'Failed'가 되면 문제 해결을 위해 Velero 로그를 참조하십시오.
-
Velero CSI 플러그인에서 생성한 애플리케이션 네임스페이스 및
4.4.1.5. 백업 후크 생성
Backup CR(사용자 정의 리소스)을 편집하여 Pod의 컨테이너에서 명령을 실행하는 백업
후크를 생성합니다.
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
- 이 블록은 사전 백업 후크와 동일한 매개 변수를 사용하여 백업 후에 실행할 후크 배열을 정의합니다.
4.4.1.6. 백업 예약
Backup
CR 대신 Schedule
CR(사용자 정의 리소스)을 생성하여 백업을 예약합니다.
다른 백업이 생성되기 전에 백업이 완료될 수 있도록 백업 일정에 충분한 시간을 남겨 둡니다.
예를 들어 네임스페이스의 백업이 일반적으로 10분 정도 걸리는 경우 15분마다 백업을 더 자주 예약하지 마십시오.
전제 조건
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplication
CR은Ready
상태여야 합니다.
프로세스
backupStorageLocations
CR을 검색합니다.$ oc get backupStorageLocations
출력 예
NAME PHASE LAST VALIDATED AGE DEFAULT 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 defaultVolumesToRestic: true 4 ttl: 720h0m0s EOF
예약된 백업이 실행된 후
Schedule
CR의 상태가Completed
인지 확인합니다.$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'
4.4.1.7. 백업 삭제
Backup
CR(사용자 정의 리소스)을 삭제하여 백업 파일을 제거할 수 있습니다.
Backup
CR 및 관련 오브젝트 스토리지 데이터를 삭제한 후에는 삭제된 데이터를 복구할 수 없습니다.
전제 조건
-
백업
CR을 생성했습니다. -
Backup
CR의 이름과 이를 포함하는 네임스페이스를 알고 있습니다. - Velero CLI 툴을 다운로드했습니다.
- 클러스터에서 Velero 바이너리에 액세스할 수 있습니다.
프로세스
Backup
CR을 삭제하려면 다음 작업 중 하나를 선택합니다.Backup
CR을 삭제하고 연결된 오브젝트 스토리지 데이터를 유지하려면 다음 명령을 실행합니다.$ oc delete backup <backup_CR_name> -n <velero_namespace>
Backup
CR을 삭제하고 연결된 오브젝트 스토리지 데이터를 삭제하려면 다음 명령을 실행합니다.$ velero backup delete <backup_CR_name> -n <velero_namespace>
다음과 같습니다.
- <backup_CR_name>
-
Backup
사용자 정의 리소스의 이름을 지정합니다. - <velero_namespace>
-
Backup
사용자 정의 리소스가 포함된 네임스페이스를 지정합니다.
추가 리소스
4.4.2. 애플리케이션 복원
Restore
CR(사용자 정의 리소스) 을 생성하여 애플리케이션 백업을 복원합니다.
애플리케이션 컨테이너가 시작되기 전에 또는 애플리케이션 컨테이너 자체에서 init 컨테이너에서 명령을 실행하는 복원 후크 를 생성할 수 있습니다.
4.4.2.1. Restore CR 생성
Restore CR을 생성하여 Backup
CR(사용자 정의 리소스)을 복원합니다
.
전제 조건
- OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
-
DataProtectionApplication
CR은Ready
상태여야 합니다. -
Velero
Backup
CR이 있어야 합니다. - 영구 볼륨(PV) 용량이 백업 시 요청된 크기와 일치하도록 요청된 크기를 조정합니다.
프로세스
다음 예와 같이
Restore
CR을 생성합니다.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
다음 명령을 입력하여
Restore
CR의 상태가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.sh
cleanup 스크립트를 실행합니다.$ bash dc-restic-post-restore.sh <restore-name>
참고복원 프로세스 과정에서 OADP Velero 플러그인은
DeploymentConfig
오브젝트를 축소하고 Pod를 독립 실행형 Pod로 복원하여 클러스터가 복원 시 복원된DeploymentConfig
Pod를 즉시 삭제하지 못하도록 하고 Restic 및 post-restore 후크를 허용하여 복원된 Pod에서 작업을 완료할 수 있습니다. cleanup 스크립트는 이러한 연결이 끊긴 Pod를 제거하고DeploymentConfig
오브젝트를 적절한 복제본 수로 백업합니다.예 4.1.
dc-restic-post-restore.sh
cleanup 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-wait
init 컨테이너가 추가됩니다.-
exec
후크는 복원된 Pod의 컨테이너에서 명령 또는 스크립트를 실행합니다.
프로세스
다음 예와 같이
Restore
CR의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
: 명령 실패만 기록됩니다. -
fail
: Pod의 컨테이너에서 더 이상 복원 후크가 실행되지 않습니다.Restore
CR의 상태는PartiallyFailed
가 됩니다.
-