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

カスタムリソースを使用した Kubernetes アプリケーションのリストア

共同作成者 netapp-mwallis

カスタム リソースを使用して、スナップショットまたはバックアップからアプリケーションを復元できます。アプリケーションを同じクラスタに復元する場合、既存のスナップショットからの復元の方が高速になります。

メモ
  • アプリケーションを復元すると、アプリケーションに対して設定されているすべての実行フックもアプリとともに復元されます。復元後の実行フックが存在する場合、復元操作の一部として自動的に実行されます。

  • バックアップから別の名前空間または元の名前空間への復元は、qtree ボリュームでサポートされています。ただし、スナップショットから別の名前空間または元の名前空間への復元は、qtree ボリュームではサポートされていません。

  • 詳細設定を使用して復元操作をカスタマイズできます。詳細については、"高度なカスタムリソースのリストア設定を使用する"を参照してください。

バックアップを別の名前空間に復元する

BackupRestore CR を使用して異なる名前空間にバックアップを復元すると、NetApp Backup and Recovery はアプリケーションを新しい名前空間に復元し、復元されたアプリケーションのアプリケーション CR を作成します。復元されたアプリケーションを保護するには、オンデマンドバックアップまたはスナップショットを作成するか、保護スケジュールを確立します。

メモ
  • 既存のリソースを含む別の名前空間にバックアップをリストアしても、バックアップ内のリソースと名前を共有するリソースは変更されません。バックアップ内のすべてのリソースをリストアするには、ターゲット名前空間を削除して再作成するか、バックアップを新しい名前空間にリストアします。

  • CR を使用して新しい名前空間に復元する場合は、CR を適用する前に、デスティネーション名前空間を手動で作成する必要があります。NetApp Backup and Recovery では、CLI を使用する場合にのみ名前空間が自動的に作成されます。

開始する前に

AWS セッショントークンの有効期限が、長時間実行される s3 復元処理に十分であることを確認します。復元処理中にトークンの有効期限が切れると、処理が失敗する可能性があります。

  • 現在のセッショントークンの有効期限を確認する方法の詳細については、 "AWS API ドキュメント"を参照してください。

  • "AWS IAM ドキュメント"AWS リソースの認証情報の詳細については、こちらを参照してください。

メモ Kopia をデータ ムーバーとして使用してバックアップを復元する場合、オプションで CR に注釈を指定して、Kopia が使用する一時ストレージの動作を制御できます。 "Kopiaのドキュメント"設定できるオプションの詳細については、こちらを参照してください。
手順
  1. カスタムリソース(CR)ファイルを作成し、名前を付けます trident-protect-backup-restore-cr.yaml

  2. 作成したファイルで、次の属性を設定します:

    • metadata.name:(必須)このカスタム リソースの名前。環境に合わせて一意かつ適切な名前を選択してください。

    • spec.appArchivePath:AppVault内でバックアップコンテンツが保存されるパス。このパスを見つけるには、次のコマンドを使用できます:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.appVaultRef:(必須)バックアップコンテンツが保存されるAppVaultの名前。

    • spec.namespaceMapping:リストア処理のソースネームスペースからデスティネーションネームスペースへのマッピング。 `my-source-namespace`と `my-destination-namespace`を環境の情報に置き換えます。

      apiVersion: protect.trident.netapp.io/v1
      kind: BackupRestore
      metadata:
        name: my-cr-name
        namespace: my-destination-namespace
      spec:
        appArchivePath: my-backup-path
        appVaultRef: appvault-name
        namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}]
  3. オプション)復元するアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルでマークされたリソースを含めるか除外するフィルタリングを追加します:

    メモ Trident Protect は、選択したリソースとの関係に基づいて、一部のリソースを自動的に選択します。たとえば、永続ボリュームクレームリソースを選択し、それに関連付けられたポッドがある場合、Trident Protect は関連付けられているポッドも復元します。
    • resourceFilter.resourceSelectionCriteria:(フィルタリングに必須) `Include`または `Exclude`を使用して、resourceMatchersで定義されたリソースを含めるか除外します。含めるまたは除外するリソースを定義するには、以下のresourceMatchersパラメータを追加します:

      • resourceFilter.resourceMatchers:resourceMatcherオブジェクトの配列。この配列に複数の要素を定義すると、それらはOR演算として一致し、各要素内のフィールド(グループ、種類、バージョン)はAND演算として一致します。

        • resourceMatchers[].group:(オプション)フィルタリングするリソースのグループ。

        • resourceMatchers[].kind:(オプション)フィルタリングするリソースの種類。

        • resourceMatchers[].version:(オプション)フィルタリングするリソースのバージョン。

        • resourceMatchers[].names:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前。

        • resourceMatchers[].namespaces:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前空間。

        • resourceMatchers[].labelSelectors:(オプション"Kubernetesドキュメント"で定義されているリソースのKubernetesメタデータ.nameフィールドのラベルセレクタ文字列。例: "trident.netapp.io/os=linux"

          例:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. `trident-protect-backup-restore-cr.yaml`ファイルに正しい値を入力したら、CRを適用します:

    kubectl apply -f trident-protect-backup-restore-cr.yaml

バックアップを元の名前空間に復元する

いつでもバックアップを元の名前空間に復元できます。

開始する前に

AWS セッショントークンの有効期限が、長時間実行される s3 復元処理に十分であることを確認します。復元処理中にトークンの有効期限が切れると、処理が失敗する可能性があります。

  • 現在のセッショントークンの有効期限を確認する方法の詳細については、 "AWS API ドキュメント"を参照してください。

  • "AWS IAM ドキュメント"AWS リソースの認証情報の詳細については、こちらを参照してください。

メモ Kopia をデータ ムーバーとして使用してバックアップを復元する場合、オプションで CR に注釈を指定して、Kopia が使用する一時ストレージの動作を制御できます。 "Kopiaのドキュメント"設定できるオプションの詳細については、こちらを参照してください。
手順
  1. カスタムリソース(CR)ファイルを作成し、名前を `trident-protect-backup-ipr-cr.yaml`とします。

  2. 作成したファイルで、次の属性を設定します:

    • metadata.name:(必須)このカスタム リソースの名前。環境に合わせて一意かつ適切な名前を選択してください。

    • spec.appArchivePath:AppVault内でバックアップコンテンツが保存されるパス。このパスを見つけるには、次のコマンドを使用できます:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.appVaultRef:(必須)バックアップコンテンツが保存されるAppVaultの名前。

      例:

    apiVersion: protect.trident.netapp.io/v1
    kind: BackupInplaceRestore
    metadata:
      name: my-cr-name
      namespace: my-app-namespace
    spec:
      appArchivePath: my-backup-path
      appVaultRef: appvault-name
  3. オプション)復元するアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルでマークされたリソースを含めるか除外するフィルタリングを追加します:

    メモ Trident Protect は、選択したリソースとの関係に基づいて、一部のリソースを自動的に選択します。たとえば、永続ボリュームクレームリソースを選択し、それに関連付けられたポッドがある場合、Trident Protect は関連付けられているポッドも復元します。
    • resourceFilter.resourceSelectionCriteria:(フィルタリングに必須) `Include`または `Exclude`を使用して、resourceMatchersで定義されたリソースを含めるか除外します。含めるまたは除外するリソースを定義するには、以下のresourceMatchersパラメータを追加します:

      • resourceFilter.resourceMatchers:resourceMatcherオブジェクトの配列。この配列に複数の要素を定義すると、それらはOR演算として一致し、各要素内のフィールド(グループ、種類、バージョン)はAND演算として一致します。

        • resourceMatchers[].group:(オプション)フィルタリングするリソースのグループ。

        • resourceMatchers[].kind:(オプション)フィルタリングするリソースの種類。

        • resourceMatchers[].version:(オプション)フィルタリングするリソースのバージョン。

        • resourceMatchers[].names:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前。

        • resourceMatchers[].namespaces:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前空間。

        • resourceMatchers[].labelSelectors:(オプション"Kubernetesドキュメント"で定義されているリソースのKubernetesメタデータ.nameフィールドのラベルセレクタ文字列。例: "trident.netapp.io/os=linux"

          例:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. `trident-protect-backup-ipr-cr.yaml`ファイルに正しい値を入力したら、CRを適用します:

    kubectl apply -f trident-protect-backup-ipr-cr.yaml

バックアップを別のクラスタにリストアする

元のクラスタに問題がある場合は、バックアップを別のクラスタにリストアできます。

メモ
  • Kopia をデータ ムーバーとして使用してバックアップを復元する場合、オプションで CR に注釈を指定して、Kopia が使用する一時ストレージの動作を制御できます。 "Kopiaのドキュメント"設定できるオプションの詳細については、こちらを参照してください。

  • CR を使用して新しいネームスペースにリストアする場合は、CR を適用する前に、デスティネーションネームスペースを手動で作成する必要があります。

開始する前に

次の前提条件が満たされていることを確認してください:

  • デスティネーション クラスタに Trident Protect がインストールされている。

  • デスティネーション クラスタは、バックアップが保存されているソース クラスタと同じAppVaultのバケット パスにアクセスできます。

  • AWS セッション トークンの有効期限が、長時間実行される復元操作に十分であることを確認します。復元操作中にトークンの有効期限が切れると、操作が失敗する可能性があります。

    • 現在のセッショントークンの有効期限を確認する方法の詳細については、 "AWS API ドキュメント"を参照してください。

    • AWS リソースの認証情報の詳細については、 "AWSのドキュメント"を参照してください。

手順
  1. Trident Protect CLIプラグインを使用して、デスティネーション クラスタ上のAppVault CRの可用性を確認します:

    tridentctl-protect get appvault --context <destination_cluster_name>
    メモ アプリケーションのリストアに使用する名前空間がデスティネーション クラスタに存在することを確認します。
  2. デスティネーション クラスタから利用可能なAppVaultのバックアップコンテンツを表示します:

    tridentctl-protect get appvaultcontent <appvault_name> \
    --show-resources backup \
    --show-paths \
    --context <destination_cluster_name>

    このコマンドを実行すると、AppVault内の利用可能なバックアップが表示されます。これには、元のクラスタ、対応するアプリケーション名、タイムスタンプ、アーカイブ パスが含まれます。

    出力例:

    +-------------+-----------+--------+-----------------+--------------------------+-------------+
    |   CLUSTER   |    APP    |  TYPE  |      NAME       |        TIMESTAMP         |    PATH     |
    +-------------+-----------+--------+-----------------+--------------------------+-------------+
    | production1 | wordpress | backup | wordpress-bkup-1| 2024-10-30 08:37:40 (UTC)| backuppath1 |
    | production1 | wordpress | backup | wordpress-bkup-2| 2024-10-30 08:37:40 (UTC)| backuppath2 |
    +-------------+-----------+--------+-----------------+--------------------------+-------------+
  3. AppVault名前とアーカイブパスを使用して、アプリケーションをデスティネーション クラスタに復元します:

  4. カスタムリソース(CR)ファイルを作成し、名前を付けます trident-protect-backup-restore-cr.yaml

  5. 作成したファイルで、次の属性を設定します:

    • metadata.name:(必須)このカスタム リソースの名前。環境に合わせて一意かつ適切な名前を選択してください。

    • spec.appVaultRef:(必須)バックアップコンテンツが保存されるAppVaultの名前。

    • spec.appArchivePath:AppVault内でバックアップコンテンツが保存されるパス。このパスを見つけるには、次のコマンドを使用できます:

      kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
      メモ BackupRestore CR が利用できない場合は、手順 2 に記載されているコマンドを使用してバックアップの内容を表示できます。
    • spec.namespaceMapping:リストア処理のソースネームスペースからデスティネーションネームスペースへのマッピング。 `my-source-namespace`と `my-destination-namespace`を環境の情報に置き換えます。

      例:

    apiVersion: protect.trident.netapp.io/v1
    kind: BackupRestore
    metadata:
      name: my-cr-name
      namespace: my-destination-namespace
    spec:
      appVaultRef: appvault-name
      appArchivePath: my-backup-path
      namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}]
  6. `trident-protect-backup-restore-cr.yaml`ファイルに正しい値を入力したら、CRを適用します:

    kubectl apply -f trident-protect-backup-restore-cr.yaml

スナップショットを別のネームスペースにリストアする

カスタム リソース (CR) ファイルを使用して、スナップショットからデータを別の名前空間または元のソース名前空間に復元できます。SnapshotRestore CR を使用してスナップショットを別の名前空間に復元すると、Backup and Recovery はアプリケーションを新しい名前空間に復元し、復元されたアプリケーションのアプリケーション CR を作成します。復元されたアプリケーションを保護するには、オンデマンド バックアップまたはスナップショットを作成するか、保護スケジュールを設定します。

メモ
  • SnapshotRestoreは `spec.storageClassMapping`属性をサポートしていますが、ソース ストレージ クラスとデスティネーション ストレージ クラスが同じストレージ バックエンドを使用する場合のみです。異なるストレージ バックエンドを使用する `StorageClass`に復元しようとすると、復元処理は失敗します。

  • CR を使用して新しいネームスペースにリストアする場合は、CR を適用する前に、デスティネーションネームスペースを手動で作成する必要があります。

開始する前に

AWS セッショントークンの有効期限が、長時間実行される s3 復元処理に十分であることを確認します。復元処理中にトークンの有効期限が切れると、処理が失敗する可能性があります。

  • 現在のセッショントークンの有効期限を確認する方法の詳細については、 "AWS API ドキュメント"を参照してください。

  • "AWS IAM ドキュメント"AWS リソースの認証情報の詳細については、こちらを参照してください。

手順
  1. カスタムリソース(CR)ファイルを作成し、名前を `trident-protect-snapshot-restore-cr.yaml`とします。

  2. 作成したファイルで、次の属性を設定します:

    • metadata.name:(必須)このカスタム リソースの名前。環境に合わせて一意かつ適切な名前を選択してください。

    • spec.appVaultRef:(必須)スナップショットの内容が保存されるAppVaultの名前。

    • spec.appArchivePath:AppVault内のパスで、スナップショットの内容が保存される場所。このパスを見つけるには、次のコマンドを使用できます:

      kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
    • spec.namespaceMapping:リストア処理のソースネームスペースからデスティネーションネームスペースへのマッピング。 `my-source-namespace`と `my-destination-namespace`を環境の情報に置き換えます。

      apiVersion: protect.trident.netapp.io/v1
      kind: SnapshotRestore
      metadata:
        name: my-cr-name
        namespace: my-app-namespace
      spec:
        appVaultRef: appvault-name
        appArchivePath: my-snapshot-path
        namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}]
  3. オプション)復元するアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルでマークされたリソースを含めるか除外するフィルタリングを追加します:

    メモ Trident Protect は、選択したリソースとの関係に基づいて、一部のリソースを自動的に選択します。たとえば、永続ボリュームクレームリソースを選択し、それに関連付けられたポッドがある場合、Trident Protect は関連付けられているポッドも復元します。
    • resourceFilter.resourceSelectionCriteria:(フィルタリングに必須) `Include`または `Exclude`を使用して、resourceMatchersで定義されたリソースを含めるか除外します。含めるまたは除外するリソースを定義するには、以下のresourceMatchersパラメータを追加します:

      • resourceFilter.resourceMatchers:resourceMatcherオブジェクトの配列。この配列に複数の要素を定義すると、それらはOR演算として一致し、各要素内のフィールド(グループ、種類、バージョン)はAND演算として一致します。

        • resourceMatchers[].group:(オプション)フィルタリングするリソースのグループ。

        • resourceMatchers[].kind:(オプション)フィルタリングするリソースの種類。

        • resourceMatchers[].version:(オプション)フィルタリングするリソースのバージョン。

        • resourceMatchers[].names:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前。

        • resourceMatchers[].namespaces:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前空間。

        • resourceMatchers[].labelSelectors:(オプション"Kubernetesドキュメント"で定義されているリソースのKubernetesメタデータ.nameフィールドのラベルセレクタ文字列。例: "trident.netapp.io/os=linux"

          例:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. `trident-protect-snapshot-restore-cr.yaml`ファイルに正しい値を入力したら、CRを適用します:

    kubectl apply -f trident-protect-snapshot-restore-cr.yaml

スナップショットを元の名前空間に復元する

いつでもスナップショットを元の名前空間にリストアできます。

開始する前に

AWS セッショントークンの有効期限が、長時間実行される s3 復元処理に十分であることを確認します。復元処理中にトークンの有効期限が切れると、処理が失敗する可能性があります。

  • 現在のセッショントークンの有効期限を確認する方法の詳細については、 "AWS API ドキュメント"を参照してください。

  • "AWS IAM ドキュメント"AWS リソースの認証情報の詳細については、こちらを参照してください。

手順
  1. カスタムリソース(CR)ファイルを作成し、 `trident-protect-snapshot-ipr-cr.yaml`という名前を付けます。

  2. 作成したファイルで、次の属性を設定します:

    • metadata.name:(必須)このカスタム リソースの名前。環境に合わせて一意かつ適切な名前を選択してください。

    • spec.appVaultRef:(必須)スナップショットの内容が保存されるAppVaultの名前。

    • spec.appArchivePath:AppVault内のパスで、スナップショットの内容が保存される場所。このパスを見つけるには、次のコマンドを使用できます:

      kubectl get snapshots <SNAPSHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
      apiVersion: protect.trident.netapp.io/v1
      kind: SnapshotInplaceRestore
      metadata:
        name: my-cr-name
        namespace: my-app-namespace
      spec:
        appVaultRef: appvault-name
        appArchivePath: my-snapshot-path
  3. オプション)復元するアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルでマークされたリソースを含めるか除外するフィルタリングを追加します:

    メモ Trident Protect は、選択したリソースとの関係に基づいて、一部のリソースを自動的に選択します。たとえば、永続ボリュームクレームリソースを選択し、それに関連付けられたポッドがある場合、Trident Protect は関連付けられているポッドも復元します。
    • resourceFilter.resourceSelectionCriteria:(フィルタリングに必須) `Include`または `Exclude`を使用して、resourceMatchersで定義されたリソースを含めるか除外します。含めるまたは除外するリソースを定義するには、以下のresourceMatchersパラメータを追加します:

      • resourceFilter.resourceMatchers:resourceMatcherオブジェクトの配列。この配列に複数の要素を定義すると、それらはOR演算として一致し、各要素内のフィールド(グループ、種類、バージョン)はAND演算として一致します。

        • resourceMatchers[].group:(オプション)フィルタリングするリソースのグループ。

        • resourceMatchers[].kind:(オプション)フィルタリングするリソースの種類。

        • resourceMatchers[].version:(オプション)フィルタリングするリソースのバージョン。

        • resourceMatchers[].names:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前。

        • resourceMatchers[].namespaces:(オプション)フィルタリングするリソースの Kubernetes metadata.name フィールド内の名前空間。

        • resourceMatchers[].labelSelectors:(オプション"Kubernetesドキュメント"で定義されているリソースのKubernetesメタデータ.nameフィールドのラベルセレクタ文字列。例: "trident.netapp.io/os=linux"

          例:

    spec:
      resourceFilter:
        resourceSelectionCriteria: "Include"
        resourceMatchers:
          - group: my-resource-group-1
            kind: my-resource-kind-1
            version: my-resource-version-1
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
          - group: my-resource-group-2
            kind: my-resource-kind-2
            version: my-resource-version-2
            names: ["my-resource-names"]
            namespaces: ["my-resource-namespaces"]
            labelSelectors: ["trident.netapp.io/os=linux"]
  4. `trident-protect-snapshot-ipr-cr.yaml`ファイルに正しい値を入力したら、CRを適用します:

    kubectl apply -f trident-protect-snapshot-ipr-cr.yaml