规划一组恢复


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

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

Backup for GKE 不支持将备份从一个项目恢复到另一个项目。您只能将备份恢复到备份的来源项目中的集群。恢复方案无法引用其他项目中的备用方案。

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

托管式命名空间

Backup for GKE 不会恢复到受管理的命名空间中。在恢复过程中,系统会静默跳过这些命名空间。受管理的命名空间列表包括:

  • cnrm-system
  • configconnector-operator-system
  • gatekeeper-system
  • gke-connect
  • gke-gmp-system
  • gmp-public
  • kube-node-lease
  • kube-public
  • kube-system
  • 具有以下标签的命名空间:
    • 键:addonmanager.kubernetes.io/mode
    • 值:ReconcileEnsureExists

准备工作

规划一组备份

所需的角色

如需获得创建和管理恢复方案所需的权限,请让您的管理员为您授予 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=RESTORE_LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --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。
  • RESTORE_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 文档。

创建一个用于所有命名空间的恢复方案

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

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --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

创建用于回滚命名空间的恢复方案

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

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --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

创建恢复方案来回滚 ProtectedApplication,以重新连接原始卷

以下命令会创建一个恢复方案来回滚受保护的应用 my-ns/my-app,以重新连接原始卷:

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --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

创建仅恢复集群资源的恢复方案

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

gcloud beta container backup-restore restore-plans create RESTORE_PLAN \
    --location=LOCATION \
    --backup-plan=projects/PROJECT_ID/locations/BACKUP_LOCATION/backupPlans/BACKUP_PLAN_NAME \
    --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. 输入恢复方案名称,然后点击确认对话框中的删除恢复方案

后续步骤