在还原期间修改 Kubernetes 资源(NetApp Backup and Recovery)
在恢复操作期间,使用资源转换来修改 Kubernetes 资源。有关在 Web UI 中修改资源的信息,请参阅 "还原期间修改资源"。
必需的 NetApp Console 角色 备份和恢复超级管理员或备份和恢复还原管理员。如果要保护存储在 Cloud Volumes ONTAP 集群上的数据,则还需要 Cloud Volumes ONTAP 管理员角色。"了解NetApp Backup and Recovery访问角色". "了解所有服务的NetApp Console访问角色".
资源修改的工作原理
`transformations` 字段在 `SnapshotRestore`、 `BackupRestore`、 `AppMirrorRelationship` 以及其他还原资源中,使您能够在还原过程中修改 Kubernetes 资源。这对于通过更改主机名、注册表 URL、资源限制或环境变量,将应用程序或虚拟机适配到新集群非常有用。
资源转换使用 "RFC 6902" JSON Patch 操作和 "RFC 6901" JSON Pointer 路径来定位和修改 Kubernetes 资源中的特定字段。
以下示例显示了包含资源转换的还原对象的基本结构:
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
name: my-restore
namespace: target-namespace
spec:
appVaultRef: my-vault
appArchivePath: /path/to/snapshot
namespaceMapping:
- source: source-ns
destination: target-ns
transformations:
- resource:
kind: ConfigMap # Required: resource kind
group: "" # Optional: API group (empty for core resources)
version: "" # Optional: API version
name: "" # Optional: specific resource name
operations:
- op: replace # Operation type
path: "/data/key" # JSON Pointer path
value: "new-value" # New value (for add/replace/test)
支持的资源
您可以将资源转换与符合以下标准的资源一起使用:
-
kind(必填):Kubernetes 资源类型(例如,ConfigMap、Deployment、Pod) -
group(可选):API 组(例如,apps、route.openshift.io)——省略核心资源 -
version(可选):API 版本(例如,v1,v1beta1) -
name(可选):仅按名称应用到特定资源
|
|
当前不支持修改 PersistentVolumeClaims 和命名空间。 |
支持的操作
您可以使用以下操作修改资源:
-
add:向资源添加值。 -
copy: 将值从一个路径复制到另一个路径。 -
move: 在资源内移动值。 -
remove:从资源中删除值。 -
replace: 替换资源中的值。 -
test:在执行操作之前先进行测试。
向资源添加值
使用 add 操作在指定路径上添加新字段或值。您可以将数据添加到对象或数组。以下示例将节点选择器添加到 Deployment 资源:
transformations:
- resource:
kind: Deployment
operations:
- op: add
path: "/spec/template/spec/nodeSelector"
value:
"topology.kubernetes.io/zone": "us-east-1a"
disktype: "ssd"
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'
复制资源中的值
使用 copy 操作将同一资源中的值从一个路径复制到另一个路径。源未更改。以下示例复制 ConfigMap 对象的数据键:
transformations:
- resource:
kind: ConfigMap
operations:
- op: copy
from: "/data/source-key"
path: "/data/backup-key"
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'
在资源内移动值
使用 move 操作将同一资源内的值从一个路径移动到另一个路径。源被删除,值被放置在目的地。以下示例重命名 ConfigMap 对象的数据键:
transformations:
- resource:
kind: ConfigMap
operations:
- op: move
from: "/data/OLD_KEY"
path: "/data/NEW_KEY"
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'
从资源中删除值
使用 remove 操作可删除指定路径中的字段或值。以下示例从 ConfigMap 资源中删除批注:
transformations:
- resource:
kind: ConfigMap
operations:
- op: remove
path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
|
|
在以上示例的路径中, ~1 是 / 的 JSON 指针转义序列。
|
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'
替换资源中的值
使用该 `replace`操作替换指定路径下资源中的现有值。JSON Pointer 路径必须已存在。以下示例更改 Route 对象的主机名:
transformations:
- resource:
kind: Route
group: route.openshift.io
operations:
- op: replace
path: "/spec/host"
value: "prod.example.com"
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'
测试资源修改
使用 test`操作来测试路径上的值是否与预期值匹配。如果测试失败,整个修改将被回滚。以下示例仅在 `database-host`为 `environment`时才更新 `staging:
transformations:
- resource:
kind: ConfigMap
operations:
- op: test
path: "/data/environment"
value: "staging"
- op: replace
path: "/data/database-host"
value: "prod-db.example.com"
使用以下命令通过命令行运行此转换:
tridentctl-protect --transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'