Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

カスタムリソースを使用して復元する際にリソースを変更します

共同作成者 netapp-shwetav

リソース変換機能を使用すると、リソースの復元中にリソースを変更できます。これは、復元されたバージョンがオリジナルと異なる必要がある場合に役立ちます。たとえば、アプリケーションを別のクラスタに復元する際にConfigMapのホスト名を更新する場合などです。

リソース変更の仕組み

`SnapshotRestore`、 `BackupRestore`、 `AppMirrorRelationship`、およびその他のリストア リソースの `transformations`フィールドを使用すると、リストア プロセス中に Kubernetes リソースを変更できます。これは、リストアされたアプリケーションをオリジナルとは異なる方法で構成する必要がある場合(ホスト名、レジストリ URL、リソース制限、環境変数の変更など)に便利です。

リソース変換では、 "RFC 6902 JSON Patch"操作と "RFC 6901 JSONポインタ"パスを使用して、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

  • グループ(オプション):APIグループ(例: appsroute.openshift.io)—コアリソースの場合は省略

  • version (オプション):API バージョン (例: v1v1beta1

  • 名前(オプション):名前で指定した特定のリソースにのみ適用します

メモ PersistentVolumeClaimsと名前空間の変更は現在サポートされていません。

サポートされている操作

リソースを変更するには、以下の操作を使用できます: addcopymoveremovereplace、および test

リソースに値を追加する

`add`操作を使用して、指定されたパスに新しいフィールドまたは値を追加します。オブジェクトや配列にデータを追加できます。
CRの使用

次の例では、ノードセレクタを `Deployment`リソースに追加します:

transformations:
  - resource:
      kind: Deployment
    operations:
      - op: add
        path: "/spec/template/spec/nodeSelector"
        value:
          "topology.kubernetes.io/zone": "us-east-1a"
          disktype: "ssd"
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'

リソース内の値をコピーする

`copy`操作を使用して、同じリソース内のあるパスから別のパスに値をコピーします。ソースは変更されません。
CRの使用

次の例では、 `ConfigMap`オブジェクトのデータキーを複製します:

transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: copy
        from: "/data/source-key"
        path: "/data/backup-key"
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'

リソース内で値を移動する

`move`操作を使用して、同じリソース内であるパスから別のパスに値を移動します。ソースが削除され、値が宛先に配置されます。
CRの使用

次の例では、 `ConfigMap`オブジェクトのデータキーの名前を変更します:

transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: move
        from: "/data/OLD_KEY"
        path: "/data/NEW_KEY"
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'

リソースから値を削除する

`remove`操作を使用して、指定されたパスにあるフィールドまたは値を削除します。
CRの使用

次の例では、 `ConfigMap`リソースから注釈を削除します:

transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: remove
        path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
メモ 上記の例のパスでは、 `~1`は `/`のJSONポインターのエスケープシーケンスです。
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'

リソース内の値を置き換える

`replace`操作を使用して、指定されたパスにあるリソース内の既存の値を置き換えます。JSONパスは既に存在している必要があります。
CRの使用

次の例では、 `Route`オブジェクトのホスト名を変更します:

transformations:
  - resource:
      kind: Route
      group: route.openshift.io
    operations:
      - op: replace
        path: "/spec/host"
        value: "prod.example.com"
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'

リソースの変更をテストする

`test`操作を使用して、他の操作が適用される前に、パス上の値が期待値と一致することを確認します。テストが失敗した場合、変更全体がロールバックされます。
CRの使用

次の例では、 `environment`が `staging`に設定されている場合にのみ `database-host`を更新します。

transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: test
        path: "/data/environment"
        value: "staging"
      - op: replace
        path: "/data/database-host"
        value: "prod-db.example.com"
CLI を使用します

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect create snapshotrestore <restore_name> \
  --snapshot <namespace/snapshot-name> \
  --namespace-mapping <source-ns>:<dest-ns> \
  --transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'