4.4. 백업 및 복원

4.4.1. 애플리케이션 백업

Backup CR(사용자 정의 리소스)을 생성하여 애플리케이션을 백업합니다.

Backup CR은 Kubernetes 리소스 및 내부 이미지, S3 개체 스토리지에서 내부 이미지, 영구 볼륨(PV)에 대한 백업 파일을 생성합니다. 클라우드 공급자가 네이티브 스냅샷 API 또는 CSI(Container Storage Interface) 를 사용하여 OpenShift Data Foundation 4와 같은 스냅샷을 생성합니다. 자세한 내용은 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. 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에 구성된 볼륨 위치가 있어야 합니다.

절차

  1. 다음 명령을 입력하여 backupStorageLocations CR을 검색합니다.

    $ oc get backupStorageLocations

    출력 예

    NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    velero-sample-1   Available   11s              31m

  2. 다음 예와 같이 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
    지정된 레이블이 하나 이상 있는 백업 리소스입니다.
  3. Backup CR의 상태가 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 스냅샷을 지원해야 합니다.
  • 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을 생성할 수 있습니다.

4.4.1.3. Restic을 사용하여 애플리케이션 백업

Restic을 사용하여 Kubernetes 리소스, 내부 이미지 및 영구 볼륨을 백업하여 Backup CR(사용자 정의 리소스)을 편집합니다.

DataProtectionApplication CR에서 스냅샷 위치를 지정할 필요가 없습니다.

중요

Restic은 hostPath 볼륨 백업을 지원하지 않습니다. 자세한 내용은 추가 Rustic 제한을 참조하십시오.

사전 요구 사항

  • OADP(OpenShift API for Data Protection) Operator를 설치해야 합니다.
  • DataProtectionApplication CR에서 spec.configuration.restic.enablefalse 로 설정하여 기본 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
    spec 블록에 defaultVolumesToRestic: true 를 추가합니다.

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) 버킷을 지원하지 않습니다.

사전 요구 사항

  • StorageClassVolumeSnapshotClass 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를 설치했습니다.

절차

  1. 다음과 같이 .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을 통해 이름을 지정해야 합니다.

  2. 다음 예와 유사한 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(사용자 정의 리소스 정의), VolumeSnapshotBackupVolumeSnapshotRestore 를 설치합니다.

    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>

    1
    볼륨 스냅샷이 존재하는 네임스페이스를 지정합니다.
    2
    Operator가 설치된 네임스페이스를 지정합니다. 기본값은 openshift-adp 입니다.
  3. 다음 단계를 수행하여 볼륨 스냅샷을 백업할 수 있습니다.

    1. 백업 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 입니다.
    2. 최대 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 로그를 참조하십시오.

  4. 다음 단계를 수행하여 볼륨 스냅샷을 복원할 수 있습니다.

    1. Velero CSI 플러그인에서 생성한 애플리케이션 네임스페이스 및 volumeSnapshotContent 를 삭제합니다.
    2. Restore CR을 생성하고 restorePVtrue 로 설정합니다.

      Restore CR의 예

      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: <restore_name>
        namespace: <protected_ns>
      spec:
        backupName: <previous_backup_name>
        restorePVs: true

    3. 최대 10분 정도 기다린 후 다음 명령을 입력하여 VolumeSnapshotRestore CR 상태가 완료되었는지 확인합니다.

      $ oc get vsr -n <app_ns>
      $ oc get vsr <vsr_name> -n <app_ns> -o jsonpath="{.status.phase}"
    4. 애플리케이션 데이터 및 리소스가 복원되었는지 확인합니다.

      참고

      VolumeSnapshotRestore CR의 상태가 'Failed'가 되면 문제 해결을 위해 Velero 로그를 참조하십시오.

4.4.1.5. 백업 후크 생성

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
    오류 처리에 허용되는 값은 FailContinue 입니다. 기본값은 Fail 입니다.
    10
    선택 사항: 명령이 실행될 때까지 대기하는 시간입니다. 기본값은 30s 입니다.
    11
    이 블록은 백업 후 실행할 후크 배열과 pre-backup 후크와 동일한 매개변수를 정의합니다.

4.4.1.6. 백업 예약

Backup CR 대신 Schedule CR(사용자 정의 리소스)을 생성하여 백업을 예약합니다.

주의

다른 백업이 생성되기 전에 백업이 완료될 수 있도록 백업 일정에 충분한 시간을 남겨 둡니다.

예를 들어 네임스페이스의 백업이 일반적으로 10분 정도 걸리는 경우 15분마다 백업을 더 자주 예약하지 마십시오.

사전 요구 사항

  • OADP(OpenShift API for Data Protection) Operator를 설치해야 합니다.
  • DataProtectionApplication CR은 Ready 상태여야 합니다.

절차

  1. backupStorageLocations CR을 검색합니다.

    $ oc get backupStorageLocations

    출력 예

    NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    velero-sample-1   Available   11s              31m

  2. 다음 예와 같이 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
    1
    백업을 예약하는 Cron 표현식(예: 0 7 * * * )은 7:00에 매일 백업을 수행합니다.
    2
    백업할 네임스페이스의 배열입니다.
    3
    backupStorageLocations CR의 이름입니다.
    4
    선택 사항: Restic을 사용하여 볼륨을 백업하는 경우 defaultVolumesToRestic: true 키-값 쌍을 추가합니다.
  3. 예약된 백업이 실행된 후 Schedule CR의 상태가 Completed 인지 확인합니다.

    $ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'

4.4.1.7. 백업 삭제

Backup CR(사용자 정의 리소스)을 삭제하여 백업 파일을 제거할 수 있습니다.

주의

Backup CR 및 관련 개체 스토리지 데이터를 삭제한 후에는 삭제된 데이터를 복구할 수 없습니다.

사전 요구 사항

  • Backup 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(OpenShift API for Data Protection) Operator를 설치해야 합니다.
  • DataProtectionApplication CR은 Ready 상태여야 합니다.
  • Velero Backup CR이 있어야 합니다.
  • PV(영구 볼륨) 용량이 백업 시 요청된 크기와 일치하도록 요청된 크기를 조정합니다.

절차

  1. 다음 예와 같이 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
    1
    Backup CR의 이름입니다.
    2
    선택 사항: 복원 프로세스에 포함할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: 'pods'의 경우 'po')이거나 정규화될 수 있습니다. 지정하지 않으면 모든 리소스가 포함됩니다.
  2. 다음 명령을 입력하여 Restore CR의 상태가 Completed 인지 확인합니다.

    $ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
  3. 다음 명령을 입력하여 백업 리소스가 복원되었는지 확인합니다.

    $ oc get all -n <namespace> 1
    1
    백업한 네임스페이스입니다.
  4. 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 and Continue 입니다.
    • continue: 명령 실패만 기록됩니다.
    • fail: Pod의 컨테이너에서 더 이상 복원 후크가 실행되지 않습니다. Restore CR의 상태는 PartiallyFailed 가 됩니다.