规划一组恢复

本文档介绍了如何在 Google Distributed Cloud (GDC) 网闸隔离配置中创建、修改和删除恢复方案。

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

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

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

准备工作

申请 IAM 角色

如需创建恢复方案,请让您的 IAM 组织管理员为您授予用户集群备份管理员 (user-cluster-backup-admin) 角色。此角色可创建、获取、列出、监视、更新、修补和删除用户集群中的备份资源,例如备份方案和恢复方案。

如果您是应用操作员,请让具有用户集群备份管理员权限的管理员为您创建恢复方案。

创建恢复方案

使用 GDC 控制台或 API 创建恢复方案。

控制台

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击集群备份。
  3. 点击创建恢复方案。
  4. 在恢复方案基本信息部分,完成以下步骤,然后点击下一步:
    1. 在恢复方案名称中,输入恢复方案的名称。
    2. (可选)在恢复方案说明中,输入恢复方案的说明。
    3. 在来源集群列表中,选择恢复方案的来源集群。
    4. 在项目列表中,选择恢复方案的项目。
    5. 选择附加到源集群的项目。
    6. 在备份方案字段中,为与要恢复的备份相对应的现有集群选择一个备份方案。
    7. 在目标集群字段中,选择要恢复备份的目标集群。
  5. 在选择命名空间型资源部分,完成以下步骤,然后点击下一步:
    1. 选择要恢复的命名空间:
      1. 点击选定的命名空间型资源,指定要恢复的备份中的命名空间。
        1. 点击修改集群命名空间,然后点击添加集群命名空间以输入命名空间。
      2. 点击选定的受保护应用,通过指定命名空间和应用名称来添加资源。
    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: RESTORE_PLAN_NAME
  namespace:  PROJECT_NAME
spec:
  targetCluster:
    targetClusterType: UserCluster
    targetClusterName:
      kind: "Cluster"
      name: CLUSTER_NAME
  description: RESTORE_PLAN_DESCRIPTION
  clusterBackupPlanName: CLUSTER_BACKUP_PLAN_NAME
  clusterRestoreConfig:
    volumeDataRestorePolicy: RestoreVolumeDataFromBackup
    clusterResourceConflictPolicy: UseBackupVersion
    namespacedResourceRestoreMode: DeleteAndRestore
    namespacedResourceRestoreScope:
      selectedNamespaces:
        namespaces: [NAME_SPACE]
    clusterBackupRepositoryRef: CLUSTER_BACKUP_REPOSITORY
    substitutionRules:
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE
      - newValue: NEW_CONFIG_VALUE
        originValuePattern: VALUE_PATTERN
        target:
          groupKinds:
          jsonPath: '{.metadata.name}'
          namespaces:
          - NAME_SPACE

替换以下内容:

  • 将 RESTORE_PLAN_NAME 替换为恢复方案的名称。
  • 将 PROJECT_NAME 替换为您的 GDC 项目的名称。
  • 将 CLUSTER_NAME 替换为您的集群名称。

此示例使用以下值:


值

属性

说明
targetClusterName 与此方案关联的项目中的来源集群的名称。
description 用户提供的 ClusterRestorePlan 用途说明。
clusterBackupPlanName 要恢复的 ClusterBackupPlan 的名称。ClusterBackupPlan 必须与 ClusterRestorePlan 位于同一命名空间中。
clusterRestoreConfig 恢复过程的配置。
volumeDataRestorePolicy 指定以下其中一项:
  • NoVolumeDataRestoration:PV/PVC 不会恢复。
  • RestoreVolumeDataFromBackup:系统会根据备份创建新的 PV 和 PVC。
  • ReuseVolumeHandleFromBackup:会创建新的 PV,但会尝试使用其原始 PV 恢复 PVC。适用于恢复到备份来源的同一集群。
clusterResourceConflictPolicy 指定用于处理集群资源冲突(例如,资源已存在于集群中)的行为。指定以下其中一项:
  • UseExistingVersion:发生冲突时不会覆盖现有资源
  • UseBackupVersion:在发生冲突时删除并重新创建现有集群资源。目标集群中现有的集群级资源将被备份中的版本覆盖。这个选项存在风险,如果使用不当,可能会导致意外丢失数据。例如,删除自定义资源定义会导致 Kubernetes 删除相应类型的所有自定义资源。
namespacedResourceRestoreMode 处理要恢复的命名空间型资源集已存在于目标集群中的情况。指定以下其中一项:
  • DeleteAndRestore:当遇到冲突的顶级资源(例如 Namespaces 或 ProtectedApplications)时,这会首先触发删除冲突资源及其所有引用资源,然后再从 Backup 恢复资源。仅当您打算将集群的某些部分还原到较早状态时,才使用此模式。
  • FailOnConflict:如果在恢复过程开始时或恢复过程中遇到冲突的顶级资源(例如 Namespace 或 ProtectedApplication 资源),则 Restore 会失败。
  • MergeSkipOnConflict:如果在恢复过程中遇到冲突的资源,此模式会跳过从备份中恢复冲突的资源,并继续恢复集群中不存在的其他资源。
  • MergeReplaceOnConflict:如果在恢复过程中遇到冲突的资源,此模式会替换备份中冲突的资源,并继续恢复集群中不存在的其他资源。
namespacedResourceRestoreScope 指定允许恢复哪些 Namespaces 或 ProtectedApplications。
  • selectedApplications 将受保护的应用与此恢复操作相关联。
  • selectedNamespaces 包含 NAME_SPACE,用于指定要从备份中恢复的命名空间。
clusterBackupRepositoryRef 指定用于存储 Restore 资源的仓库。此代码库可以与备份来源的代码库不同。代码库必须是集群中的 ReadWrite 代码库。
substitutionRules 在恢复期间替换备份的 Kubernetes 资源中的值的规则。空列表表示不发生替换。 替换规则会按照定义的顺序依次应用。 此顺序非常重要,因为一条规则所做的更改可能会影响后续规则的匹配逻辑。每条规则都指定了 target、要匹配的 originValuePattern (VALUE_PATTERN) 以及要替换成的 newValue (NEW_CONFIG_VALUE)。target 可以包含 namespaces,以限定规则范围 (NAME_SPACE)。

创建 ClusterRestorePlan 后,具有 Backup Creator 角色的用户可以手动恢复备份。

查看恢复方案

使用 GDC 控制台查看恢复方案:

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击集群备份。
  3. 点击选择项目,根据您的角色选择组织或项目:
    1. 用户集群备份管理员:选择一个组织以查看该组织中的所有恢复方案,或选择一个项目以查看该项目中的所有恢复方案。
    2. 备份创建者:选择一个项目,即可查看该项目中的所有恢复方案。
  4. 点击恢复方案标签页。
  5. 点击列表中的恢复方案,查看其详细信息。

修改恢复方案

如果与您要修改的恢复方案关联的备份仓库在创建恢复方案时,关联的集群(只读)字段中有值,则该恢复方案会创建两次。恢复方案会传播到读写集群和只读集群。

修改由同时设置了读写集群和只读集群的备份仓库拥有的恢复方案时,您必须修改将 TARGET CLUSTER 设置为读写集群的恢复方案。

使用 GDC 控制台修改恢复方案:

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击集群备份。
  3. 点击选择项目,根据您的角色选择组织或项目:
    1. 用户集群备份管理员:选择一个组织以查看该组织中的所有恢复方案,或选择一个项目以查看该项目中的所有恢复方案。
    2. 备份创建者:选择一个项目,即可查看该项目中的所有恢复方案。
  4. 点击恢复方案标签页。
  5. 点击要修改的恢复方案的名称。
  6. 点击方案配置标签页,查看可修改的字段。
  7. 点击命名空间型资源旁边的 “修改”图标,以修改该资源:

    1. 在选择命名空间型资源部分,选择要恢复备份中的哪些命名空间型资源:

      1. 选择选定的命名空间型资源,以从备份中的选定命名空间恢复资源:

        1. 选择修改集群命名空间以选择集群命名空间。
        2. 在集群命名空间 1 字段中,输入命名空间的名称。
        3. 点击保存按钮。
      2. 选择所选受保护应用,以从备份中的所选受保护应用恢复资源:

        1. 选择修改受保护的应用,以选择命名空间和受保护的应用。
        2. 在命名空间 1 字段中,输入命名空间的名称。
        3. 在受保护的应用 1 字段中,输入受保护应用的名称。
        4. 点击保存按钮。
  8. 点击集群范围的资源旁边的 “修改”图标,以修改该资源:

    1. 可选:在选择集群级资源部分中,通过指定 API 组和 GroupKinds 来选择要恢复的集群级资源,并决定必须如何解决冲突:

      1. 选择不恢复集群级资源,以从恢复流程中移除集群级资源。
      2. 选择按 GroupKind 恢复集群级资源,以按指定的 GroupKind 恢复资源:

      3. 如需指定 GroupKind,请点击修改 GroupKind 按钮。

      4. 点击添加 GroupKind 按钮。

      5. 输入GroupKind的名称。

      6. 点击保存按钮。

    2. 在冲突处理部分中,确定当目标集群中已存在相应资源时要执行的操作:

      1. 选择保留现有资源,以在集群中创建尚不存在的资源。
      2. 选择覆盖现有资源,以删除找到的所有现有资源,并将此资源替换为恢复的资源。
    3. 点击保存按钮以确认更改。

  9. 在替换规则部分中,点击添加新规则按钮以添加新的替换规则:

    1. 在集群命名空间字段中,输入要应用此替换规则的集群命名空间的名称。
    2. 点击添加 GroupKind 按钮,将此规则应用于特定 GroupKind 对象。
    3. 在 JSON 路径字段中,以 JSON 格式输入要替换的资源属性的路径。
    4. 在原始值格式字段中,输入与属性原始值匹配的正则表达式。
    5. 在新值字段中,输入要替换目标字段的值。如果此字段为空,则会从资源中移除目标字段。
    6. 点击保存按钮,完成新替换规则的创建。
  10. 在替换规则部分中,点击 “修改”图标以修改现有替换规则。

  11. 在替换规则部分中,点击 “删除”图标可删除现有替换规则。

删除恢复方案

您可以通过 GDC 控制台删除 RestorePlans,也可以直接从 Kubernetes API 服务器中删除资源。这会从对象存储区中清理所有关联的 RestorePlan 工件。

控制台

  1. 登录 GDC 控制台。
  2. 在导航菜单中,点击集群备份。
  3. 点击选择项目,根据您的角色选择组织或项目:
    1. 用户集群备份管理员:选择一个组织以查看该组织中的所有恢复方案,或选择一个项目以查看该项目中的所有恢复方案。
    2. 备份创建者:选择一个项目,即可查看该项目中的所有恢复方案。
  4. 点击恢复方案标签页。
  5. 点击要删除的恢复方案的名称。
  6. 点击 删除按钮。
  7. 在字段中输入恢复方案的名称。
  8. 点击删除按钮,确认删除此恢复方案。

API

删除恢复方案资源:

kubectl delete clusterRestoreplan RESTORE_PLAN_NAME -n NAMESPACE

替换以下内容:

  • RESTORE_PLAN_NAME:恢复方案的名称。
  • NAMESPACE:包含恢复方案的命名空间。

后续步骤