スナップショットとテンプレート
Vaporは、テスト、バックアップ、または迅速なインスタンス複製の目的で、仮想マシンの特定時点の状態をキャプチャするメカニズムを提供します。
VMスナップショット
スナップショットは、特定の瞬間における仮想マシンのディスクイメージの状態、およびオプションでアクティブメモリ(RAM)の状態を記録します。
スナップショット機能とメモリ状態
ストレージバックエンドやゲスト構成によって、サポートされるスナップショット機能が異なります:
- 機能チェック (Capabilities Check): スナップショットを作成する前に、Vaporは
GET /api/v1/virtualization/computes/{id}/snapshots/capabilitiesを呼び出して、メモリを含むスナップショット(supports_memory)がサポートされているかどうかを判断します。 - メモリを含める (Include Memory): サポートされている場合、作成時に Include Memory を有効にすることでアクティブなRAM状態を保存できます。これにより、VMはスナップショット取得時の正確なポイントから実行を再開し、実行中のプロセスを維持できます。メモリが保存されない場合、スナップショットへの復元時にVMは電源オフの状態で起動します。
- ファイルシステム静止化 (Filesystem Quiescing): 静止化が有効(
quiesce: true)な場合、VaporはQEMU Guest Agentを使用してゲストファイルシステムのI/O操作を一時停止し、ダーティキャッシュブロックをディスクにフラッシュしてからスナップショットをキャプチャします。 - 外部スナップショット (External Snapshots): 特定のストレージ構成では、内部のQCOW2構造を変更する代わりに、外部スナップショット(
force_external: true)の作成を強制してオーバーレイファイルを生成できます。
管理操作 (API & UI)
- スナップショット一覧の取得:
GET /api/v1/virtualization/computes/{id}/snapshots - スナップショットの作成:
POST /api/v1/virtualization/computes/{id}/snapshots(パラメータ:name、description、include_memory(bool)、quiesce(bool)、force_external(bool)) - スナップショット詳細の取得:
GET /api/v1/virtualization/computes/{id}/snapshots/{snapshot_name} - スナップショットへの復元:
POST /api/v1/virtualization/computes/{id}/snapshots/{snapshot_name}/revert - スナップショットの削除:
DELETE /api/v1/virtualization/computes/{id}/snapshots/{snapshot_name}
WARNING
スナップショットは、基盤となる仮想ディスクファイルチェーンに依存します。ベースの仮想ディスクイメージが削除または破損した場合、スナップショットは復元できなくなります。スナップショットを独立したバックアップとして扱うべきではありません。
VMテンプレート
テンプレートを使用すると、管理者は仮想マシンの構成を読み取り専用のマスターイメージ(ゴールデンイメージ)として固定し、同じ構成とソフトウェアを持つ新しいVMをデプロイできます。デプロイした各VMには、独自のゲストアイデンティティ(machine ID、SSH ホストキー、ホスト名、ネットワークのバインディング)を持たせることができます。デプロイとゲストアイデンティティ を参照してください。
テンプレートのライフサイクルと変換
- VMからテンプレートへの変換:
POST /api/v1/virtualization/computes/{id}/convert-to-template(descriptionを指定)。VMは電源オフである必要があります。変換されると、VMはテンプレートレジストリ(GET /virtualization/computes/templates)に隔離され、通常の一覧からは非表示になります。 - 起動ブロック (Start Block): テンプレートを直接電源オンにしたり実行したりすることはできません。テンプレートを起動しようとすると、
HTTP 409 Conflictエラーが返されます。 - VMのコピーからテンプレートを作成:
POST /api/v1/virtualization/computes/{id}/clone-to-templateはVMのディスクをコピーし、そのコピーをテンプレートとして登録します。ソースVMはそのまま残ります。 - テンプレートからのデプロイ:
POST /api/v1/virtualization/computes/from-templateにtemplate_id、name、ターゲットのstorage_pool、および任意でguest_identityを指定して送信します。Vaporはテンプレートのすべてのディスクを完全にコピーして新しいVMをプロビジョニングします。そのため、ディスクが大きいほどデプロイに時間がかかり、新しいVMは作成後テンプレートに依存しません。リンククローン(コピーオンライト)は利用できません。 - テンプレートからVMへの変換:
POST /api/v1/virtualization/computes/templates/{template_id}/convert-to-vm。これにより、テンプレートが通常の起動可能なVMとして再登録されます。 - テンプレートの削除:
DELETE /api/v1/virtualization/computes/templates/{template_id}?remove_disks=trueはテンプレートを削除し、オプションでバッキングストレージディスクをパージします。
デプロイとゲストアイデンティティ
- テンプレートは完全なコピーです。 VMのテンプレートへの変換、VMのコピーからのテンプレート作成、テンプレートから別のテンプレートへのコピーでは、ゲストのアイデンティティは変更されません。Vaporはテンプレートのソースのネットワーク MAC アドレスを記録し、後のデプロイでゲストのネットワーク設定を更新できるようにします。
- デプロイ時に Guest identity を選択できます。 クローンと同様に、テンプレートからのデプロイではゲストアイデンティティをリセットする(Reset guest identity (recommended))か、完全なコピーを保持する(Keep an exact copy)かを選べます。Web UI では、デプロイウィザードに Clone ダイアログと同じ Guest identity フィールドが表示されます。
guest_identityを省略するとホストのデフォルトが適用されます。201レスポンスには、適用されたguest_identityとidentity_resetの結果が含まれます。リセットで変更される内容、リセットできない場合、およびホストの要件については、クローンのゲストアイデンティティ を参照してください。 - 以前のバージョンの Vapor で VM をコピーして作成したテンプレート には、ソースの MAC アドレスが記録されていません。テンプレートのネットワークインターフェースが 1 つの場合、Vapor はネットワーク設定を更新できます。複数ある場合、ネットワーク設定に Vapor が認識できない MAC アドレスが含まれるため、リセットが失敗する(
autoの場合は警告付きで完了する)ことがあります。元の VM からテンプレートを作り直すと解決します。VM からその場で変換したテンプレートは影響を受けません。