在恢复期间修改资源(已弃用)


本页面介绍如何在恢复过程中修改 Kubernetes 资源。

概览

在恢复过程中修改 Kubernetes 资源的原因可能有多种。例如:

  • 您可能想要使用其他存储预配工具预配 PVC(例如,从 Kubernetes 树内驱动程序迁移到 CSI 驱动程序)。

  • 您可能想要恢复命名空间并使用不同的名称。

  • 您可能想要更改 Deployment 或 StatefulSet 中的副本数量。

Backup for GKE 提供了一种称为替换规则的机制来实现此目的,您可以选择在 RestorePlan 中定义这些规则。

替换规则是一组与替换字段值一起指定的匹配条件。您可以在恢复过程中使用替换规则,如下所示:

  1. 首先,Backup for GKE 会根据恢复配置中的范围参数(例如命名空间、组/种类等)计算要恢复的一组资源。

  2. Backup for GKE 会根据替换规则的有序列表评估为恢复选择的每个资源。如果规则与资源匹配,则使用替换字段值更新资源。系统会将所有资源针对所有规则进行匹配,并且可能会对同一个资源执行多次替换。

  3. 评估所有规则后,Backup for GKE 会在目标集群中创建生成的一组资源。

替换规则参数

如需定义替换规则,您需要提供以下参数:

参数 必需 说明
targetNamespaces 可选 这是命名空间列表。如需匹配此规则,该资源必须是命名空间型资源,并具有给定命名空间之一:
  • 如果没有为此参数提供任何值,则所有资源都将匹配(所有命名空间型资源和集群范围资源)。
  • 如果提供空字符串 (""),则它将仅匹配集群范围资源。在 Google Cloud 控制台中,您可以勾选排除命名空间型资源,将列表设置为单个空字符串。
targetGroupKinds 可选 这是 Kubernetes 资源组/种类元组列表:
  • 如果没有为此参数提供任何值,则所有资源都将匹配(没有基于组/种类的限制)。
  • 如果提供了一个或多个组/种类,则资源必须与其中一个组/种类匹配才能与规则匹配。
targetJsonPath 必需 这是一个与资源进行匹配的 JSONPath 表达式。请注意,此规则不仅会匹配资源,还会匹配资源中的特定特性。
originalValuePattern 可选 这是一个与特性的当前值进行匹配的正则表达式。如果未提供,则特性将始终匹配。
newValue 必需 这是用于匹配的特性值的新值。

如需详细了解如何在 Google Cloud 控制台中定义替换规则,请参阅规划一组恢复

如需通过 gcloud CLI 定义替换规则,请创建一个包含 substitutionRules 的 YAML 数组的文件,并将 --substitution-rules-file= 参数添加到 gcloud beta container backup-restore restore-plans create 命令。

替换规则示例

以下示例以 gcloud CLI 使用的 YAML 格式提供。

更改 StorageClass

在此示例中,我们将所有恢复的 PersistentVolumeClaim 资源的 StorageClass 从 standard 更改为 premium-rwo

substitutionRules:
- targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo

克隆命名空间

在此示例中,我们创建新的命名空间“beta”,并将“alpha”中的所有资源恢复到新的“beta”命名空间,从而将命名空间从 alpha 克隆到 beta。请注意,此示例需要两条替换规则,一条用于命名空间本身,另一条用于命名空间中的资源。

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta

更改克隆的命名空间中的 StorageClass 和副本数量

在此示例中,我们克隆一个命名空间,然后对新命名空间中的资源应用一组更改:

  • 将 PVC 上的 StorageClass 从 standard 更改为 premium-rwo

  • 将 Deployment 上的副本数量从 7 更改为 3

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: apps
    resourceKind: Deployment
  targetJsonPath: "{$.spec.replicas}"
  originalValuePattern: '7'
  newValue: '3'