规划一组恢复


本页面介绍如何创建 Backup for GKE 恢复方案,该方案用于在 Google Kubernetes Engine (GKE) 中恢复备份。

恢复方案是为相应备份行预配置的恢复场景。恢复方案可以向管理员分配使用这些配置的权限。发生突发事件时,这些用户可以快速且独立地恢复备份。例如,已部署应用中的软件更新可能会使永久性数据损坏,从而将应用命名空间置于无效状态,这需要恢复。

在恢复期间,您可以选择应用转换规则,用于匹配一组资源并针对新值替换这些资源上属性的当前值。

准备工作

规划一组备份

所需的角色

如需获得创建和管理恢复方案所需的权限,请让您的管理员为您授予 Backup for GKE Restore Admin (roles/gkebackup.restoreAdmin),该角色是项目的 Backup for GKE Admin (roles/gkebackup.admin) IAM 角色的子集。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建恢复方案

您可以使用 Google Cloud CLI 或 Google Cloud 控制台为备份创建恢复方案。

gcloud

如需创建恢复方案,请运行以下命令:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=NAMESPACED_RESOURCE_RESTORE_MODE \
    --all-namespaces \
    --cluster-resource-conflict-policy=CLUSTER_RESOURCE_CONFLICT_POLICY \
    --cluster-resource-scope-selected-group-kinds=CLUSTER_RESOURCE_SCOPE \
    --volume-data-restore-policy=VOLUME_DATA_RESTORE_POLICY

替换以下内容:

  • RESTORE_PLAN:您要创建的恢复方案的名称。
  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:资源的计算区域,例如 us-central1。请参阅资源位置简介。该位置必须与目标集群所在的区域相同。
  • BACKUP_PLAN:可以使用此恢复方案恢复的备份的来源:
    • projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME
  • CLUSTER:您要将备份恢复到的目标集群的名称:

    • 区域级集群:projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
    • 可用区级集群:projects/PROJECT_ID/locations/ZONE/clusters/CLUSTER_NAME
  • NAMESPACED_RESOURCE_RESTORE_MODE:定义如何处理命名空间型资源的恢复时间冲突。命名空间型资源始终按按命名空间或按 ProtectedApplication 在组中恢复。您可以使用下列任一选项:

    • merge-skip-on-conflict:跳过各个冲突资源。
    • merge-replace-volume-on-conflict:跳过各个冲突资源,但替换底层永久性卷数据。
    • merge-replace-on-conflict:替换各个冲突资源和底层永久性卷数据。
    • delete-and-restore:当目标集群包含计划要恢复到集群中的同一组资源时,系统会删除现有资源组,然后再恢复新资源。
    • fail-on-conflict:如果目标集群中已存在计划要从备份恢复的任何资源组,则恢复将失败。
  • --all-namespaces:恢复备份中的所有命名空间资源。或者指定:

    • --excluded-namespaces,并以 NAMESPACE1,NAMESPACE2,... 形式指定命名空间列表,以恢复除列表中指定命名空间以外的所有命名空间。
    • --selected-applications,并以 NAMESPACE1/APP1,NAMESPACE2/APP2,... 形式指定待恢复的 ProtectedApplications 列表。
    • --selected-namespaces,并以 NAMESPACE1,NAMESPACE2,... 形式指定待恢复的命名空间列表。
    • --no-namespaces,以表明不恢复备份中的任何命名空间资源。此选项不能与 --cluster-resource-scope-no-group-kinds 一同指定。

    在创建恢复方案时,您必须指定其中一个选项。

  • CLUSTER_RESOURCE_CONFLICT_POLICY:定义如何处理选定集群资源的恢复时间冲突。您可以使用下列任一选项:

    • use-existing-version:如果目标集群中已有要恢复的资源,Backup for GKE 会保留现有资源。

    • use-backup-version:如果目标集群中已有要恢复的资源,Backup for GKE 会将现有资源替换为备份中的新资源。

  • --cluster-resource-scope-selected-group-kinds:(可选)以 Group/Kind 格式恢复具有所选群组种类的集群资源。CLUSTER_RESOURCE_SCOPE 定义要恢复的集群资源的 GroupKind。例如 apiextension.k8s.io/CustomResourceDefinition,storage.k8s.io/StorageClass

    或者指定:

    • cluster-resource-scope-all-group-kinds,以选择要恢复的所有集群资源群组种类。
    • cluster-resource-scope-excluded-group-kinds 替换为集群资源群组种类列表,以恢复除列表中指定种类以外的所有集群资源群组种类。
    • cluster-resource-scope-no-group-kinds。此选项不能与 --no-namespaces 一同指定。

    如未指定上述任何选项,系统不会恢复任何集群资源。

  • VOLUME_DATA_RESTORE_POLICY:定义如何为所恢复的卷填充数据。请使用以下选项之一:

    • restore-volume-data-from-backup:新 PV 将使用备份中的相应卷备份数据进行恢复。

    • reuse-volume-handle-from-backup:PV 将使用备份中原始 PV 的卷句柄进行预配。

    • no-volume-data-restoration:PV 将不会恢复。恢复操作只会恢复选定 PVC,并要求相应的存储驱动程序动态预配空白 PV 或将其绑定到带外创建的预配 PV。

如需查看选项的完整列表,请参阅 gcloud beta container backup-restore restore-plans create 文档。

创建一个用于所有命名空间的 RestorePlan

以下命令会创建一个 RestorePlan,用于恢复所有命名空间和集群资源:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=fail-on-conflict \
    --all-namespaces \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-all-group-kinds \
    --volume-data-restore-policy=restore-volume-data-from-backup

创建用于回滚命名空间的 RestorePlan

以下命令会创建一个 RestorePlan,用于从备份回滚 my-ns 命名空间:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=delete-and-restore \
    --selected-namespaces=my-ns \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-selected-group-kinds=apiextension.k8s.io/CustomResourceDefinition,storage.k8s.io/StorageClass \
    --volume-data-restore-policy=restore-volume-data-from-backup

创建 RestorePlan 来回滚 ProtectedApplication,以重新连接原始卷

以下命令会创建 RestorePlan 来回滚 ProtectedApplication my-ns/my-app,以重新连接原始卷:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=delete-and-restore \
    --selected-applications=my-ns/my-app \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-no-group-kinds \
    --volume-data-restore-policy=reuse-volume-handle-from-backup

创建仅恢复集群资源的 RestorePlan

以下命令会创建一个 RestorePlan,用于恢复所有集群资源:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=BACKUP_PLAN \
    --cluster=CLUSTER \
    --namespaced-resource-restore-mode=fail-on-conflict \
    --no-namespaces \
    --cluster-resource-conflict-policy=use-existing-version \
    --cluster-resource-scope-all-group-kinds

控制台

使用以下说明在 Google Cloud 控制台中创建恢复方案:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在导航菜单中,点击 Backup for GKE

  3. 点击创建恢复方案

  4. 为方案命名并选择集群部分中,完成以下操作,然后点击下一步

    1. 输入恢复方案名称和可选说明。
    2. 为与要恢复的备份相对应的现有集群选择一个备份方案。
    3. 选择要恢复备份的目标集群。
  5. 选择命名空间型资源部分,完成以下操作,然后点击下一步

    1. 选择要恢复的命名空间:

      • 点击所有命名空间型资源,恢复备份中的所有命名空间型资源。
        1. 点击“异常”部分下的添加命名空间,以排除备份中的任何命名空间。
      • 点击选定的命名空间型资源,指定要恢复的备份中的命名空间。
      • 点击选定的受保护应用,通过指定命名空间和应用名称来添加资源。
      • 点击没有命名空间型资源,表明不恢复任何命名空间型资源。
    2. 如果选择了任何命名空间型资源,请选择如何处理冲突:

      • 如果已经存在特定资源,点击合并跳过(非破坏性),跳过从备份恢复该资源。
      • 如果已经存在特定资源,点击合并替换卷(破坏性),跳过恢复该资源,但使用卷数据恢复政策替换底层永久性卷。合并替换卷会实现纯数据恢复。
      • 如果已经存在特定资源,点击合并替换(破坏性),按照卷数据恢复政策,将该资源替换为备份中的资源和关联的卷数据。
      • 如果目标集群中已存在计划从备份恢复的任何命名空间,请点击发生冲突时失败(非破坏性)来使恢复失败。
      • 如果目标集群中已存在计划从备份恢复的任何命名空间,请点击回滚(破坏性)以删除现有命名空间。
    3. 选择如何恢复卷数据,然后点击下一步

      • 点击预配新卷并从备份恢复卷数据,在新的永久性磁盘上从备份恢复卷数据。
      • 点击不恢复卷数据以预配新的永久性卷。如果目标集群包含满足 PersistentVolumeClaim 要求的无界限永久性卷,则集群将绑定到该卷。
      • 点击重复使用包含您的数据的现有卷,以恢复卷备份数据。任何 PersistentVolumeClaims 都会绑定到引用现有永久性磁盘的卷。
  6. (可选)在选择集群级资源部分中,完成以下内容,然后点击下一步

    1. 选择要恢复的群组种类:

      • 点击所有集群范围的资源,以恢复备份中的所有集群范围的资源。
        1. 点击“异常”部分下的添加群组种类,以排除备份中的任何集群范围的资源。
      • 点击选定的集群范围的资源,以指定备份中要恢复的集群范围的资源。默认情况下,apiextensions.k8s.io/CustomResourceDefinitionstorage.k8s.io/StorageClass 处于选中状态。点击添加群组种类,以添加更多集群范围的资源。
      • 点击无集群范围的资源,以选择不恢复任何集群资源。
    2. 如果选择了任何集群范围的资源,请选择如何处理冲突:

      • 点击将资源保留在目标集群中,以跳过已存在于目标集群中的资源。
      • 点击替换目标集群中的资源,以删除目标集群中已存在的资源,并恢复备份中的副本。

  7. (可选)在添加转换规则部分中,完成以下操作,然后点击下一步

    1. 点击添加规则,然后输入可选说明。
    2. 如果要将转换规则限制在符合特定条件的资源上,请在指定资源条件和操作部分中执行以下操作:
      1. 点击命名空间条件,然后输入命名空间列表,以匹配这些命名空间中的资源。
      2. 点击群组种类条件,输入 API 组种类,然后输入对象种类。这会将 API 组与这些类型中的资源进行匹配。
      3. 点击 JSON 路径条件,然后输入 JSON 路径,用于标识要应用转换的匹配资源中的字段。
      4. 输入新值以替换匹配属性的当前值,或者选中替换特定值(使用正则表达式)复选框。然后键入模式,与这些资源的当前值进行比较。
    3. 点击保存更改
  8. 查看恢复方案详情,然后点击创建方案

查看恢复方案

您可以使用 gcloud CLI 或 Google Cloud 控制台查看恢复方案及其详情。

gcloud

如需列出项目和位置中的所有恢复方案,请运行以下命令:

gcloud beta container backup-restore restore-plans list \
    --project=PROJECT_ID \
    --location=LOCATION

仅对于 list 命令,您可以提供 - 作为除 PROJECT_ID 以外的任何参数的值。- 值充当通配符。如果您未指定命令行选项或未设置属性,则 - 值是任何参数的默认值。

如需查看选项的完整列表,请参阅 gcloud beta container backup-restore restore-plans list 文档。

如需查看恢复方案的详细信息,请运行以下命令:

gcloud beta container backup-restore restore-plans describe RESTORE_PLAN \
     --project=PROJECT_ID \
     --location=LOCATION

控制台

使用以下说明在 Google Cloud 控制台中查看恢复方案及其详情:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在导航菜单中,点击 Backup for GKE

  3. 点击恢复方案标签页。

  4. 展开备份方案,然后点击恢复方案名称。

  5. 点击详情标签页以查看其详细信息。

更新恢复方案

使用 gcloud CLI 更新恢复方案及其详细信息。

gcloud

如需更新恢复方案(例如通过添加新的说明),请运行以下命令:

gcloud beta container backup-restore restore-plans update RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION \
    --description=DESCRIPTION

如需查看选项的完整列表,请参阅 gcloud beta container backup-restore restore-plans update 文档。

控制台

使用以下说明在 Google Cloud 控制台中更新恢复方案:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在导航菜单中,点击 Backup for GKE

  3. 点击恢复方案标签页。

  4. 点击恢复方案名称。

  5. 点击详情标签页。

  6. 点击 编辑以编辑方案部分,然后点击保存更改

删除恢复方案

您可以使用 gcloud CLI 或 Google Cloud 控制台删除恢复方案。删除恢复方案也会删除任何子恢复方案。

gcloud

如需删除恢复方案,请运行以下命令:

gcloud beta container backup-restore restore-plans delete RESTORE_PLAN \
    --project=PROJECT_ID \
    --location=LOCATION

如需查看选项的完整列表,请参阅 gcloud beta container backup-restore restore-plans delete 文档。

控制台

使用以下说明在 Google Cloud 控制台中删除恢复方案:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 在导航菜单中,点击 Backup for GKE

  3. 点击恢复方案标签页。

  4. 展开集群,然后点击方案名称。

  5. 点击 删除方案

  6. 输入恢复方案名称,然后点击确认对话框中的删除恢复方案

后续步骤