Trident保護を使用したアプリケーションのリストア
Trident保護を使用すると、Snapshotまたはバックアップからアプリケーションをリストアできます。同じクラスタにアプリケーションをリストアする場合、既存の Snapshot からのリストアは高速です。
アプリケーションを復元すると、そのアプリケーションに設定されているすべての実行フックがアプリケーションとともに復元されます。リストア後の実行フックがある場合は、リストア処理の一環として自動的に実行されます。 |
リストア処理とフェイルオーバー処理時のネームスペースのアノテーションとラベル
リストア処理とフェイルオーバー処理では、デスティネーションネームスペースのラベルとアノテーションがソースネームスペースのラベルとアノテーションと一致するように作成されます。デスティネーションネームスペースに存在しないソースネームスペースのラベルまたはアノテーションが追加され、すでに存在するラベルまたはアノテーションがソースネームスペースの値に一致するように上書きされます。デスティネーションネームスペースにのみ存在するラベルやアノテーションは変更されません。
RedHat OpenShiftを使用する場合は、OpenShift環境でのネームスペースのアノテーションの重要な役割に注意することが重要です。ネームスペースのアノテーションを使用すると、リストアしたポッドがOpenShift Security Context Constraint(SCC;セキュリティコンテキスト制約)で定義された適切な権限とセキュリティ設定に従っていることが確認され、権限の問題なしにボリュームにアクセスできるようになります。詳細については、を参照して "OpenShiftセキュリティコンテキスト制約に関するドキュメント"ください。 |
リストアまたはフェイルオーバー処理を実行する前にKubernetes環境変数を設定することで、デスティネーションネームスペースの特定のアノテーションが上書きされないようにすることができます RESTORE_SKIP_NAMESPACE_ANNOTATIONS
。例:
kubectl set env -n trident-protect deploy/trident-protect-controller-manager RESTORE_SKIP_NAMESPACE_ANNOTATIONS=<annotation_key_to_skip_1>,<annotation_key_to_skip_2>
フラグを指定してHelmを使用してソースアプリケーションをインストールした場合は --create-namespace
、ラベルキーに特別な処理が行わ `name`れます。Trident保護では、リストアまたはフェイルオーバーのプロセスでこのラベルがデスティネーションネームスペースにコピーされますが、ソースの値がソースネームスペースと一致する場合はデスティネーションネームスペースの値に更新されます。この値がソースネームスペースと一致しない場合、変更なしでデスティネーションネームスペースにコピーされます。
例
次の例は、ソースとデスティネーションのネームスペースを示しています。それぞれにアノテーションとラベルが設定されています。処理の前後のデスティネーションネームスペースの状態、およびデスティネーションネームスペースでアノテーションやラベルを組み合わせたり上書きしたりする方法を確認できます。
リストアまたはフェイルオーバー処理の前
次の表に、リストアまたはフェイルオーバー処理を実行する前のソースネームスペースとデスティネーションネームスペースの状態を示します。
ネームスペース | アノテーション | ラベル |
---|---|---|
ネームスペースns-1(ソース) |
|
|
ネームスペースns-2(デスティネーション) |
|
|
リストア処理後
次の表に、リストアまたはフェイルオーバー処理後の例のデスティネーションネームスペースの状態を示します。一部のキーが追加され、一部のキーが上書きされ、 `name`デスティネーションネームスペースに一致するようにラベルが更新されました。
ネームスペース | アノテーション | ラベル |
---|---|---|
ネームスペースns-2(デスティネーション) |
|
|
バックアップから別のネームスペースへのリストア
BackupRestore CRを使用して別のネームスペースにバックアップをリストアすると、Trident保護によってアプリケーションが新しいネームスペースにリストアされますが、リストアされたアプリケーションはTrident保護によって自動的に保護されません。リストアされたアプリケーションを保護するには、Trident保護によって保護されるように、リストアされたアプリケーションのアプリケーションCRを作成する必要があります。
既存のリソースがある別のネームスペースにバックアップをリストアしても、バックアップ内のリソースと名前を共有するリソースは変更されません。バックアップ内のすべてのリソースをリストアするには、ターゲットネームスペースを削除して再作成するか、新しいネームスペースにバックアップをリストアします。 |
-
カスタムリソース(CR)ファイルを作成し、という名前を付け `trident-protect-backup-restore-cr.yaml`ます。
-
作成したファイルで、次の属性を設定します。
-
* metadata.name*:(required)このカスタムリソースの名前。環境に適した一意の適切な名前を選択します。
-
spec.appArchivePath:バックアップコンテンツが格納されているAppVault内のパス。このパスを検索するには、次のコマンドを使用します。
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
* spec.appVaultRef *:(required)バックアップコンテンツが格納されているAppVaultの名前。
-
* spec.namespaceMapping*:リストア処理のソースネームスペースとデスティネーションネームスペースのマッピング。および `my-destination-namespace`を、使用している環境の情報に置き換え `my-source-namespace`ます。
-
* spec.storageClassMapping *:リストア処理のソースストレージクラスからデスティネーションストレージクラスへのマッピング。および `sourceStorageClass`を、使用している環境の情報に置き換え `destinationStorageClass`ます。
apiVersion: protect.trident.netapp.io/v1o 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"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(オプション)リストアするアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルが付いたリソースを含めるか除外するフィルタリングを追加します。
-
resourceFilter.resourceSelectionCriteria:(フィルタリングに必要)
include or exclude
resourceMatchersで定義されたリソースを含めるか除外するかを指定します。次のresourceMatchersパラメータを追加して、追加または除外するリソースを定義します。-
resourceFilter.resourceMatchers: resourceMatcherオブジェクトの配列。
-
*resourceMatchers[].group *:(Optional)フィルタリングするリソースのグループ。
-
*resourceMatchers[].kind *:(optional)フィルタリングするリソースの種類。
-
resourceMatchers[].version:(Optional)フィルタリングするリソースのバージョン。
-
* resourceMatchers[].names *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前。
-
*resourceMatchers[].namespaces *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前空間。
-
*resourceMatchers[].labelSelectors *:(Optional)で定義されているリソースのKubernetes metadata.nameフィールドのラベルセレクタ文字列 "Kubernetes のドキュメント"。例:
"trident.netapp.io/os=linux"
。例:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
ファイルに正しい値を入力したら
trident-protect-backup-restore-cr.yaml
、CRを適用します。kubectl apply -f trident-protect-backup-restore-cr.yaml
-
バックアップを別のネームスペースにリストアします。角かっこ内の値は、使用している環境の情報に置き換えてください。 `namespace-mapping`引数は、コロンで区切られた名前空間を使用して、ソース名前空間を正しい宛先名前空間に形式でマッピングし `source1:dest1,source2:dest2`ます。例:
tridentctl protect create backuprestore <my_restore_name> --backup <backup_namespace>/<backup_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
バックアップから元のネームスペースへのリストア
バックアップはいつでも元のネームスペースにリストアできます。
-
カスタムリソース(CR)ファイルを作成し、という名前を付け `trident-protect-backup-ipr-cr.yaml`ます。
-
作成したファイルで、次の属性を設定します。
-
* metadata.name*:(required)このカスタムリソースの名前。環境に適した一意の適切な名前を選択します。
-
spec.appArchivePath:バックアップコンテンツが格納されているAppVault内のパス。このパスを検索するには、次のコマンドを使用します。
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
* spec.appVaultRef *:(required)バックアップコンテンツが格納されている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
-
-
(オプション)リストアするアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルが付いたリソースを含めるか除外するフィルタリングを追加します。
-
resourceFilter.resourceSelectionCriteria:(フィルタリングに必要)
include or exclude
resourceMatchersで定義されたリソースを含めるか除外するかを指定します。次のresourceMatchersパラメータを追加して、追加または除外するリソースを定義します。-
resourceFilter.resourceMatchers: resourceMatcherオブジェクトの配列。
-
*resourceMatchers[].group *:(Optional)フィルタリングするリソースのグループ。
-
*resourceMatchers[].kind *:(optional)フィルタリングするリソースの種類。
-
resourceMatchers[].version:(Optional)フィルタリングするリソースのバージョン。
-
* resourceMatchers[].names *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前。
-
*resourceMatchers[].namespaces *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前空間。
-
*resourceMatchers[].labelSelectors *:(Optional)で定義されているリソースのKubernetes metadata.nameフィールドのラベルセレクタ文字列 "Kubernetes のドキュメント"。例:
"trident.netapp.io/os=linux"
。例:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
ファイルに正しい値を入力したら
trident-protect-backup-ipr-cr.yaml
、CRを適用します。kubectl apply -f trident-protect-backup-ipr-cr.yaml
-
バックアップを元のネームスペースにリストアします。角かっこ内の値は、使用している環境の情報に置き換えてください。この `backup`引数では、という形式のネームスペースとバックアップ名を使用し `<namespace>/<name>`ます。例:
tridentctl protect create backupinplacerestore <my_restore_name> --backup <namespace/backup_to_restore>
Snapshotから別のネームスペースへのリストア
カスタムリソース(CR)ファイルを使用して、スナップショットから別のネームスペースまたは元のソースネームスペースにデータをリストアできます。SnapshotRestore CRを使用して別のネームスペースにSnapshotをリストアすると、Trident保護によって新しいネームスペースにアプリケーションがリストアされますが、リストアされたアプリケーションはTrident保護によって自動的に保護されません。リストアされたアプリケーションを保護するには、Trident保護によって保護されるように、リストアされたアプリケーションのアプリケーションCRを作成する必要があります。
-
カスタムリソース(CR)ファイルを作成し、という名前を付け `trident-protect-snapshot-restore-cr.yaml`ます。
-
作成したファイルで、次の属性を設定します。
-
* metadata.name*:(required)このカスタムリソースの名前。環境に適した一意の適切な名前を選択します。
-
* spec.appVaultRef *:(required)スナップショットコンテンツが格納されているAppVaultの名前。
-
* spec.appArchivePath *:スナップショットの内容が格納されているAppVault内のパス。このパスを検索するには、次のコマンドを使用します。
kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'
-
* spec.namespaceMapping*:リストア処理のソースネームスペースとデスティネーションネームスペースのマッピング。および `my-destination-namespace`を、使用している環境の情報に置き換え `my-source-namespace`ます。
-
* spec.storageClassMapping *:リストア処理のソースストレージクラスからデスティネーションストレージクラスへのマッピング。および `sourceStorageClass`を、使用している環境の情報に置き換え `destinationStorageClass`ます。
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"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(オプション)リストアするアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルが付いたリソースを含めるか除外するフィルタリングを追加します。
-
resourceFilter.resourceSelectionCriteria:(フィルタリングに必要)
include or exclude
resourceMatchersで定義されたリソースを含めるか除外するかを指定します。次のresourceMatchersパラメータを追加して、追加または除外するリソースを定義します。-
resourceFilter.resourceMatchers: resourceMatcherオブジェクトの配列。
-
*resourceMatchers[].group *:(Optional)フィルタリングするリソースのグループ。
-
*resourceMatchers[].kind *:(optional)フィルタリングするリソースの種類。
-
resourceMatchers[].version:(Optional)フィルタリングするリソースのバージョン。
-
* resourceMatchers[].names *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前。
-
*resourceMatchers[].namespaces *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前空間。
-
*resourceMatchers[].labelSelectors *:(Optional)で定義されているリソースのKubernetes metadata.nameフィールドのラベルセレクタ文字列 "Kubernetes のドキュメント"。例:
"trident.netapp.io/os=linux"
。例:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
ファイルに正しい値を入力したら
trident-protect-snapshot-restore-cr.yaml
、CRを適用します。kubectl apply -f trident-protect-snapshot-restore-cr.yaml
-
スナップショットを別のネームスペースにリストアし、括弧内の値を環境の情報に置き換えます。
-
`snapshot`引数では、という形式のネームスペースとSnapshot名を使用し `<namespace>/<name>`ます。
-
`namespace-mapping`引数は、コロンで区切られた名前空間を使用して、ソース名前空間を正しい宛先名前空間に形式でマッピングし `source1:dest1,source2:dest2`ます。
例:
tridentctl protect create snapshotrestore <my_restore_name> --snapshot <namespace/snapshot_to_restore> --namespace-mapping <source_to_destination_namespace_mapping>
-
Snapshotから元のネームスペースへのリストア
Snapshotはいつでも元のネームスペースにリストアできます。
-
カスタムリソース(CR)ファイルを作成し、という名前を付け `trident-protect-snapshot-ipr-cr.yaml`ます。
-
作成したファイルで、次の属性を設定します。
-
* metadata.name*:(required)このカスタムリソースの名前。環境に適した一意の適切な名前を選択します。
-
* spec.appVaultRef *:(required)スナップショットコンテンツが格納されている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
-
-
(オプション)リストアするアプリケーションの特定のリソースのみを選択する必要がある場合は、特定のラベルが付いたリソースを含めるか除外するフィルタリングを追加します。
-
resourceFilter.resourceSelectionCriteria:(フィルタリングに必要)
include or exclude
resourceMatchersで定義されたリソースを含めるか除外するかを指定します。次のresourceMatchersパラメータを追加して、追加または除外するリソースを定義します。-
resourceFilter.resourceMatchers: resourceMatcherオブジェクトの配列。
-
*resourceMatchers[].group *:(Optional)フィルタリングするリソースのグループ。
-
*resourceMatchers[].kind *:(optional)フィルタリングするリソースの種類。
-
resourceMatchers[].version:(Optional)フィルタリングするリソースのバージョン。
-
* resourceMatchers[].names *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前。
-
*resourceMatchers[].namespaces *:(optional)フィルタリングするリソースのKubernetes metadata.nameフィールドの名前空間。
-
*resourceMatchers[].labelSelectors *:(Optional)で定義されているリソースのKubernetes metadata.nameフィールドのラベルセレクタ文字列 "Kubernetes のドキュメント"。例:
"trident.netapp.io/os=linux"
。例:
-
-
spec: resourceFilter: resourceSelectionCriteria: "include" resourceMatchers: group: my-resource-group kind: my-resource-kind version: my-resource-version names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"]
-
-
ファイルに正しい値を入力したら
trident-protect-snapshot-ipr-cr.yaml
、CRを適用します。kubectl apply -f trident-protect-snapshot-ipr-cr.yaml
-
Snapshotを元のネームスペースにリストアします。括弧内の値は、環境の情報に置き換えてください。例:
tridentctl protect create snapshotinplacerestore <my_restore_name> --snapshot <snapshot_to_restore>
リストア処理のステータスの確認
コマンドラインを使用して、実行中、完了、または失敗したリストア処理のステータスを確認できます。
-
次のコマンドを使用してリストア処理のステータスを取得し、角かっこ内の値を環境の情報に置き換えます。
kubectl get backuprestore -n <namespace_name> <my_restore_cr_name> -o jsonpath='{.status}'