Trident Protectを使用してRed Hat OpenShift VirtualizationのVMを保護
スナップショットとバックアップを使用して、OpenShift Virtualization 内の VM を保護します。この手順には、 ONTAP S3 オブジェクト ストレージを使用して AppVault を作成し、Kubernetes リソース オブジェクト、永続ボリューム、内部イメージなどの VM データをキャプチャするようにTrident Protect を構成し、必要に応じてデータを復元することが含まれます。
OpenShift Virtualization 環境の仮想マシンは、OpenShift Container プラットフォームのワーカーノードで実行されるコンテナー化されたアプリケーションです。VM のメタデータと永続ディスクを保護して、それらが失われたり破損したりした場合に回復できるようにすることが重要です。
OpenShift Virtualization VMの永続ディスクは、"TridentCSI"を使用してOpenShiftクラスタに統合されたONTAPストレージによってバックアップできます。このセクションでは、"Trident Protect"を使用して、データボリュームを含むVMのスナップショットとバックアップをONTAPオブジェクトストレージに作成します。
必要に応じてスナップショットまたはバックアップから復元します。
Trident Protectは、OpenShiftクラスタ上のアプリケーションとVMのスナップショット、バックアップ、リストア、ディザスタリカバリを可能にします。OpenShift Virtualization VMの場合、Trident Protectで保護できるデータには、VMに関連付けられたKubernetesリソースオブジェクト、永続ボリューム、および内部イメージが含まれます。
以下は、このセクションの例で使用されているさまざまなコンポーネントのバージョンです
オブジェクトストレージ用のApp Vaultを作成する
AppVaultを作成する
アプリケーションまたはVMのスナップショットとバックアップを作成する前に、スナップショットとバックアップを保存するために、Trident Protectでオブジェクトストレージを設定する必要があります。これはバケットCRを使用して行われます。バケットCRを作成して設定できるのは管理者のみです。バケットCRは、Trident ProtectではAppVaultとして知られています。AppVaultオブジェクトは、ストレージバケットの宣言的なKubernetesワークフロー表現です。AppVault CRには、バックアップ、スナップショット、リストア操作、SnapMirrorレプリケーションなどの保護操作でバケットを使用するために必要な設定が含まれています。
この例では、 ONTAP S3 をオブジェクト ストレージとして使用する方法を示します。ONTAP S3 用の AppVault CR を作成するワークフローは次のとおりです。1.ONTAPクラスタの SVM に S3 オブジェクト ストア サーバを作成します。2.オブジェクト ストア サーバーにバケットを作成します。3.SVM に S3 ユーザーを作成します。アクセス キーとシークレット キーを安全な場所に保管してください。4.OpenShift で、 ONTAP S3 認証情報を保存するシークレットを作成します。5.ONTAP S3用のAppVaultオブジェクトを作成する
ONTAP S3用のTrident Protect AppVaultを設定
# alias tp='tridentctl-protect'
# cat appvault-secret.yaml
apiVersion: v1
stringData:
accessKeyID: "<access key of S3>"
secretAccessKey: "<secret access key of S3>"
# you can also provide base 64 encoded values instead of string values
#data:
# base 64 encoded values
# accessKeyID: < base 64 encoded access key>
# secretAccessKey: <base 64 encoded secretAccess key>
kind: Secret
metadata:
name: appvault-secret
namespace: trident-protect
type: Opaque
# cat appvault.yaml
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
name: ontap-s3-appvault
namespace: trident-protect
spec:
providerConfig:
azure:
accountName: ""
bucketName: ""
endpoint: ""
gcp:
bucketName: ""
projectID: ""
s3:
bucketName: trident-protect
endpoint: <lif for S3 access>
secure: "false"
skipCertValidation: "true"
providerCredentials:
accessKeyID:
valueFromSecret:
key: accessKeyID
name: appvault-secret
secretAccessKey:
valueFromSecret:
key: secretAccessKey
name: appvault-secret
providerType: OntapS3
# oc create -f appvault-secret.yaml -n trident-protect
# oc create -f appvault.yaml -n trident-protect

OpenShift Virtualization で VM を作成する
OpenShift Virtualization で VM を作成する
次のスクリーンショットは、テンプレートを使用してコンソールから VM (名前空間 demo 内の demo-fedora) を作成する様子を示しています。ルート ディスクはデフォルトのストレージ クラスを自動的に選択するため、デフォルトのストレージ クラスが適切に設定されていることを確認します。このセットアップでは、デフォルトのストレージ クラスは sc-zonea-san です。追加のディスクを作成するときは、ストレージ クラス sc-zonea-san を選択し、「最適化されたストレージ設定を適用する」チェックボックスをオンにしてください。これにより、アクセス モードが RWX に、ボリューム モードがブロックに設定されます。
|
|
Trident は、SAN (iSCSI、NVMe/TCP、FC) のブロック ボリューム モードで RWX アクセス モードをサポートします。(NAS のデフォルトのアクセス モードです)。後で VM のライブ マイグレーションを実行する必要がある場合は、RWX アクセス モードが必要です。 |







アプリを作成する
アプリを作成
VM 用の Trident Protect アプリを作成する
この例では、デモ名前空間には 1 つの VM があり、アプリの作成時に名前空間のすべてのリソースが含まれます。
# alias tp='tridentctl-protect'
# tp create app demo-vm --namespaces demo -n demo --dry-run > app.yaml
# cat app.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
creationTimestamp: null
name: demo-vm
namespace: demo
spec:
includedNamespaces:
- namespace: demo
# oc create -f app.yaml -n demo

バックアップを作成してアプリを保護する
バックアップを作成する
オンデマンド バックアップを作成する
以前に作成したアプリ (demo-vm) のバックアップを作成します。これには、デモ名前空間内のすべてのリソースが含まれます。バックアップを保存する AppVault 名を指定します。
# tp create backup demo-vm-backup-on-demand --app demo-vm --appvault ontap-s3-appvault -n demo
Backup "demo-vm-backup-on-demand" created.

スケジュールに従ってバックアップを作成する
保持するバックアップの粒度と数を指定して、バックアップのスケジュールを作成します。
# tp create schedule backup-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 45 --backup-retention 1 -n demo --dry-run>backup-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/backup-schedule1 created
#cat backup-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
creationTimestamp: null
name: backup-schedule1
namespace: demo
spec:
appVaultRef: ontap-s3-appvault
applicationRef: demo-vm
backupRetention: "1"
dayOfMonth: ""
dayOfWeek: ""
enabled: true
granularity: Hourly
hour: ""
minute: "45"
recurrenceRule: ""
snapshotRetention: "0"
status: {}
# oc create -f backup-schedule-demo-vm.yaml -n demo


バックアップからの復元
バックアップからの復元
VMを同じ名前空間に復元する
この例では、バックアップ demo-vm-backup-on-demand に、fedora VM の demo-app を含むバックアップが含まれています。
まず、VMを削除し、PVC、ポッド、VMオブジェクトが名前空間「demo」から削除されていることを確認します。

次に、バックアップインプレース復元オブジェクトを作成します。
# tp create bir demo-fedora-restore --backup demo/demo-vm-backup-on-demand -n demo --dry-run>vm-demo-bir.yaml
# cat vm-demo-bir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
annotations:
protect.trident.netapp.io/max-parallel-restore-jobs: "25"
creationTimestamp: null
name: demo-fedora-restore
namespace: demo
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/demo-vm-backup-on-demand_f6af3513-9739-480e-88c7-4cca45808a80
appVaultRef: ontap-s3-appvault
resourceFilter: {}
status:
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo-bir.yaml -n demo
backupinplacerestore.protect.trident.netapp.io/demo-fedora-restore created

VM、ポッド、PVCが復元されたことを確認する

VM を別の名前空間に復元する
まず、アプリを復元する新しい名前空間 (この例では demo2) を作成します。次に、バックアップ復元オブジェクトを作成します
# tp create br demo2-fedora-restore --backup demo/hourly-4c094-20250312154500 --namespace-mapping demo:demo2 -n demo2 --dry-run>vm-demo2-br.yaml
# cat vm-demo2-br.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
annotations:
protect.trident.netapp.io/max-parallel-restore-jobs: "25"
creationTimestamp: null
name: demo2-fedora-restore
namespace: demo2
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/hourly-4c094-20250312154500_aaa14543-a3fa-41f1-a04c-44b1664d0f81
appVaultRef: ontap-s3-appvault
namespaceMapping:
- destination: demo2
source: demo
resourceFilter: {}
status:
conditions: null
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo2-br.yaml -n demo2

VM、ポッド、および PVC が新しい名前空間 demo2 に作成されていることを確認します。

スナップショットを使用してアプリを保護する
スナップショットを作成する
オンデマンド スナップショットを作成する アプリのスナップショットを作成し、保存する必要がある AppVault を指定します。
# tp create snapshot demo-vm-snapshot-ondemand --app demo-vm --appvault ontap-s3-appvault -n demo --dry-run
# cat demo-vm-snapshot-on-demand.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Snapshot
metadata:
creationTimestamp: null
name: demo-vm-snapshot-ondemand
namespace: demo
spec:
appVaultRef: ontap-s3-appvault
applicationRef: demo-vm
completionTimeout: 0s
volumeSnapshotsCreatedTimeout: 0s
volumeSnapshotsReadyToUseTimeout: 0s
status:
conditions: null
postSnapshotExecHooksRunResults: null
preSnapshotExecHooksRunResults: null
state: ""
# oc create -f demo-vm-snapshot-on-demand.yaml
snapshot.protect.trident.netapp.io/demo-vm-snapshot-ondemand created

スナップショットのスケジュールを作成する スナップショットのスケジュールを作成します。保持するスナップショットの粒度と数を指定します。
# tp create Schedule snapshot-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 50 --snapshot-retention 1 -n demo --dry-run>snapshot-schedule-demo-vm.yaml
# cat snapshot-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
creationTimestamp: null
name: snapshot-schedule1
namespace: demo
spec:
appVaultRef: ontap-s3-appvault
applicationRef: demo-vm
backupRetention: "0"
dayOfMonth: ""
dayOfWeek: ""
enabled: true
granularity: Hourly
hour: ""
minute: "50"
recurrenceRule: ""
snapshotRetention: "1"
status: {}
# oc create -f snapshot-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/snapshot-schedule1 created


スナップショットからの復元
スナップショットからの復元
スナップショットから同じ名前空間に VM を復元します demo2 名前空間から VM demo-fedora を削除します。

VM のスナップショットからスナップショットインプレース復元オブジェクトを作成します。
# tp create sir demo-fedora-restore-from-snapshot --snapshot demo/demo-vm-snapshot-ondemand -n demo --dry-run>vm-demo-sir.yaml
# cat vm-demo-sir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotInplaceRestore
metadata:
creationTimestamp: null
name: demo-fedora-restore-from-snapshot
namespace: demo
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/snapshots/20250318132959_demo-vm-snapshot-ondemand_e3025972-30c0-4940-828a-47c276d7b034
appVaultRef: ontap-s3-appvault
resourceFilter: {}
status:
conditions: null
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo-sir.yaml
snapshotinplacerestore.protect.trident.netapp.io/demo-fedora-restore-from-snapshot created

VM とその PVC がデモ名前空間に作成されていることを確認します。

スナップショットから別の名前空間にVMを復元する
以前にバックアップから復元した demo2 名前空間内の VM を削除します。

スナップショットからスナップショット復元オブジェクトを作成し、名前空間マッピングを提供します。
# tp create sr demo2-fedora-restore-from-snapshot --snapshot demo/demo-vm-snapshot-ondemand --namespace-mapping demo:demo2 -n demo2 --dry-run>vm-demo2-sr.yaml
# cat vm-demo2-sr.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
creationTimestamp: null
name: demo2-fedora-restore-from-snapshot
namespace: demo2
spec:
appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/snapshots/20250318132959_demo-vm-snapshot-ondemand_e3025972-30c0-4940-828a-47c276d7b034
appVaultRef: ontap-s3-appvault
namespaceMapping:
- destination: demo2
source: demo
resourceFilter: {}
status:
postRestoreExecHooksRunResults: null
state: ""
# oc create -f vm-demo2-sr.yaml
snapshotrestore.protect.trident.netapp.io/demo2-fedora-restore-from-snapshot created

VM とその PVC が新しい名前空間 demo2 に復元されていることを確認します。

特定のVMを復元する
名前空間内の特定のVMを選択してスナップショット/バックアップを作成し、復元する
前の例では、名前空間内に 1 つの VM がありました。名前空間全体をバックアップに含めることで、その VM に関連付けられたすべてのリソースがキャプチャされました。次の例では、同じ名前空間に別の VM を追加し、ラベル セレクターを使用してこの新しい VM 専用のアプリを作成します。
デモ名前空間に新しいVM(demo-centos vm)を作成します

demo-centos vm とその関連リソースにラベルを付ける

demo-centos vm と pvcs にラベルが付与されていることを確認します


ラベルセレクターを使用して特定のVM(demo-centos)専用のアプリを作成する
# tp create app demo-centos-app --namespaces 'demo(category=protect-demo-centos)' -n demo --dry-run>demo-centos-app.yaml
# cat demo-centos-app.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
creationTimestamp: null
name: demo-centos-app
namespace: demo
spec:
includedNamespaces:
- labelSelector:
matchLabels:
category: protect-demo-centos
namespace: demo
status:
conditions: null
# oc create -f demo-centos-app.yaml -n demo
application.protect.trident.netapp.io/demo-centos-app created

オンデマンドおよびスケジュールに従ってバックアップとスナップショットを作成する方法は、前に示したものと同じです。スナップショットまたはバックアップの作成に使用されている trident-protect アプリには名前空間の特定の VM のみが含まれているため、そこから復元すると特定の VM のみが復元されます。以下に、サンプルのバックアップ/復元操作の例を示します。
対応するアプリを使用して、名前空間内の特定の VM のバックアップを作成します
前の手順では、ラベル セレクターを使用して、デモ名前空間に centos vm のみを含むアプリを作成しました。このアプリのバックアップ (この例ではオンデマンド バックアップ) を作成します。
# tp create backup demo-centos-backup-on-demand --app demo-centos-app --appvault ontap-s3-appvault -n demo
Backup "demo-centos-backup-on-demand" created.

特定の VM を同じ名前空間に復元する 特定の VM (centos) のバックアップは、対応するアプリを使用して作成されました。これからバックアップ・インプレース・リストアまたはバックアップ・リストアが作成されると、この特定の VM のみが復元されます。Centos VM を削除します。


demo-centos-backup-on-demand からバックアップのインプレース リストアを作成し、centos VM が再作成されたことを確認します。
#tp create bir demo-centos-restore --backup demo/demo-centos-backup-on-demand -n demo
BackupInplaceRestore "demo-centos-restore" created.


特定の VM を別の名前空間に復元する demo-centos-backup-on-demand から別の名前空間 (demo3) へのバックアップ復元を作成し、centos VM が再作成されたことを確認します。
# tp create br demo2-centos-restore --backup demo/demo-centos-backup-on-demand --namespace-mapping demo:demo3 -n demo3
BackupRestore "demo2-centos-restore" created.


ビデオデモンストレーション
次のビデオは、スナップショットを使用してVMを保護するデモを示しています。