第16章 バックアップおよび復元
16.1. 仮想マシンスナップショットを使用したバックアップと復元 リンクのコピーリンクがクリップボードにコピーされました!
スナップショットを使用して、仮想マシンをバックアップおよび復元できます。スナップショットは、次のストレージプロバイダーによってサポートされています。
- Red Hat OpenShift Data Foundation
- Kubernetes Volume Snapshot API をサポートする Container Storage Interface (CSI) ドライバーを使用するその他のクラウドストレージプロバイダー
Running 状態の仮想マシンのスナップショットを最高の整合性で作成するには、QEMU ゲストエージェントをインストールします (使用中のオペレーティングシステムに含まれていない場合)。QEMU ゲストエージェントは、デフォルトの Red Hat テンプレートに含まれています。
オンラインスナップショットは、ホットプラグされた仮想ディスクを持つ仮想マシンでサポートされます。ただし、仮想マシンの仕様に含まれていないホットプラグされたディスクは、スナップショットに含まれません。
QEMU ゲストエージェントは、仮想マシンファイルシステムの静止を試みることで、一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、静止はできず、ベストエフォートスナップショットが作成されます。
スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。これらの条件が要件を満たさない場合は、スナップショットを再度作成するか、オフラインスナップショットを使用します。
16.1.1. スナップショット リンクのコピーリンクがクリップボードにコピーされました!
スナップショット は、特定の時点における仮想マシン (VM) の状態およびデータを表します。スナップショットを使用して、バックアップおよび障害復旧のために既存の仮想マシンを (スナップショットで表される) 以前の状態に復元したり、以前の開発バージョンに迅速にロールバックしたりできます。
仮想マシンのスナップショットは、電源がオフ (停止状態) またはオン (実行状態) の仮想マシンから作成されます。
実行中の仮想マシンのスナップショットを作成する場合には、コントローラーは QEMU ゲストエージェントがインストールされ、実行中であることを確認します。その場合、スナップショットを取得する前に仮想マシンファイルシステムをフリーズし、スナップショットを取得した後にファイルシステムをフリーズ解除します。
スナップショットは、仮想マシンに割り当てられた各 Container Storage Interface (CSI) ボリュームのコピーと、仮想マシンの仕様およびメタデータのコピーを保存します。スナップショットは作成後に変更できません。
次のスナップショットアクションを実行できます。
- 新しいスナップショットを作成する
スナップショットから仮想マシンのクローンを作成する
重要vTPM デバイスがアタッチされた仮想マシンのクローン作成や、そのスナップショットからの新しい仮想マシンの作成は、サポートされていません。
- 特定の仮想マシンに割り当てられているすべてのスナップショットのリスト表示
- スナップショットからの仮想マシンの復元
- 既存の仮想マシンスナップショットの削除
16.1.1.1. 仮想マシンスナップショットコントローラーとカスタムリソース リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンスナップショット機能では、スナップショットを管理するためのカスタムリソース定義 (CRD) として定義される 3 つの新しい API オブジェクトが導入されています。
-
VirtualMachineSnapshot: スナップショットを作成するユーザー要求を表します。これには、仮想マシンの現在の状態に関する情報が含まれます。 -
VirtualMachineSnapshotContent: クラスター上のプロビジョニングされたリソース (スナップショット) を表します。これは、仮想マシンのスナップショットコントローラーによって作成され、仮想マシンの復元に必要なすべてのリソースへの参照が含まれます。 -
VirtualMachineRestore: スナップショットから仮想マシンを復元するユーザー要求を表します。
仮想マシンスナップショットコントローラーは、1 対 1 のマッピングで、VirtualMachineSnapshotContent オブジェクトを、この作成に使用した VirtualMachineSnapshot オブジェクトにバインドします。
16.1.2. アプリケーションコンシステントなスナップショットとバックアップについて リンクのコピーリンクがクリップボードにコピーされました!
フリーズとフリーズ解除のサイクルにより、Linux または Windows 仮想マシン (VM) のアプリケーションコンシステントなスナップショットおよびバックアップを設定できます。任意のアプリケーションに対して、スナップショットまたはバックアップの開始予定時に通知を受け取るように、Linux 仮想マシン上でスクリプトを設定したり、Windows 仮想マシン上で登録したりすることができます。
Linux 仮想マシンでは、たとえばスナップショットが取得されたり、Velero や別のバックアップベンダーのプラグインを使用してバックアップが開始されたりすると、フリーズおよびフリーズ解除プロセスが自動的にトリガーされます。QEMU Guest Agent (QEMU GA) のフリーズフックによって実行されるフリーズプロセスにより、仮想マシンのスナップショットまたはバックアップが実行される前に、仮想マシンのすべてのファイルシステムがフリーズされ、適切に設定された各アプリケーションにスナップショットまたはバックアップが開始されることが通知されます。この通知により、各アプリケーションに状態を静止させる機会が与えられます。アプリケーションによっては、休止に伴い、新しいリクエストの一時的な拒否、進行中の操作の終了、データのディスクへのフラッシュが実行される場合があります。その後、オペレーティングシステムが、未処理の書き込みをディスクにフラッシュし、新しい書き込みアクティビティーをフリーズすることによって、ファイルシステムを静止させるように指示されます。新しい接続要求はすべて拒否されます。すべてのアプリケーションが非アクティブになると、QEMU GA がファイルシステムをフリーズし、スナップショットが取得されるか、バックアップが開始されます。スナップショットの取得またはバックアップの開始後、フリーズ解除プロセスが開始します。ファイルシステムの書き込みが再アクティブ化され、アプリケーションが通常の操作を再開するための通知を受け取ります。
Windows 仮想マシンでも、同様のフリーズおよびフリーズ解除のサイクルを利用できます。アプリケーションが Volume Shadow Copy Service (VSS) に登録され、バックアップまたはスナップショットの実行が近づいているため、データをフラッシュする必要があるという通知を受け取ります。バックアップまたはスナップショットの完了後にアプリケーションがフリーズ解除されると、アプリケーションはアクティブな状態に戻ります。詳細は、Volume Shadow Copy Service に関する Windows Server のドキュメントを参照してください。
16.1.3. スナップショットの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、仮想マシンのスナップショットを作成できます。
16.1.3.1. Web コンソールを使用したスナップショットを作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用して、仮想マシンのスナップショットを作成できます。
前提条件
-
snapshotフィーチャーゲートは、kubevirtCR の YAML 設定で有効になっています。 仮想マシンスナップショットには、以下の要件を満たすディスクが含まれます。
- ディスクはデータボリュームまたは永続ボリューム要求です。
- ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
- ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
Snapshots タブをクリックしてから Take Snapshot をクリックします。
または、仮想マシンを右クリックし、ポップアップメニューから Create snapshot を選択します。
- スナップショット名を入力します。
- Disks included in this Snapshot を拡張し、スナップショットに組み込むストレージボリュームを表示します。
- 仮想マシンにスナップショットに含めることができないディスクがあり、続行する場合は、I am aware of this warning and wish to proceed を選択します。
- Save をクリックします。
16.1.3.2. CLI を使用したスナップショットの作成 リンクのコピーリンクがクリップボードにコピーされました!
VirtualMachineSnapshot オブジェクトを作成し、オフラインまたはオンラインの仮想マシンの仮想マシン (VM) スナップショットを作成できます。
前提条件
次のコマンドを使用して、
kubevirtCR に対してSnapshotフィーチャーゲートが有効になっていることを確認します。oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yaml
$ oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力 (一部のみ記載):
spec: developerConfiguration: featureGates: - Snapshotspec: developerConfiguration: featureGates: - SnapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 仮想マシンスナップショットに、次の要件を満たすディスクが含まれていることを確認します。
- ディスクはデータボリュームまたは永続ボリューム要求です。
- ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
- ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。
-
OpenShift CLI (
oc) がインストールされている。 - オプション: スナップショットを作成する仮想マシンの電源を切っている。
手順
次の例のように、YAML ファイルを作成して、新しい
VirtualMachineSnapshotの名前とソース仮想マシンの名前を指定するVirtualMachineSnapshotオブジェクトを定義します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow VirtualMachineSnapshotオブジェクトを作成します。oc create -f <snapshot_name>.yaml
$ oc create -f <snapshot_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow スナップコントローラーは
VirtualMachineSnapshotContentオブジェクトを作成し、これをVirtualMachineSnapshotにバインドし、VirtualMachineSnapshotオブジェクトのstatusおよびreadyToUseフィールドを更新します。
検証
オプション: スナップショットの作成プロセス中に、
waitコマンドを使用してスナップショットのステータスを監視し、使用可能になるまで待機できます。以下のコマンドを実行します。
oc wait <vm_name> <snapshot_name> --for condition=Ready
$ oc wait <vm_name> <snapshot_name> --for condition=ReadyCopy to Clipboard Copied! Toggle word wrap Toggle overflow スナップショットのステータスを確認します。
-
InProgress- スナップショット操作はまだ進行中です。 -
Succeeded- スナップショット操作が正常に完了しました。 Failed- スナップショット操作が失敗しました。注記オンラインスナップショットのデフォルト期限は 5 分 (
5m) です。スナップショットが 5 分後に正常に完了しない場合には、ステータスがfailedに設定されます。その後、ファイルシステムと仮想マシンのフリーズが解除され、失敗したスナップショットイメージが削除されるまで、ステータスはfailedのままになります。デフォルトの期限を変更するには、仮想マシンスナップショット spec に
FailureDeadline属性を追加して、スナップショット操作がタイムアウトするまでの時間を分単位 (m) または秒単位 (s) で指定します。期限を指定しない場合は、
0を指定できますが、仮想マシンが応答しなくなる可能性があるため、通常は推奨していません。mまたはsなどの時間の単位を指定しない場合、デフォルトは秒 (s) です。
-
VirtualMachineSnapshotオブジェクトが作成され、VirtualMachineSnapshotContentにバインドされていることと、readyToUseフラグがtrueに設定されていることを確認します。oc describe vmsnapshot <snapshot_name>
$ oc describe vmsnapshot <snapshot_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Progressing状態のstatusフィールドは、スナップショットが作成中であるかどうかを指定します。- 2
Ready状態のstatusフィールドは、スナップショットの作成プロセスが完了しているかどうかを指定します。- 3
- スナップショットを使用する準備ができているかどうかを指定します。
- 4
- スナップショットが、スナップショットコントローラーで作成される
VirtualMachineSnapshotContentオブジェクトにバインドされるように指定します。 - 5
- スナップショットがオンラインスナップショットであるかどうか、または QEMU ゲストエージェントの実行中に作成されたかどうかなど、スナップショットに関する追加情報を指定します。
- 6
- スナップショットの一部であるストレージボリュームとそのパラメーターをリスト表示します。
-
スナップショットの説明の
includedVolumesセクションをチェックして、予想される PVC がスナップショットに含まれていることを確認します。
16.1.4. スナップショット指示を使用したオンラインスナップショットの検証 リンクのコピーリンクがクリップボードにコピーされました!
スナップショットの表示は、オンライン仮想マシン (VM) スナップショット操作に関するコンテキスト情報です。オフラインの仮想マシン (VM) スナップショット操作では、指示は利用できません。イベントは、オンラインスナップショット作成の詳説する際に役立ちます。
前提条件
- オンライン仮想マシンスナップショットを作成しようとしている必要があります。
手順
次のいずれかの操作を実行して、スナップショット指示からの出力を表示します。
-
コマンドラインを使用して、
VirtualMachineSnapshotオブジェクト YAML のstatusスタンザのインジケーター出力を表示します。 -
Web コンソールの Snapshot details 画面で、VirtualMachineSnapshot
Status をクリックします。
-
コマンドラインを使用して、
status.indicationsパラメーターの値を表示して、オンラインの仮想マシンスナップショットのステータスを確認します。-
Onlineは、オンラインスナップショットの作成中に仮想マシンが実行されていたことを示します。 -
GuestAgentは、QEMU ゲストエージェントがアクティブであり、オンラインスナップショット作成時にゲストファイルシステムが正常に静止したことを示します。これにより、アプリケーションの整合性のあるスナップショットが作成され、アプリケーションがグレースフルにシャットダウンされた場合と同様にデータの整合性が維持されます。 -
NoGuestAgentは、QEMU ゲストエージェントがインストールされていないか、オンラインスナップショット作成時にファイルシステムを静止させる準備ができていなかったことを示します。これにより、クラッシュ整合性のあるスナップショットが作成されます。これは、仮想マシンの電源が突然切れたときのような状態をキャプチャーしたものです。その結果、アプリケーションの整合性が確保されず、重要なアプリケーションでデータの問題が発生するリスクが生じます。信頼性を高めるには、ゲストエージェントをインストールして実行するか、スナップショット作成を再試行してください。 -
QuiesceFailedは、オンラインスナップショット作成中にファイルシステムを静止させる試みが失敗したことを示します。これは、スナップショットは作成されたが、必ずしもアプリケーションの整合性が保たれているわけではないことを意味します。適切な整合性を確保するには、スナップショット作成を再試行してください。
-
16.1.5. スナップショットからの仮想マシンの復元 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、スナップショットから仮想マシンを復元できます。
16.1.5.1. Web コンソールを使用したスナップショットからの仮想マシンの復元 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールのスナップショットで表される以前の設定に仮想マシンを復元できます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
-
仮想マシンが実行中の場合は、Options メニュー
をクリックし、Stop を選択して電源を切ります。
- Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
- スナップショットを選択して、Snapshot Details 画面を開きます。
-
Options メニュー
をクリックし、Restore VirtualMachine from snapshot を選択します。
- Restore をクリックします。
オプション: スナップショットに基づいて新しい仮想マシンを作成することもできます。これを行うには、以下を行います。
-
スナップショットのオプションメニュー
から、Create VirtualMachine from Snapshot を選択します。
- 新しい仮想マシンの名前を指定します。
- Create をクリックします。
-
スナップショットのオプションメニュー
16.1.5.2. CLI を使用したスナップショットからの仮想マシンの復元 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインを使用して、既存の仮想マシンを以前の設定に復元できます。オフラインの仮想マシンスナップショットからしか復元できません。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - 復元する仮想マシンの電源を切ります。
オプション: ターゲット仮想マシンが完全に停止 (ready) しない場合の動作を調整します。これを行うには、
vmrestoreYAML 設定のtargetReadinessPolicyパラメーターを次のいずれかの値に設定します。-
FailImmediate- 仮想マシンの準備ができていない場合、復元プロセスは直ちに失敗します。 -
StopTarget- 仮想マシンの準備ができていない場合、仮想マシンは停止され、復元プロセスが開始されます。 -
WaitGracePeriod 5- 復元プロセスは、仮想マシンの準備ができるまで、設定された時間 (分単位) 待機します。これはデフォルトの設定であり、デフォルト値は 5 分に設定されています。 -
WaitEventually- 復元プロセスは、仮想マシンの準備が整うまで無制限に待機します。
-
手順
次の例のように、復元する仮想マシンの名前およびソースとして使用されるスナップショットの名前を指定する
VirtualMachineRestoreオブジェクトを定義するために YAML ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow VirtualMachineRestoreオブジェクトを作成します。oc create -f <vm_restore>.yaml
$ oc create -f <vm_restore>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow スナップショットコントローラーは、
VirtualMachineRestoreオブジェクトのステータスフィールドを更新し、既存の仮想マシン設定をスナップショットのコンテンツに置き換えます。
検証
仮想マシンがスナップショットで表される以前の状態に復元されていること、および
completeフラグがtrueに設定されていることを確認します。oc get vmrestore <vm_restore>
$ oc get vmrestore <vm_restore>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.1.6. スナップショットの削除 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、仮想マシンのスナップショットを削除できます。
16.1.6.1. Web コンソールを使用してスナップショットを削除する リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールを使用して既存の仮想マシンスナップショットを削除できます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
-
スナップショットの横にある Options メニュー
をクリックし、Delete snapshot を選択します。
- Delete をクリックします。
16.1.6.2. CLI での仮想マシンのスナップショットの削除 リンクのコピーリンクがクリップボードにコピーされました!
適切な VirtualMachineSnapshot オブジェクトを削除して、既存の仮想マシン (VM) スナップショットを削除できます。
前提条件
-
OpenShift CLI (
oc) がインストールされている。
手順
VirtualMachineSnapshotオブジェクトを削除します。oc delete vmsnapshot <snapshot_name>
$ oc delete vmsnapshot <snapshot_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow スナップショットコントローラーは、
VirtualMachineSnapshotを、関連付けられたVirtualMachineSnapshotContentオブジェクトと共に削除します。
検証
スナップショットが削除され、この仮想マシンに割り当てられていないことを確認します。
oc get vmsnapshot
$ oc get vmsnapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow