4.9. OADP 복원


4.9.1. 애플리케이션 복원

Restore CR(사용자 정의 리소스)을 생성하여 애플리케이션 백업을 복원합니다. 복원 CR 생성을 참조하십시오.

Restore CR을 편집하여 Pod의 컨테이너에서 명령을 실행하기 위해 복원 후크를 생성할 수 있습니다. 복원 후크 생성 을 참조하십시오.

4.9.1.1. 백업을 실행하고 복원하기 전에 리소스 미리 보기

OADP는 유형, 네임스페이스 또는 레이블을 기반으로 애플리케이션 리소스를 백업합니다. 즉, 백업이 완료된 후 리소스를 볼 수 있습니다. 마찬가지로 복원 작업이 완료된 후 네임스페이스, 영구 볼륨(PV) 또는 라벨을 기반으로 복원된 오브젝트를 볼 수 있습니다. 리소스를 미리 미리 보려면 백업 및 복원 작업을 예행히 실행할 수 있습니다.

사전 요구 사항

  • OADP Operator가 설치되어 있습니다.

절차

  1. 실제 백업을 실행하기 전에 백업에 포함된 리소스를 미리 보려면 다음 명령을 실행합니다.

    $ velero backup create <backup-name> --snapshot-volumes false 1
    1
    --snapshot-volumes 매개변수 값을 false 로 지정합니다.
  2. 백업 리소스에 대한 자세한 내용을 보려면 다음 명령을 실행합니다.

    $ velero describe backup <backup_name> --details 1
    1
    백업 이름을 지정합니다.
  3. 실제 복원을 실행하기 전에 복원에 포함된 리소스를 미리 보려면 다음 명령을 실행합니다.

    $ velero restore create --from-backup <backup-name> 1
    1
    백업 리소스를 검토하기 위해 생성된 백업의 이름을 지정합니다.
    중요

    velero restore create 명령은 클러스터에 복원 리소스를 생성합니다. 리소스를 검토한 후 복원의 일부로 생성된 리소스를 삭제해야 합니다.

  4. 복원 리소스에 대한 자세한 내용을 보려면 다음 명령을 실행합니다.

    $ velero describe restore <restore_name> --details 1
    1
    복원의 이름을 지정합니다.

4.9.1.2. Restore CR을 생성

Restore CR을 생성하여 Backup CR(사용자 정의 리소스)을 복원합니다.

사전 요구 사항

  • OADP(Data Protection) Operator를 위한 OpenShift API를 설치해야 합니다.
  • 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 3
    1
    백업 CR의 이름입니다.
    2
    선택 사항: 복원 프로세스에 포함할 리소스 배열을 지정합니다. 리소스는 바로 가기(예: Pod의 경우) 또는 정규화된일 수 있습니다. 지정하지 않으면 모든 리소스가 포함됩니다.
    3
    선택 사항: restorePVs 매개변수를 false 로 설정하여 VolumeSnapshot of Container Storage Interface(CSI) 스냅샷에서 PersistentVolumes 복원을 끄거나 VolumeSnapshotLocation 이 구성된 경우 기본 스냅샷에서 설정할 수 있습니다.
  2. 다음 명령을 입력하여 Restore CR의 상태가 Completed 인지 확인합니다.

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

    $ oc get all -n <namespace> 1
    1
    백업한 네임스페이스입니다.
  4. 볼륨과 함께 DeploymentConfig 를 복원하거나 복원 후 후크를 사용하는 경우 다음 명령을 입력하여 dc-post-restore.sh 정리 스크립트를 실행합니다.

    $ bash dc-restic-post-restore.sh -> dc-post-restore.sh
    참고

    복원 프로세스 중에 OADP Velero 플러그인은 DeploymentConfig 오브젝트를 축소하고 Pod를 독립 실행형 포드로 복원합니다. 이 작업은 클러스터가 복원 시 복원된 DeploymentConfig Pod를 즉시 삭제하지 않고 복원 및 복원 후 후크로 복원된 Pod에서 작업을 완료할 수 있도록 하기 위해 수행됩니다. 아래에 표시된 정리 스크립트는 이러한 연결이 끊긴 Pod를 제거하고 적절한 복제본 수로 DeploymentConfig 오브젝트를 다시 확장합니다.

    예 4.1. DC-restic-post-restore.sh dc-post-restore.sh 정리 스크립트

    #!/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}"
    }
    
    if [[ $# -ne 1 ]]; then
        echo "usage: ${BASH_SOURCE} restore-name"
        exit 1
    fi
    
    echo "restore: $1"
    
    label=$(label_name $1)
    echo "label:   $label"
    
    echo Deleting disconnected restore pods
    oc delete pods --all-namespaces -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.9.1.3. 복원 후크 생성

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
    선택 사항: 시간 초과는 Velero가 initContainers 가 완료될 때까지 대기하는 최대 시간을 지정합니다.
    5
    선택 사항: 컨테이너를 지정하지 않으면 Pod의 첫 번째 컨테이너에서 명령이 실행됩니다.
    6
    이는 추가 중인 init 컨테이너의 진입점입니다.
    7
    선택 사항: 컨테이너가 준비될 때까지 대기하는 시간입니다. 컨테이너가 시작되고 동일한 컨테이너의 이전 후크가 완료될 때까지 충분히 길어야 합니다. 설정하지 않으면 복원 프로세스가 무기한 대기합니다.
    8
    선택 사항: 명령을 실행할 때까지 대기하는 시간입니다. 기본값은 30s 입니다.
    9
    오류 처리에 허용되는 값은 FailContinue 입니다.
    • continue: 명령 실패만 기록합니다.
    • 실패: Pod의 모든 컨테이너에서 복구 후크를 더 이상 실행하지 않습니다. Restore CR의 상태는 partiallyFailed 입니다.
중요

FSB(파일 시스템 백업) 복원 작업 중에 ImageStream 을 참조하는 Deployment 리소스가 제대로 복원되지 않습니다. FSB를 실행하는 복원된 Pod 및 postHook 은 조기에 종료됩니다.

이는 복원 작업 중에 OpenShift 컨트롤러에서 업데이트된 ImageStreamTag 해시로 Deployment 리소스의 spec.template.spec.containers[0].image 필드를 업데이트하기 때문에 발생합니다. 이번 업데이트에서는 새 Pod의 롤아웃을 트리거하여 velero 가 FSB를 실행하는 Pod와 복원 후 후크를 종료합니다. 이미지 스트림 트리거에 대한 자세한 내용은 "이미지 스트림 변경에 대한 업데이트 트리거"를 참조하십시오.

이 동작에 대한 해결방법은 2단계 복원 프로세스입니다.

  1. 먼저 Deployment 리소스를 제외한 복원을 수행합니다. 예를 들면 다음과 같습니다.

    $ velero restore create <RESTORE_NAME> \
      --from-backup <BACKUP_NAME> \
      --exclude-resources=deployment.apps
  2. 첫 번째 복원이 성공한 후 다음 리소스를 포함하여 두 번째 복원을 수행합니다. 예를 들면 다음과 같습니다.

    $ velero restore create <RESTORE_NAME> \
      --from-backup <BACKUP_NAME> \
      --include-resources=deployment.apps
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.