복원 집합 계획

이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭에서 복원 계획을 생성, 수정, 삭제하는 방법을 설명합니다.

복원 계획은 해당 백업 줄에 대해 미리 구성된 복원 시나리오입니다. 복원 계획은 백업 생성자 역할이 있는 사용자가 이러한 구성을 사용하도록 권한을 할당할 수 있습니다.

백업 생성자는 이슈가 발생했을 때 빠르고 독립적인 방식으로 백업을 복원할 수 있습니다. 예를 들어 배포된 애플리케이션에서 소프트웨어 업데이트로 인해 영구 데이터가 손상되어, 애플리케이션 네임스페이스 상태가 잘못되고, 복원이 필요할 수 있습니다.

복원 중에는 일치하는 리소스 집합을 확인하고 해당 리소스에서 특정 속성의 현재 값을 새 값으로 바꾸는 대체 규칙을 선택적으로 적용할 수 있습니다. 예를 들어 대체 규칙은 복원 중에 백업된 리소스의 네임스페이스를 변경하여 한 네임스페이스에서 다른 네임스페이스로 워크로드를 이전할 수 있습니다.

시작하기 전에

복원 계획을 만들려면 다음이 필요합니다.

  • 필요한 ID 및 액세스 역할:

    • 사용자 클러스터 백업 관리자: 사용자 클러스터의 백업 및 복원 계획과 같은 백업 리소스를 관리합니다. 조직 IAM 관리자에게 사용자 클러스터 백업 관리자 (user-cluster-backup-admin) 역할을 부여해 달라고 요청하세요. 자세한 내용은 역할 정의를 참고하세요.
    • 애플리케이션 운영자인 경우 사용자 클러스터 백업 관리자 권한이 있는 관리자에게 복원 계획을 만들어 달라고 요청하세요.

복원 계획 만들기

GDC 콘솔 또는 API를 사용하여 복원 계획을 만듭니다.

콘솔

  1. GDC 콘솔에 로그인합니다.
  2. 탐색 메뉴에서 Backup for Clusters를 클릭합니다.
  3. 복원 계획 만들기를 클릭합니다.
  4. 복원 계획 기본사항 섹션에서 다음 단계를 완료하고 다음을 클릭합니다.
    1. 복원 계획 이름에 복원 계획 이름을 입력합니다.
    2. (선택사항) 복원 계획 설명에 복원 계획에 대한 설명을 입력합니다.
    3. 소스 클러스터 목록에서 복원 계획의 소스 클러스터를 선택합니다.
    4. 프로젝트 목록에서 복구 계획의 프로젝트를 선택합니다.
    5. 소스 클러스터에 연결된 프로젝트를 선택합니다.
    6. 백업 계획 필드에서 복원하려는 백업에 해당하는 기존 클러스터의 백업 계획을 선택합니다.
    7. 타겟 클러스터 필드에서 백업을 복원할 타겟 클러스터를 선택합니다.
  5. 네임스페이스 범위 리소스 선택 섹션에서 다음 단계를 완료하고 다음을 클릭합니다.
    1. 복원할 네임스페이스를 선택합니다.
      1. 백업에서 모든 네임스페이스 리소스를 복원하려면 모든 네임스페이스 범위 리소스를 클릭합니다.
      2. 백업에서 복원할 네임스페이스를 지정하려면 선택한 네임스페이스 범위 리소스를 클릭합니다.
        1. 클러스터 네임스페이스 수정을 클릭한 다음 클러스터 네임스페이스 추가를 클릭하여 네임스페이스를 입력합니다.
      3. 네임스페이스 및 애플리케이션 이름을 지정하여 리소스를 추가하려면 선택된 보호되는 애플리케이션을 클릭합니다.
    2. 충돌 처리 방법을 선택합니다.
      1. 백업에서 복원 대상으로 지정된 네임스페이스가 대상 클러스터에 이미 있는 경우 복원이 실패하도록 하려면 충돌 시 복원 실패 (비파괴적)를 클릭합니다.
      2. 백업에서 복원 대상으로 지정된 네임스페이스가 대상 클러스터에 이미 있는 경우 새 네임스페이스를 복원하기 전 기존 네임스페이스를 삭제하려면 롤백(파괴적)을 클릭합니다.
    3. 볼륨 데이터 복원 방법을 선택합니다.
      1. 새 영구 디스크의 백업에서 볼륨 데이터를 복원하려면 새 볼륨을 프로비저닝하고 백업에서 볼륨 데이터 복원을 클릭합니다.
      2. 새 영구 볼륨을 프로비저닝하려면 볼륨 데이터를 복원하지 않음을 클릭합니다. 대상 클러스터에 PersistentVolumeClaim 요구사항을 충족하는 결합되지 않은 영구 볼륨이 포함된 경우에는 클러스터가 볼륨에 결합됩니다.
      3. 볼륨 백업 데이터를 복원하지 않으려면 데이터가 포함된 기존 볼륨 재사용을 클릭합니다. 모든 PersistentVolumeClaims는 기존 영구 디스크를 참조하는 볼륨에 결합됩니다.
  6. 선택사항: 클러스터 범위 리소스 선택 섹션에서 다음 단계를 완료하고 다음을 클릭합니다.
    1. 기존 버전의 리소스를 그대로 두려면 클러스터 범위 리소스를 복원하지 않음을 클릭합니다.
    2. GroupKind별로 클러스터 범위 리소스 복원을 클릭하여 이러한 리소스를 복원합니다.
      1. 클러스터 범위 리소스를 더 추가하려면 GroupKinds 수정을 클릭합니다. 해당 유형 내에 있는 것과 일치하는 리소스를 찾을 수 있도록 API 그룹객체 종류를 입력합니다.
    3. 대상 클러스터에 리소스가 없는 경우 리소스를 만들려면 기존 리소스 보존을 클릭합니다.
    4. 대상 클러스터에 리소스가 이미 있는 경우 리소스를 삭제하려면 대상 클러스터의 리소스 덮어쓰기를 클릭하고 백업에서 복사본을 복원합니다.
  7. 선택사항: 대체 규칙 추가 섹션에서 다음 단계를 완료하고 다음을 클릭합니다.
    1. 새 규칙 추가를 클릭합니다.
    2. 클러스터 네임스페이스 상자에 해당 네임스페이스 내의 리소스와 일치하는 네임스페이스 목록을 입력합니다.
    3. GroupKind를 추가하려면 GroupKind 추가를 클릭하고 API 그룹객체 종류를 입력하여 해당 유형 내에 있는 것과 일치하는 리소스를 찾습니다.
    4. JSON 경로 필드에 일치하는 리소스 내에서 대체가 적용되는 필드를 식별하는 JSON 경로를 입력합니다.
    5. 원래 값 패턴 필드에 새 값과 비교할 원래 패턴을 입력합니다.
    6. 새 값 필드에 일치하는 속성의 현재 값을 바꿀 새 값을 입력합니다.
    7. 저장을 클릭합니다.
  8. 만들기를 클릭합니다.

API

기존 ClusterBackupPlan에서 복원을 계획하는 ClusterRestorePlan 커스텀 리소스를 만듭니다. ClusterRestorePlan는 백업 생성자가 복원할 수 있는 정확한 리소스 및 네임스페이스 집합을 할당합니다. ClusterRestorePlan의 예는 다음과 같습니다.

apiVersion: backup.gdc.goog/v1
kind: ClusterRestorePlan
metadata:
  name: restoreplan-sample
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: "user-vm-1"
  description: "restores test clusters"
  clusterBackupPlanName: "backupplan-sample"
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: ["nginx-2"]
    clusterBackupRepositoryRef: "backup-repository"
    substitutionRules:
      - newValue: "newhippo"
        originValuePattern: game-config-2
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2
      - newValue: "hippo"
        originValuePattern: game-config
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - nginx-2

PROJECT_NAME을 GDC 프로젝트 이름으로 바꿉니다.

이 예시에서는 다음 값을 사용합니다.



속성

설명
clusterBackupPlanName 복원할 ClusterBackupPlan의 이름입니다. ClusterBackupPlanClusterRestorePlan와 동일한 네임스페이스에 있어야 합니다.
targetClusterName 이 계획이 연결된 프로젝트의 소스 클러스터 이름입니다.
description ClusterRestorePlan의 목적에 대해 사용자가 제공한 설명입니다.
clusterRestoreConfig 복원 프로세스의 구성입니다.
clusterBackupRepositoryRef Restore 리소스를 저장할 저장소를 지정합니다. 이 저장소는 백업이 생성된 저장소와 다를 수 있습니다. 저장소는 클러스터의 ReadWrite 저장소여야 합니다.
clusterResourceConflictPolicy 클러스터에 리소스가 이미 있는 경우와 같은 클러스터 리소스 충돌을 처리하는 동작을 지정합니다. 다음 중 하나를 지정합니다.
  • UseExistingVersion: 충돌 시 기존 리소스를 덮어쓰지 않음
  • UseBackupVersion: 충돌 시 기존 클러스터 리소스를 삭제하고 다시 만듭니다. 이 옵션을 부적절하게 사용할 경우 의도하지 않은 데이터 손실이 발생할 수 있는 위험한 옵션입니다. 예를 들어 커스텀 리소스 정의를 삭제하면 Kubernetes가 해당 유형의 모든 커스텀 리소스를 삭제합니다.
volumeDataRestorePolicy 다음 중 하나를 지정합니다.
  • NoVolumeDataRestoration: PV/PVC가 복원되지 않습니다.
  • RestoreVolumeDataFromBackup: 새 PV와 PVC가 백업에서 생성됩니다.
  • ReuseVolumeHandleFromBackup: 새 PV를 만들지만 원래 PV를 사용하여 PVC를 복원하려고 시도합니다. 백업이 수행된 동일한 클러스터로 복원하기 위한 것입니다.
namespacedResourceRestoreMode 복원되는 네임스페이스 리소스 집합이 대상 클러스터에 이미 있는 상황을 처리합니다. 다음 중 하나를 지정합니다.
  • DeleteAndRestore: Namespaces 또는 ProtectedApplications와 같은 충돌하는 최상위 리소스가 발견되면 먼저 충돌하는 리소스와 참조된 모든 리소스가 삭제된 후 Backup에서 리소스가 복원됩니다. 클러스터의 일부를 이전 상태로 되돌리려는 경우에만 이 모드를 사용하세요.
  • FailOnConflict: 복원 프로세스 시작 시 또는 복원 프로세스 중에 Namespace 또는 ProtectedApplication 리소스와 같은 충돌하는 최상위 리소스가 발견되면 Restore이 실패합니다.
  • MergeSkipOnConflict: 복원 프로세스 중에 충돌하는 리소스가 발견되면 이 모드는 백업에서 충돌하는 리소스의 복원을 건너뛰고 클러스터에 없는 다른 리소스의 복원을 계속합니다.
  • MergeReplaceOnConflict: 복원 프로세스 중에 충돌하는 리소스가 발견되면 이 모드는 백업에서 충돌하는 리소스를 대체하고 클러스터에 없는 다른 리소스의 복원을 계속합니다.
namespacedResourceRestoreScope 복원에 허용되는 Namespaces 또는 ProtectedApplications을 지정합니다.
  • selectedApplications는 보호된 애플리케이션을 이 복원과 연결합니다.
  • selectedNamespaces는 네임스페이스를 이 복원과 연결합니다.
substitutionRules 복원 중에 백업된 Kubernetes 리소스의 값을 대체하는 규칙입니다. 빈 목록은 대체가 발생하지 않음을 의미합니다. 대체 규칙은 정의된 순서대로 순차적으로 적용됩니다. 이 순서는 중요합니다. 규칙에 의해 변경된 사항이 후속 규칙의 일치 로직에 영향을 미칠 수 있기 때문입니다.

ClusterRestorePlan가 생성된 후 백업 생성자 역할이 있는 사용자는 백업을 수동으로 복원할 수 있습니다.

복원 계획 보기

GDC 콘솔을 사용하여 복원 계획을 확인합니다.

  1. GDC 콘솔에 로그인합니다.
  2. 탐색 메뉴에서 Backup for Clusters를 클릭합니다.
  3. 프로젝트 선택을 클릭하여 역할에 따라 조직 또는 프로젝트를 선택합니다.
    1. 사용자 클러스터 백업 관리자: 조직을 선택하여 조직의 모든 복원 계획을 확인하거나 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
    2. 백업 생성자: 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
  4. 복원 계획 탭을 클릭합니다.
  5. 목록에서 복원 계획을 클릭하여 세부정보를 확인합니다.

복원 계획 수정

수정하려는 복원 계획과 연결된 백업 저장소의 연결된 클러스터(읽기 전용) 필드에 복원 계획이 생성될 때 값이 있으면 복원 계획이 두 번 생성됩니다. 복원 계획은 읽기-쓰기 및 읽기 전용 클러스터 모두에 전파됩니다.

읽기-쓰기 및 읽기 전용 클러스터가 모두 설정된 백업 저장소에서 소유한 복원 계획을 수정할 때는 TARGET CLUSTER이 읽기-쓰기 클러스터로 설정된 복원 계획을 수정해야 합니다.

GDC 콘솔을 사용하여 복원 계획을 수정하려면 다음 단계를 따르세요.

  1. GDC 콘솔에 로그인합니다.
  2. 탐색 메뉴에서 Backup for Clusters를 클릭합니다.
  3. 프로젝트 선택을 클릭하여 역할에 따라 조직 또는 프로젝트를 선택합니다.
    1. 사용자 클러스터 백업 관리자: 조직을 선택하여 조직의 모든 복원 계획을 확인하거나 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
    2. 백업 생성자: 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
  4. 복원 계획 탭을 클릭합니다.
  5. 수정할 복원 계획의 이름을 클릭합니다.
  6. 요금제 구성 탭을 클릭하여 수정할 수 있는 필드를 확인합니다.
  7. 네임스페이스 리소스 옆에 있는 수정 아이콘을 클릭하여 해당 리소스를 수정합니다.

    1. 네임스페이스 범위 리소스 선택 섹션에서 백업에서 복원할 네임스페이스 범위 리소스를 선택합니다.

      1. 백업에서 모든 네임스페이스 범위 리소스를 복원하려면 모든 네임스페이스 범위 리소스를 선택합니다.
      2. 선택한 네임스페이스 범위 리소스를 선택하여 백업에서 선택한 네임스페이스의 리소스를 복원합니다.

        1. 클러스터 네임스페이스 수정을 선택하여 클러스터 네임스페이스를 선택합니다.
        2. 클러스터 네임스페이스 1 필드에 네임스페이스 이름을 입력합니다.
        3. 저장 버튼을 클릭합니다.
      3. 선택된 보호되는 애플리케이션을 선택하여 백업에서 선택된 보호되는 애플리케이션의 리소스를 복원합니다.

        1. 보호된 애플리케이션 수정을 선택하여 네임스페이스와 보호된 애플리케이션을 선택합니다.
        2. 네임스페이스 1 필드에 네임스페이스 이름을 입력합니다.
        3. 보호된 애플리케이션 1 필드에 보호된 애플리케이션의 이름을 입력합니다.
        4. 저장 버튼을 클릭합니다.
  8. 클러스터 범위 리소스 옆에 있는 수정 아이콘을 클릭하여 해당 리소스를 수정합니다.

    1. 선택사항: 클러스터 범위 리소스 선택 섹션에서 API 그룹과 GroupKinds를 지정하여 복원할 클러스터 범위 리소스를 선택하고 충돌을 해결할 방법을 결정합니다.

      1. 복원 프로세스에서 클러스터 범위 리소스를 삭제하려면 클러스터 범위 리소스를 복원하지 않음을 선택합니다.
      2. 지정된 GroupKind로 리소스를 복원하려면 GroupKind별로 클러스터 범위 리소스 복원을 선택합니다.

      3. GroupKind를 지정하려면 Edit GroupKind 버튼을 클릭합니다.

      4. Add GroupKind(GroupKind 추가) 버튼을 클릭합니다.

      5. GroupKind의 이름을 입력합니다.

      6. 저장 버튼을 클릭합니다.

    2. 충돌 처리 섹션에서 대상 클러스터에 리소스가 이미 있는 경우 수행할 작업을 결정합니다.

      1. 클러스터에 리소스가 아직 없는 경우 리소스를 만들려면 기존 리소스 보존을 선택합니다.
      2. 기존 리소스 덮어쓰기를 선택하여 기존 리소스를 삭제하고 이 리소스를 복원된 리소스로 바꿉니다.
    3. 저장 버튼을 클릭하여 변경사항을 확인합니다.

  9. 대체 규칙 섹션에서 새 규칙 추가 버튼을 클릭하여 새 대체 규칙을 추가합니다.

    1. 클러스터 네임스페이스 필드에 이 대체 규칙을 적용할 클러스터 네임스페이스의 이름을 입력합니다.
    2. GroupKind 추가 버튼을 클릭하여 특정 GroupKind 객체에 이 규칙을 적용합니다.
    3. JSON 경로 필드에 대체하려는 리소스 속성의 경로를 JSON 형식으로 입력합니다.
    4. 원래 값 패턴 필드에 속성의 원래 값과 일치하는 정규 표현식을 입력합니다.
    5. 새 값 필드에 타겟 필드를 대체할 값을 입력합니다. 이 필드가 비어 있으면 대상 필드가 리소스에서 삭제됩니다.
    6. 저장 버튼을 클릭하여 새 대체 규칙 만들기를 완료합니다.
  10. 대체 규칙 섹션에서 수정 아이콘을 클릭하여 기존 대체 규칙을 수정합니다.

  11. 대체 규칙 섹션에서 삭제 아이콘을 클릭하여 기존 대체 규칙을 삭제합니다.

복원 계획 삭제

RestorePlans는 GDC 콘솔을 통해 삭제하거나 Kubernetes API 서버에서 직접 리소스를 삭제하여 삭제할 수 있습니다. 이렇게 하면 객체 스토리지에서 연결된 RestorePlan 아티팩트가 정리됩니다.

콘솔

  1. GDC 콘솔에 로그인합니다.
  2. 탐색 메뉴에서 Backup for Clusters를 클릭합니다.
  3. 프로젝트 선택을 클릭하여 역할에 따라 조직 또는 프로젝트를 선택합니다.
    1. 사용자 클러스터 백업 관리자: 조직을 선택하여 조직의 모든 복원 계획을 확인하거나 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
    2. 백업 생성자: 프로젝트를 선택하여 프로젝트의 모든 복원 계획을 확인합니다.
  4. 복원 계획 탭을 클릭합니다.
  5. 삭제할 복원 계획의 이름을 클릭합니다.
  6. 삭제 버튼을 클릭합니다.
  7. 필드에 복원 계획 이름을 입력합니다.
  8. 삭제 버튼을 클릭하여 이 복원 계획의 삭제를 확인합니다.

API

복원 계획 리소스를 삭제합니다.

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

다음을 바꿉니다.

  • RESTORE_PLAN_NAME: 복원 계획의 이름입니다.
  • NAMESPACE: 복원 계획이 포함된 네임스페이스입니다.

다음 단계