规划一组恢复

本页面介绍如何在 Google Distributed Cloud (GDC) 气隙环境中创建、修改和删除恢复方案。

恢复方案是为相应备份行预配置的恢复场景。恢复方案可以向具有“备份创建者”角色的用户分配使用这些配置的权限。

发生突发事件时,备份创建者可以快速且独立地恢复备份。例如,已部署应用中的软件更新可能会使永久性数据损坏,从而将应用命名空间置于无效状态,这需要恢复。

在恢复期间,您可以选择应用一组替换规则,用于匹配一组资源并针对新值替换这些资源上属性的当前值。例如,替换规则可以在恢复期间更改备份资源的命名空间,以将工作负载从一个命名空间迁移到另一个命名空间。

准备工作

如需创建恢复方案,您必须具备以下条件:

  • 必要的身份和访问权限角色:

    • 用户集群备份管理员:管理用户集群中的备份资源,例如备份和恢复计划。请让您的组织 IAM 管理员为您授予 User Cluster Backup Admin (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. 点击修改 GroupKind,添加更多集群级资源。 输入 API 组对象种类,以匹配这些类型中的资源。
    3. 点击保留现有资源,以在目标集群上不存在资源时创建资源。
    4. 点击覆盖目标集群中的资源,以删除目标集群中已存在的资源,并恢复备份中的副本。
  7. 可选:在添加替换规则部分中,完成以下步骤,然后点击下一步
    1. 点击添加新规则
    2. 集群命名空间框中,输入命名空间列表,以匹配这些命名空间中的资源。
    3. 如需添加 GroupKind,请点击添加 GroupKind,然后输入 API 组对象种类,以匹配这些类型中的资源。
    4. JSON 路径字段中,输入 JSON 路径,用于标识要应用替换的匹配资源中的字段。
    5. 原始值模式字段中,输入要与新值进行比较的原始模式。
    6. 新值字段中,输入新值以替换匹配属性的当前值。
    7. 点击保存
  8. 点击创建

API

创建 ClusterRestorePlan 自定义资源,以规划从现有 ClusterBackupPlan 进行的恢复。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 的名称。ClusterBackupPlan必须与ClusterRestorePlan位于同一命名空间中。
targetClusterName 与相应方案关联的项目中源集群的名称。
description 用户提供的 ClusterRestorePlan 的用途说明。
clusterRestoreConfig 恢复流程的配置。
clusterBackupRepositoryRef 指定用于存储 Restore 资源的代码库。此代码库可以不同于备份来源的代码库。代码库必须是集群中的 ReadWrite 代码库。
clusterResourceConflictPolicy 指定用于处理集群资源冲突的行为,例如资源是否已存在于集群中。指定以下其中一项:
  • UseExistingVersion:在发生冲突时不覆盖现有资源
  • UseBackupVersion:在发生冲突时,删除并重新创建现有集群资源。这个选项存在风险,如果使用不当,可能会导致意外丢失数据。例如,删除自定义资源定义会导致 Kubernetes 删除相应类型的所有自定义资源。
volumeDataRestorePolicy 指定以下其中一项:
  • NoVolumeDataRestoration:系统不会恢复 PV/PVC。
  • RestoreVolumeDataFromBackup:从备份中创建新的 PV 和 PVC。
  • ReuseVolumeHandleFromBackup:会创建新的 PV,但会尝试使用 PVC 的原始 PV 来恢复 PVC。旨在恢复到进行备份的同一集群。
namespacedResourceRestoreMode 处理要恢复的命名空间型资源集已存在于目标集群中的情况。指定以下任一值:
  • DeleteAndRestore:当遇到冲突的顶级资源(例如 NamespacesProtectedApplications)时,此值首先会触发删除冲突的资源及其所有被引用资源,然后再从 Backup 恢复资源。仅当您打算将集群的某一部分恢复到较早的状态时,才使用此模式。
  • FailOnConflict:如果在恢复过程开始时或恢复过程中遇到冲突的顶级资源(例如 NamespaceProtectedApplication 资源),Restore 会失败。
  • MergeSkipOnConflict:如果在恢复过程中遇到冲突的资源,此模式会跳过恢复备份中冲突的资源,并继续恢复集群中不存在的其他资源。
  • MergeReplaceOnConflict:如果在恢复过程中遇到冲突的资源,此模式会替换备份中冲突的资源,并继续恢复集群中不存在的其他资源。
namespacedResourceRestoreScope 指定允许恢复哪些 NamespacesProtectedApplications
  • 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 按钮。

      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:包含恢复方案的命名空间。

后续步骤