Skip to main content
NetApp Backup and Recovery
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

使用自定义资源还原资源时修改资源

贡献者 netapp-mwallis

资源转换使您能够在还原资源时对其进行修改。这在还原版本需要与原始版本不同时非常有用,例如,在将虚拟机还原到其他网络时更改其 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 资源类型(例如, ConfigMapDeploymentPod

  • group (可选):API 组(例如, appsroute.openshift.io)- 省略核心资源

  • version (可选):API 版本(例如, v1v1beta1

  • 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"}'