本页面介绍如何在恢复过程中修改 Kubernetes 资源。
概览
在恢复过程中修改 Kubernetes 资源的原因可能有多种。例如:
您可能想要使用其他存储预配工具预配 PVC(例如,从 Kubernetes 树内驱动程序迁移到 CSI 驱动程序)。
您可能想要恢复命名空间并使用不同的名称。
您可能想要更改 Deployment 或 StatefulSet 中的副本数量。
Backup for GKE 提供了一种称为替换规则的机制来实现此目的,您可以选择在 RestorePlan
中定义这些规则。
替换规则是一组与替换字段值一起指定的匹配条件。您可以在恢复过程中使用替换规则,如下所示:
首先,Backup for GKE 会根据恢复配置中的范围参数(例如命名空间、组/种类等)计算要恢复的一组资源。
Backup for GKE 会根据替换规则的有序列表评估为恢复选择的每个资源。如果规则与资源匹配,则使用替换字段值更新资源。系统会将所有资源针对所有规则进行匹配,并且可能会对同一个资源执行多次替换。
评估所有规则后,Backup for GKE 会在目标集群中创建生成的一组资源。
替换规则参数
如需定义替换规则,您需要提供以下参数:
参数 | 必需 | 说明 |
---|---|---|
targetNamespaces | 可选 |
这是命名空间列表。如需匹配此规则,该资源必须是命名空间型资源,并具有给定命名空间之一:
|
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'