使用自定义资源还原资源时修改资源
资源转换使您能够在还原资源时对其进行修改。这在还原版本需要与原始版本不同时非常有用,例如,在将虚拟机还原到其他网络时更改其 IP 地址。您也可以"使用 Web UI 还原资源时对其进行修改"。
必需的 NetApp Console 角色 Backup and Recovery 超级管理员或 Backup and Recovery 还原管理员。"了解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 路径必须已存在。以下示例更改 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"}'