第15章 バックアップおよび復元
15.1. 仮想マシンスナップショットを使用したバックアップと復元
スナップショットを使用して、仮想マシンをバックアップおよび復元できます。スナップショットは、次のストレージプロバイダーによってサポートされています。
- Kubernetes Volume Snapshot API をサポートする Container Storage Interface (CSI) ドライバーを備えたクラウドストレージプロバイダー
Running
状態の仮想マシンのスナップショットを最高の整合性で作成するには、QEMU ゲストエージェントをインストールします (使用中のオペレーティングシステムに含まれていない場合)。QEMU ゲストエージェントは、デフォルトの Red Hat テンプレートに含まれています。
オンラインスナップショットは、ホットプラグされた仮想ディスクを持つ仮想マシンでサポートされます。ただし、仮想マシンの仕様に含まれていないホットプラグされたディスクは、スナップショットに含まれません。
QEMU ゲストエージェントは、仮想マシンファイルシステムの静止を試みることで、一貫性のあるスナップショットを取得します。これにより、スナップショットの作成前にインフライトの I/O がディスクに書き込まれるようになります。ゲストエージェントが存在しない場合は、静止はできず、ベストエフォートスナップショットが作成されます。
スナップショットの作成条件は、Web コンソールまたは CLI に表示されるスナップショットの指示に反映されます。これらの条件が要件を満たさない場合は、スナップショットを再度作成するか、オフラインスナップショットを使用します。
15.1.1. スナップショット
スナップショット は、特定の時点における仮想マシン (VM) の状態およびデータを表します。スナップショットを使用して、バックアップおよび障害復旧のために既存の仮想マシンを (スナップショットで表される) 以前の状態に復元したり、以前の開発バージョンに迅速にロールバックしたりできます。
仮想マシンのスナップショットは、電源がオフ (停止状態) またはオン (実行状態) の仮想マシンから作成されます。
実行中の仮想マシンのスナップショットを作成する場合には、コントローラーは QEMU ゲストエージェントがインストールされ、実行中であることを確認します。その場合、スナップショットを取得する前に仮想マシンファイルシステムをフリーズし、スナップショットを取得した後にファイルシステムをフリーズ解除します。
スナップショットは、仮想マシンに割り当てられた各 Container Storage Interface (CSI) ボリュームのコピーと、仮想マシンの仕様およびメタデータのコピーを保存します。スナップショットは作成後に変更できません。
次のスナップショットアクションを実行できます。
- 新しいスナップショットを作成する
スナップショットから仮想マシンのクローンを作成する
重要vTPM デバイスがアタッチされた仮想マシンのクローン作成や、そのスナップショットからの新しい仮想マシンの作成は、サポートされていません。
- 特定の仮想マシンに割り当てられているすべてのスナップショットのリスト表示
- スナップショットからの仮想マシンの復元
- 既存の仮想マシンスナップショットの削除
仮想マシンスナップショットコントローラーとカスタムリソース
仮想マシンスナップショット機能では、スナップショットを管理するためのカスタムリソース定義 (CRD) として定義される 3 つの新しい API オブジェクトが導入されています。
-
VirtualMachineSnapshot
: スナップショットを作成するユーザー要求を表します。これには、仮想マシンの現在の状態に関する情報が含まれます。 -
VirtualMachineSnapshotContent
: クラスター上のプロビジョニングされたリソース (スナップショット) を表します。これは、仮想マシンのスナップショットコントローラーによって作成され、仮想マシンの復元に必要なすべてのリソースへの参照が含まれます。 -
VirtualMachineRestore
: スナップショットから仮想マシンを復元するユーザー要求を表します。
仮想マシンスナップショットコントローラーは、1 対 1 のマッピングで、VirtualMachineSnapshotContent
オブジェクトを、この作成に使用した VirtualMachineSnapshot
オブジェクトにバインドします。
15.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 のドキュメントを参照してください。
15.1.3. スナップショットの作成
Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、仮想マシン (VM) のスナップショットを作成できます。
15.1.3.1. Web コンソールを使用したスナップショットを作成する
Red Hat OpenShift Service on AWS Web コンソールを使用して、仮想マシン (VM) のスナップショットを作成できます。
前提条件
-
snapshot
フィーチャーゲートは、kubevirt
CR の YAML 設定で有効になっています。 仮想マシンスナップショットには、以下の要件を満たすディスクが含まれます。
- ディスクはデータボリュームまたは永続ボリューム要求です。
- ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
- ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Snapshots タブをクリックしてから Take Snapshot をクリックします。
- スナップショット名を入力します。
- Disks included in this Snapshot を拡張し、スナップショットに組み込むストレージボリュームを表示します。
- 仮想マシンにスナップショットに含めることができないディスクがあり、続行する場合は、I am aware of this warning and wish to proceed を選択します。
- Save をクリックします。
15.1.3.2. コマンドラインを使用したスナップショットの作成
VirtualMachineSnapshot
オブジェクトを作成し、オフラインまたはオンラインの仮想マシンの仮想マシン (VM) スナップショットを作成できます。
前提条件
次のコマンドを使用して、
kubevirt
CR に対してSnapshot
フィーチャーゲートが有効になっていることを確認します。$ oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yaml
省略された出力
spec: developerConfiguration: featureGates: - Snapshot
仮想マシンスナップショットに、次の要件を満たすディスクが含まれていることを確認します。
- ディスクはデータボリュームまたは永続ボリューム要求です。
- ディスクは、Container Storage Interface (CSI) ボリュームスナップショットをサポートするストレージクラスに属しています。
- ディスクは、永続ボリューム (PV) に バインド され、データソースが 入力 されます。
-
OpenShift CLI (
oc
) がインストールされている。 - オプション: スナップショットを作成する仮想マシンの電源を切っている。
手順
次の例のように、YAML ファイルを作成して、新しい
VirtualMachineSnapshot
の名前とソース仮想マシンの名前を指定するVirtualMachineSnapshot
オブジェクトを定義します。apiVersion: snapshot.kubevirt.io/v1beta1 kind: VirtualMachineSnapshot metadata: name: <snapshot_name> spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: <vm_name>
VirtualMachineSnapshot
オブジェクトを作成します。$ oc create -f <snapshot_name>.yaml
スナップコントローラーは
VirtualMachineSnapshotContent
オブジェクトを作成し、これをVirtualMachineSnapshot
にバインドし、VirtualMachineSnapshot
オブジェクトのstatus
およびreadyToUse
フィールドを更新します。
検証
オプション: スナップショットの作成プロセス中に、
wait
コマンドを使用してスナップショットのステータスを監視し、使用可能になるまで待機できます。以下のコマンドを実行します。
$ oc wait <vm_name> <snapshot_name> --for condition=Ready
スナップショットのステータスを確認します。
-
InProgress
- スナップショット操作はまだ進行中です。 -
Succeeded
- スナップショット操作が正常に完了しました。 Failed
- スナップショット操作が失敗しました。注記オンラインスナップショットのデフォルト期限は 5 分 (
5m
) です。スナップショットが 5 分後に正常に完了しない場合には、ステータスがfailed
に設定されます。その後、ファイルシステムと仮想マシンのフリーズが解除され、失敗したスナップショットイメージが削除されるまで、ステータスはfailed
のままになります。デフォルトの期限を変更するには、仮想マシンスナップショット仕様に
FailureDeadline
属性を追加して、スナップショット操作がタイムアウトするまでの時間を分単位 (m
) または秒単位 (s
) で指定します。期限を指定しない場合は、
0
を指定できますが、仮想マシンが応答しなくなる可能性があるため、通常は推奨していません。m
またはs
などの時間の単位を指定しない場合、デフォルトは秒 (s
) です。
-
VirtualMachineSnapshot
オブジェクトが作成され、VirtualMachineSnapshotContent
にバインドされていることと、readyToUse
フラグがtrue
に設定されていることを確認します。$ oc describe vmsnapshot <snapshot_name>
出力例
apiVersion: snapshot.kubevirt.io/v1beta1 kind: VirtualMachineSnapshot metadata: creationTimestamp: "2020-09-30T14:41:51Z" finalizers: - snapshot.kubevirt.io/vmsnapshot-protection generation: 5 name: mysnap namespace: default resourceVersion: "3897" selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinesnapshots/my-vmsnapshot uid: 28eedf08-5d6a-42c1-969c-2eda58e2a78d spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm status: conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "False" 1 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "True" 2 type: Ready creationTime: "2020-09-30T14:42:03Z" readyToUse: true 3 sourceUID: 355897f3-73a0-4ec4-83d3-3c2df9486f4f virtualMachineSnapshotContentName: vmsnapshot-content-28eedf08-5d6a-42c1-969c-2eda58e2a78d 4 indications: 5 - Online includedVolumes: 6 - name: rootdisk kind: PersistentVolumeClaim namespace: default - name: datadisk1 kind: DataVolume namespace: default
- 1
Progressing
状態のstatus
フィールドは、スナップショットが作成中であるかどうかを指定します。- 2
Ready
状態のstatus
フィールドは、スナップショットの作成プロセスが完了しているかどうかを指定します。- 3
- スナップショットを使用する準備ができているかどうかを指定します。
- 4
- スナップショットが、スナップショットコントローラーで作成される
VirtualMachineSnapshotContent
オブジェクトにバインドされるように指定します。 - 5
- スナップショットがオンラインスナップショットであるかどうか、または QEMU ゲストエージェントの実行中に作成されたかどうかなど、スナップショットに関する追加情報を指定します。
- 6
- スナップショットの一部であるストレージボリュームとそのパラメーターをリスト表示します。
-
スナップショットの説明の
includeVolumes
セクションをチェックして、予想される PVC がスナップショットに含まれていることを確認します。
15.1.4. スナップショット指示を使用したオンラインスナップショットの検証
スナップショットの表示は、オンライン仮想マシン (VM) スナップショット操作に関するコンテキスト情報です。オフラインの仮想マシン (VM) スナップショット操作では、指示は利用できません。イベントは、オンラインスナップショット作成の詳説する際に役立ちます。
前提条件
- オンライン仮想マシンスナップショットを作成しようとしている必要があります。
手順
次のいずれかの操作を実行して、スナップショット指示からの出力を表示します。
-
コマンドラインを使用して、
VirtualMachineSnapshot
オブジェクト YAML のstatus
スタンザのインジケーター出力を表示します。 -
Web コンソールの Snapshot details 画面で、VirtualMachineSnapshot
Status をクリックします。
-
コマンドラインを使用して、
status.indications
パラメーターの値を表示して、オンラインの仮想マシンスナップショットのステータスを確認します。-
Online
は、オンラインスナップショットの作成中に仮想マシンが実行されていたことを示します。 -
GuestAgent
は、オンラインスナップショットの作成中に QEMU ゲストエージェントが実行されていたことを示します。 -
NoGuestAgent
は、オンラインスナップショットの作成中に QEMU ゲストエージェントが実行されていなかったことを示します。QEMU ゲストエージェントがインストールされていないか、実行されていないか、別のエラーが原因で、QEMU ゲストエージェントを使用してファイルシステムをフリーズしてフリーズを解除できませんでした。
-
15.1.5. スナップショットからの仮想マシンの復元
Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、スナップショットから仮想マシン (VM) を復元できます。
15.1.5.1. Web コンソールを使用したスナップショットからの仮想マシンの復元
Red Hat OpenShift Service on AWS Web コンソールのスナップショットで表される以前の設定に仮想マシン (VM) を復元できます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
-
仮想マシンが実行中の場合は、Options メニュー
をクリックし、Stop を選択して電源を切ります。
- Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
- スナップショットを選択して、Snapshot Details 画面を開きます。
-
Options メニュー
をクリックし、Restore VirtualMachine from snapshot を選択します。
- Restore をクリックします。
オプション: スナップショットに基づいて新しい仮想マシンを作成することもできます。改善点を報告する場合は、以下のように行います。
-
スナップショットのオプションメニュー
から、Create VirtualMachine from Snapshot を選択します。
- 新しい仮想マシンの名前を指定します。
- Createをクリックします。
-
スナップショットのオプションメニュー
15.1.5.2. コマンドラインを使用したスナップショットからの仮想マシンの復元
コマンドラインを使用して、既存の仮想マシンを以前の設定に復元できます。オフラインの仮想マシンスナップショットからしか復元できません。
前提条件
- 復元する仮想マシンの電源を切ります。
オプション: ターゲット仮想マシンが完全に停止 (ready) しない場合の動作を調整します。これを行うには、
vmrestore
YAML 設定のtargetReadinessPolicy
パラメーターを次のいずれかの値に設定します。-
FailImmediate
- 仮想マシンの準備ができていない場合、復元プロセスは直ちに失敗します。 -
StopTarget
- 仮想マシンの準備ができていない場合、仮想マシンは停止され、復元プロセスが開始されます。 -
WaitGracePeriod 5
- 復元プロセスは、仮想マシンの準備ができるまで、設定された時間 (分単位) 待機します。これはデフォルトの設定であり、デフォルト値は 5 分に設定されています。 -
WaitEventually
- 復元プロセスは、仮想マシンの準備が整うまで無制限に待機します。
-
手順
次の例のように、復元する仮想マシンの名前およびソースとして使用されるスナップショットの名前を指定する
VirtualMachineRestore
オブジェクトを定義するために YAML ファイルを作成します。apiVersion: snapshot.kubevirt.io/v1beta1 kind: VirtualMachineRestore metadata: name: <vm_restore> spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: <vm_name> virtualMachineSnapshotName: <snapshot_name>
VirtualMachineRestore
オブジェクトを作成します。$ oc create -f <vm_restore>.yaml
スナップショットコントローラーは、
VirtualMachineRestore
オブジェクトのステータスフィールドを更新し、既存の仮想マシン設定をスナップショットのコンテンツに置き換えます。
検証
仮想マシンがスナップショットで表される以前の状態に復元されていること、および
complete
フラグがtrue
に設定されていることを確認します。$ oc get vmrestore <vm_restore>
出力例
apiVersion: snapshot.kubevirt.io/v1beta1 kind: VirtualMachineRestore metadata: creationTimestamp: "2020-09-30T14:46:27Z" generation: 5 name: my-vmrestore namespace: default ownerReferences: - apiVersion: kubevirt.io/v1 blockOwnerDeletion: true controller: true kind: VirtualMachine name: my-vm uid: 355897f3-73a0-4ec4-83d3-3c2df9486f4f resourceVersion: "5512" selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinerestores/my-vmrestore uid: 71c679a8-136e-46b0-b9b5-f57175a6a041 spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm virtualMachineSnapshotName: my-vmsnapshot status: complete: true 1 conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "False" 2 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "True" 3 type: Ready deletedDataVolumes: - test-dv1 restoreTime: "2020-09-30T14:46:28Z" restores: - dataVolumeName: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 persistentVolumeClaim: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 volumeName: datavolumedisk1 volumeSnapshotName: vmsnapshot-28eedf08-5d6a-42c1-969c-2eda58e2a78d-volume-datavolumedisk1
15.1.6. スナップショットの削除
Red Hat OpenShift Service on AWS Web コンソールまたはコマンドラインを使用して、仮想マシン (VM) のスナップショットを削除できます。
15.1.6.1. Web コンソールを使用してスナップショットを削除する
Web コンソールを使用して既存の仮想マシンスナップショットを削除できます。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Snapshots タブをクリックして、仮想マシンに関連付けられたスナップショットのリストを表示します。
-
スナップショットの横にある Options メニュー
をクリックし、Delete snapshot を選択します。
- Delete をクリックします。
15.1.6.2. CLI での仮想マシンのスナップショットの削除
適切な VirtualMachineSnapshot
オブジェクトを削除して、既存の仮想マシン (VM) スナップショットを削除できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。
手順
VirtualMachineSnapshot
オブジェクトを削除します。$ oc delete vmsnapshot <snapshot_name>
スナップショットコントローラーは、
VirtualMachineSnapshot
を、関連付けられたVirtualMachineSnapshotContent
オブジェクトと共に削除します。
検証
スナップショットが削除され、この仮想マシンに割り当てられていないことを確認します。
$ oc get vmsnapshot