仮想マシンのオーケストレーション
Cockpit は、物理的な Vapor ホスト上に展開されているすべての仮想マシン(VM)のライフサイクルを一括して管理・調整するための一元化されたコントロールパネルを提供します。管理者は、パフォーマンスの監視、新規ワークロードのプロビジョニング、仮想デバイスの管理、電源操作の実行、およびバックアップポリシーの設定を単一の画面から実行できます。
1. 一元化された VM インベントリ
Cockpit は、接続されているすべての Vapor ホスト上の仮想マシンを単一のインベントリに統合します。
主な機能
- 統合インベントリ: VM がどの物理ホスト上で動作しているかに関わらず、論理的なグループに分けて仮想マシンを表示、検索、管理できます。
- リソースおよびメトリックパネル: CPU 使用率、割り当てメモリ、ネットワークトラフィック(IP/MAC アドレス)、およびディスクの読み取り/書き込みスループットのリアルタイムグラフを表示します。
- コンソールアクセス: Web ブラウザから仮想マシンへの直接的なリモートコンソール接続(VNC または SPICE プロトコル)を開くことができます。これにより、OS への直接アクセスやトラブルシューティングのための仮想モニターおよびキーボードとして機能します。
2. 仮想マシン作成ウィザード
プロビジョニングウィザードは、仮想マシンおよびテンプレートの作成手順を案内します。ステップは最初に選択された**作成タイプ(creation type)**に応じて調整されます。ゼロからの作成ではすべてのハードウェアステップが表示され、クローン、デプロイ、および変換のフローでは必要な項目のみに絞り込まれます。
作成タイプ
| タイプ | 概要 |
|---|---|
| 新規 VM の作成 | ゼロから VM を構築します(配置、OS、ファームウェア、ストレージ、ネットワーク、PCI、Cloud-Init)。 |
| テンプレートからデプロイ | 既存のテンプレートから新しい VM をインスタンス化し、名前、ターゲットストレージ、およびゲストアイデンティティを選択します。 |
| 既存 VM のクローン | VM の構成とディスクの独立した完全なコピーを、独自のゲストアイデンティティ付き、または完全なコピーとして作成します。 |
| VM をテンプレートへクローン | VM をコピーし、再利用可能なテンプレートとして登録します。 |
| テンプレートを VM に変換 | テンプレートを即座に実行可能な VM に戻す変換を行います。 |
| テンプレートをテンプレートへクローン | 既存のテンプレートのコピーを作成します。 |
| VM をテンプレートに変換 | VM をテンプレートへと直接(破壊的に)変換します。 |
ゼロからの作成ステップ
作成タイプ(Creation Type): 上記のモードから 1 つ選択します。
配置ターゲット(Placement Target): データセンター、クラスター、およびホストを選択します。スケジューリングを支援するため、Cockpit は各ホストの空き CPU と RAM を表示します。
識別情報と OS(Identity & OS): VM 名を設定します。初期および最大 vCPU とメモリ(MiB)— 最大値は CPU/メモリのホットプラグ用に上限容量を確保します。自動起動 (autostart)。ファームウェア(UEFI、Secure Boot — x86_64 では q35 が必要、および TPM)。およびゲスト OS ファミリー(Linux、Windows、FreeBSD、その他)とバリアント。これにより libvirt ドライバーのプリセットが適用されます。
ストレージ(Storage): 1 つ以上のディスクを追加します。各ディスクにはアクションがあります:
- 新規作成 (Create New) — 指定したデータストア上に指定サイズの新しいディスク(qcow2、raw、または vmdk)を割り当てます。
- 〜からクローン (Clone From) — 既存のボリュームをコピーします。
- 既存をアタッチ (Attach Existing) — データストアにすでに存在するボリュームをアタッチします。
- 直接 Raw デバイス / DRM (Direct Raw Device) — ホストの物理ブロックデバイス(raw フォーマット)をマウントします。
ディスクのバス(VirtIO、SCSI、IDE、または SATA)を選択し、ISO/CD-ROM メディアを追加することもできます。
ネットワーク(Network): ネットワークインターフェースを追加します。それぞれについて、タイプ(Network、Bridge、Direct/macvtap、または User mode)、ソースの仮想スイッチ(標準ブリッジまたはクラスターレベルの分散ネットワーク)、ドライバーモデル(VirtIO、e1000、rtl8139、または vmxnet3)、および必要に応じて固定 MAC アドレスを選択します。
高度な設定(Advanced): GPU やネットワークコントローラーなどの PCI パススルー デバイスをアタッチします。各エントリはホストの PCI アドレスをマッピングし、オプションでゲストアドレス、ROM ファイル、マルチファンクション、およびプライマリ GPU の設定が可能です。
Cloud-Init: 初回起動時の自動設定のため、5 つのタブ(User Data、Metadata、Network Data、SSH Keys、および Packages)にわたって Cloud-Init のカスタマイズを注入します。
確認と作成(Review and Create): 構成を確認し、対象ホストに非同期の作成リクエストを発行します。オプションの 作成後に VM を起動 (Power on VM after creation) トグルを有効にすると、構築完了後すぐにゲストが起動します。
クローン、デプロイ、および変換のフローでは、省略されたステップが表示されます(通常はソースの選択、新しい名前、およびディスクコピー時のターゲットストレージプールのみ)。VM のクローンとテンプレートからのデプロイでは、Guest identity も選択します。クローンのゲストアイデンティティ を参照してください。
3. ライフサイクルと電源操作
Cockpit は、VM に対して以下の電源操作を提供します:
- 起動(Power On): ゲストオペレーティングシステムをブートします。
- 一時停止(Pause): 処理をサスペンドし、VM のアクティブな CPU およびメモリの状態をその場でフリーズします。
- 再開(Resume): 一時停止した VM の CPU 実行およびメモリ状態を復元します。
- ゲスト OS の再起動(Restart Guest OS): ゲスト内(ACPI)でのリブートを要求し、オペレーティングシステムをクリーンに再起動させます。
- ハードリセット(Reset - Hard): ゲストの協力なしに、即座に VM をリセットします(物理リセットボタンと同等)。
- 強制電源オフ(Power Off - Hard): 電源コードを引き抜くのと同様に即座に VM の電源をオフにし、クリーンシャットダウンを行わずにドメインを終了します。
各アクションは、VM の現在の状態に適用可能な場合のみ提供されます。たとえば、Resume は一時停止中の VM にのみ表示され、Restart Guest OS / Reset (Hard) は稼働中にのみ表示されます。
4. ハードウェアとスペックの変更
設定の編集(Edit Settings) ダイアログでは、VM の仮想ハードウェアを変更できます。ダイアログは ハードウェア (Hardware)、オプション (Options)、および 詳細パラメータ (Advanced Parameters) タブで構成され、稼働中および停止中の VM の両方に適用されます(一部の変更は次回起動時に有効化されます)。
- リソースと CPU: vCPU と メモリ、CPU トポロジー(ソケット / ダイ / コア / スレッド)、および CPU モデルを調整します。現在の値以上に設定された Max vCPUs および Max Memory の上限値は、CPU とメモリの ホットプラグ 用の拡張容量を確保します。
- デバイス管理:
- ハードディスク: 仮想ディスクを追加またはデタッチします。新しいディスクの作成、クローン、アタッチ、または直接 raw デバイスとしてのマウントが可能で、バスやフォーマットを選択できます。CD-ROM/ISO メディアもサポートされます。
- ネットワークアダプター: ネットワークインターフェースを追加または削除します(Network、Bridge、Direct/macvtap、または User モード。VirtIO / e1000 / rtl8139 / vmxnet3 モデル)。
- PCI デバイスパススルー: ホストの PCI デバイス(GPU、ネットワークコントローラーなど)を直接 VM にマッピングします(ROM ファイル、マルチファンクション、プライマリ GPU オプションあり)。
- ファームウェアとオプション: UEFI、Secure Boot、および TPM を切り替え、アーキテクチャとマシンタイプを設定し、ホスト起動時の自動起動 (autostart with host) を制御します。
- 詳細パラメータ: 参考およびトラブルシューティングのための、VM の現在のドメイン定義(自動起動およびその他の libvirt パラメータ)の 読み取り専用 (read-only) ビューです。このタブはライブ構成を反映するものであり、編集は行いません。
5. クローンとテンプレートの管理
テンプレートとクローン機能を使用することで、VM 構成の標準化と迅速なプロビジョニングが可能になります。これらはすべてプロビジョニングウィザードの作成タイプステップから実行されます:
- VM のクローン (VM Cloning): ソース VM の構成と仮想ディスクの独立したコピーを作成します。ウィザードは、ソース VM、新しい VM 名、ディスク複製のためのターゲットストレージプール、および Guest identity の指定を求めます。すべてのディスクイメージが完全にコピーされるため、クローンは作成後ソースに依存せず、ディスクが大きいほど時間がかかります。リンククローン(コピーオンライト)は利用できません。Direct Raw Device、読み取り専用ディスク、ISO メディアはコピーされず、クローンはソースと同じデバイスまたはファイルを使用します。書き込み可能なデバイスを共有している間は、両方の VM を同時に実行しないでください。
- テンプレートからデプロイ (Deploy from Template): テンプレートから新しい VM をプロビジョニングし、名前、送信先ストレージ、および Guest identity を選択します。
- VM をテンプレートへクローン (Clone VM to Template): ソース VM をコピーし、VM およびテンプレートインベントリ内に読み取り専用テンプレートとして登録します。テンプレートダイアログでは、オプションの説明およびターゲットストレージプールも指定できます。テンプレートは常に完全なコピーです。アイデンティティのリセットを選択した場合、それはテンプレートからデプロイするときに行われます。
- テンプレートをテンプレートへクローン (Clone Template to Template): 既存のテンプレートを複製します。
- VM をテンプレートに変換 (Convert VM to Template): VM をその場で永久にテンプレートに変換します(VM をテンプレートとしてマークするステータス遷移)。
- テンプレートを VM に変換 (Convert Template to VM): テンプレートを独立した仮想マシンに戻し、通常の電源操作や構成の編集ができるように復元します。
クローンのゲストアイデンティティ
ディスクを単純にコピーすると、ゲスト OS が自分を他のマシンと区別するために使う情報もすべてコピーされます。ソースとその完全なコピーを同時に実行すると、両方の VM が DHCP から同じ IP アドレスを受け取ったり、クラウドイメージから構築した VM のクローンがネットワークのない状態で起動したり、両方の VM が同じホスト名と SSH ホストキーを持ったりします。
そのため、ウィザードの Clone Options ステップ(Clone an Existing VM および Deploy from Template)には Guest identity の選択肢があります:
| オプション | 結果 |
|---|---|
| Reset guest identity (recommended) | 独自のアイデンティティを持つクローン。ホストは、クローンを初めて起動する前にコピーしたディスクを編集します。ソース VM やテンプレートが変更されることはありません。 |
| Keep an exact copy | ソースのディスクをバイト単位でそのままコピーします。リストアテスト、調査用に保管するコピー、またはライセンスが machine ID に紐づいたアプライアンスに使用します。 |
ターゲットホストがアイデンティティをリセットできる場合、Reset guest identity がデフォルトで選択されます。リセットできない場合は Keep an exact copy が選択され、リセットのオプションは無効になり、ステップにその理由が表示されます(ホストの要件 を参照)。このステップには、クローンに設定されるホスト名と、リセットされる内容・されない内容の簡単な一覧も表示されます。
リセットで変更される内容
- Machine ID: 新しいランダムな ID。この ID でクライアントを識別する DHCP サーバーは、クローンに別のアドレスを割り当てます。 machine ID が
uninitialized(初回起動用に準備されたテンプレート)の場合は、そのまま残されます。 - SSH ホストキー: 同じ種類とサイズの新しいキー。ソースに接続したことのあるクライアントには、クローンのホストキーが異なって見えます。VM に新しい種類のキーもある場合、古い DSA キーは削除されます。 4096 ビットを超える RSA キーは 4096 ビットのキーに置き換えられ、その旨が結果に注記されます。
- ネットワークの MAC バインディング: クローンには新しい MAC アドレスが割り当てられ、ソースの MAC アドレスを指定しているネットワーク設定(netplan、NetworkManager、
ifcfgファイル、systemd-networkd、udev ルール、/etc/network/interfaces)が更新されて、インターフェースが起動するようになります。 - DHCP リース: ソースが保存したリースは削除されます。
- ランダムシード: 新しいランダムデータに置き換えられます。
- ホスト名: クローン名から設定されます。小文字に変換し、ASCII の英字・数字・ハイフン以外の文字はすべてハイフンに置き換え、連続するハイフンは 1 つにまとめ、先頭と末尾のハイフンを削除して、最大 63 文字に切り詰めます。ソースのホスト名のドメインは、有効な DNS ドメインであればそのまま残ります。たとえば
web01.example.comをweb02としてクローンするとweb02.example.comになります。/etc/hostsのループバック行にある一致する名前も更新されます。クローン名から使用できる部分が残らない場合、またはゲストに/etc/hostnameがない場合、ホスト名は変更されません。
ユーザーアカウントとパスワード、ユーザーの SSH authorized keys、インストール済みのソフトウェアとドライバー、アプリケーションデータ、および静的 IP アドレスはソースのまま残ります。
進捗と結果
ホストがコピーを編集している間、Tasks パネルには Resetting guest identity… と表示されます。作成されたものの確認が必要なクローンは Completed with warning で終了します。タスクを開いて詳細を確認してください。代表的な警告:
- 静的 IP アドレスが維持された: クローンはソースと同じアドレスを持ち、autostart がオフの状態で作成されます。両方の VM を同じネットワークで実行する前にアドレスを変更してください。例:ソースを停止したままクローンを起動し、コンソールからアドレスを変更してから、ソースを再度起動します。
- Active Directory または Kerberos ドメインに参加している: クローンはソースのマシンアカウントを使い続けるため、ソースがドメインからロックアウトされる可能性があります。ネットワークに接続する前に、クローンをドメインから外し、新しい名前で再参加させてください。
- cloud-init がホスト名を管理している: cloud-init が起動のたびにソースのホスト名を再設定することがあります。クローンにソースの名前が表示され続ける場合は、クローンの cloud-init 設定でホスト名を変更してください。
登録・管理エージェント(Red Hat Subscription Manager、Ubuntu Pro、Puppet、Salt、Chef)はソースの登録情報をそのまま持っています。クローンを登録し直してください。
アイデンティティをリセットできない場合
Reset guest identity を選択していてリセットできない場合、クローンは理由を示して失敗し(理由は Clone Options ステップまたはタスクに表示されます)、VM は作成されません。ほとんどのケースはコピー開始前に検出されます。代わりに Keep an exact copy を選択し、両方の VM を実行する前にゲスト内でアイデンティティを変更してください:
| 状況 | 対処 |
|---|---|
| Windows またはその他の Linux 以外のゲスト | 完全なコピーを作成し、ゲストを汎用化します(Windows では Sysprep を使用)。 |
| 暗号化されたディスク(LUKS や BitLocker など) | 完全なコピーを作成し、ゲスト内でアイデンティティを変更します。 |
| ディスク上に OS が見つからない、または複数ある | 完全なコピーを作成します。 |
| ホストが変更できないファイルシステム(例:古いカーネルのホスト上の RHEL 9 およびその再ビルド版(Rocky Linux、AlmaLinux)の XFS ファイルシステム) | 完全なコピーを作成し、ゲスト内でアイデンティティを変更します。 |
/var などゲストのシステムの一部が、クローンと一緒にコピーされないディスク(Direct Raw Device や読み取り専用ディスク)上にある | ソース VM でシステムのその部分をディスクイメージに移してから、再度クローンします。完全なコピーでも、そのデバイスはソースと共有されたままです。 |
| VM に複数のネットワークインターフェースがあり、ネットワーク設定が、ソースのどのネットワークインターフェースにもない MAC アドレスを指定している | ソース VM の古いエントリを削除または修正してから、再度クローンします。guest_identity が auto の場合は警告になるだけで、リセットは完了します。 |
| SSH ホストキーが DSA キーのみ | ソース VM に新しい種類のキーを追加(sudo ssh-keygen -A)してから、再度クローンします。 |
| ホストの Vapor バージョンがアイデンティティのリセットに対応していない | ホストの Vapor をアップグレードするか、完全なコピーを作成します。 |
Linux クローンのアイデンティティを自分で変更するには、クローン内で次を実行します:
sudo rm -f /etc/machine-id /var/lib/dbus/machine-id
sudo systemd-machine-id-setup
sudo hostnamectl set-hostname <new-name>
sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -A
sudo systemctl restart ssh # RHEL 系ゲストではサービス名は sshdホストがコピーしたディスクを編集している間に問題が発生した場合、クローン全体が失敗します。コピーは削除され、VM は作成されません。ソースには影響しません。
テンプレート
テンプレート自体は常に完全なコピーです。Clone VM to Template、Clone Template to Template、および Convert VM to Template では、ゲストのアイデンティティは変更されません。選択はテンプレートからデプロイするたびに行います。以前のバージョンの Vapor で VM をクローンして作成したテンプレートでは、VM に複数のネットワークインターフェースがあるとリセットが失敗することがあります。元の VM からテンプレートを作り直すと解決します。
ゲストエージェント
クローンはソースの QEMU ゲストエージェント接続を保持するため、エージェントに依存する機能(レプリケーションやバックアップのためのファイルシステムの静止化、ゲスト IP の報告など)はソースと同様にクローンでも動作します。
ホストの要件
アイデンティティのリセットには、クローンを実行する Vapor ホストに guestfish(libguestfs の一部)が必要です。そのホストに root としてインストールします:
# Debian 12 以降、Ubuntu 22.04 以降
sudo apt-get install guestfish libguestfs-xfs
# Debian 11、Ubuntu 20.04
sudo apt-get install libguestfs-tools libguestfs-xfs
# RHEL 9 とそのリビルド(Rocky Linux、AlmaLinux)
sudo dnf install libguestfs libguestfs-xfs
# RHEL 8 とそのリビルド
sudo dnf install libguestfs-tools-c libguestfs-xfsVapor を再起動する必要はありません。Vapor はツールを検出し、バックグラウンドで短いセルフテストを実行します。1 分ほど後にウィザードを開き直してください。それでも Reset guest identity が利用できない場合は、ステップに表示される理由で、ホストに不足しているものを確認できます。
API クライアント向け
POST /api/v1/vms/{id}/clone および POST /api/v1/vms/from-template は guest_identity フィールドを受け付けます:reset(アイデンティティをリセットします。できない場合は 409 とコード IDENTITY_RESET_UNAVAILABLE または IDENTITY_RESET_UNSUPPORTED_GUEST で失敗)、auto(可能ならリセットし、できなければ完全なコピーを作成して警告を報告)、または keep(完全なコピー)。省略するとホストのデフォルトが適用されます。GET /api/v1/vms/{id}/clone-capabilities は、VM のホストがアイデンティティをリセットできるかどうかを返します。リセットツール自体の失敗(エラーまたはタイムアウト)は、コード IDENTITY_RESET_FAILED(HTTP 500)で報告されます。
6. 削除とクリーンアップオプション
仮想マシンを削除する際、Cockpit は関連するリソースの管理オプションを提供します:
- メタデータの削除: Cockpit およびホストハイパーバイザー構成から VM の登録情報を削除します。
- ストレージのクリーンアップ: デフォルトでは、データの喪失を防ぐために VM を削除しても仮想ディスクは維持されます。管理者は
remove_disksパラメータを有効化(APIDELETE /vms/:id?remove_disks=trueを実行)することで、関連するすべての仮想ディスクボリュームを対応するデータストアから削除できます。