既存のソースディスクからカスタム イメージを作成し、それを使用して仮想マシン(VM)を作成して起動できます。カスタム イメージは、永続ブートディスクを作成して特定の状態に変更し、その状態を保存して VM を作成する場合に理想的です。カスタム イメージを作成して保存し、将来の VM 作成で新しい VM イメージとして使用すると、後で設定手順を重複して行う必要がなくなります。
始める前に
gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。GDC エアギャップ アプライアンスのすべてのコマンドは、gdcloud または kubectl CLI を使用し、Linux 環境が必要です。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。
Management API サーバー名を確認するか、プラットフォーム管理者(PA)にサーバー名を確認します。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
この手順では、パスを使用して
MANAGEMENT_API_SERVER{"</var>"}}を置き換えます。
権限とアクセス権をリクエストする
カスタム イメージを作成するには、プロジェクト レベルの VM イメージ アクセス権が必要です。プロジェクト IAM 管理者の手順に沿って、VM が存在するプロジェクトの Namespace でプロジェクト VirtualMachine イメージ管理者(project-vm-image-admin)ロールを割り当てます。GDC コンソールまたは gdcloud CLI を使用してイメージを作成する場合は、プロジェクトの VirtualMachine 管理者(project-vm-admin)ロールとプロジェクト閲覧者(project-viewer)ロールも必要です。
カスタム イメージの作成
このセクションでは、Linux VM でカスタム イメージを作成する方法について説明します。
イメージ用の VM の準備
実行中の VM にアタッチされている状態のディスクからイメージを作成できます。ただし、イメージをキャプチャしやすい状態に VM を調整することで、イメージの信頼性が向上します。
永続ディスクへのデータ書き込みを最小限に抑える
ディスクの書き込みを減らすには、次のいずれかのプロセスを使用します。VM を停止するか、ディスクへの書き込みを最小限に抑えます。
- VM を停止してシャットダウンできるようにし、永続ディスクへのデータの書き込みを停止します。
イメージを作成する前に VM を停止できない場合は、ディスクへの書き込みを最小限に抑え、ファイル システムを同期してください。永続ディスクへの書き込みを最小限に抑えるには、次の手順を行います。
- 永続ディスクにデータを書き込むアプリまたは OS プロセスを一時停止します。必要に応じて、アプリでディスクへのフラッシュを実行します。他のアプリにも同様のプロセスがある場合があります。
- アプリの永続ディスクへの書き込みを停止します。
sudo syncを実行します。
イメージの作成
ディスクが VM にアタッチされている場合でも、永続ディスクからディスク イメージを作成する手順は次のとおりです。
コンソール
プロジェクトを選択します。
ナビゲーション メニューで、[仮想マシン] > [イメージ] をクリックします。
[イメージを作成] をクリックします。
イメージの一意の名前を入力します。名前は 35 文字以下にする必要があります。
イメージ名に追加するバージョンを入力します。
[ソースディスク] フィールドで、ディスクを選択します。
[最小ディスクサイズ] フィールドに、ディスクサイズを入力します。
画像の説明を入力します。
[作成] をクリックします。
画像が画像リストに表示されます。
API
すべての
VirtualMachineDiskオブジェクトを一覧表示します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT新しいイメージのソースディスクとして使用する
VirtualMachineDiskオブジェクトを選択します。VM ディスクが VM にアタッチされているかどうかを確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.status.virtualMachineAttachments}'ディスクが VM にアタッチされていることを示す出力例:
[{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]- 出力で
"name"の値が返された場合、ディスクはnameフィールドで示される VM にアタッチされています。この出力例では、vm1です。VM の実行ステータスを確認します。 - 出力が空の場合は、
VirtualMachineDiskのsizeを取得します。
- VM の実行ステータスを確認します。ステータスが
Stoppedでない場合は、VM を停止して、VirtualMachineImageの作成に進みます。
- 出力で
VirtualMachineDiskのsizeを取得してイメージを作成します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \ DISK_NAME -o jsonpath='{.spec.size}'Management API サーバーに
VirtualMachineImageImportオブジェクトを作成します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineImageImport metadata: name: VM_IMAGE_IMPORT_NAME spec: source: diskRef: name: DISK_NAME imageMetadata: name: IMAGE_NAME operatingSystem: OS_NAME minimumDiskSize: MINIMUM_DISK_SIZE EOFイメージのインポートが完了し、ステータスが
Readyであることを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimageimports.virtualmachine.gdc.goog --namespace PROJECT \ VM_IMAGE_IMPORT_NAME -o jsonpath='{.status}'インポートが完了すると、ステータスは次のようになります。
{ "conditions": [ { "lastTransitionTime": "", "message": "", "observedGeneration": 1, "reason": "ImportJobComplete", "status": "True", "type": "Ready" } ], "imageName": IMAGE_NAME }イメージが作成されたことを確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \ CREATED_IMAGE_NAME次の定義を使用して、変数を置き換えます。
変数 定義 MANAGEMENT_API_SERVERManagement API サーバーの kubeconfigファイル。PROJECTイメージを作成する GDC プロジェクト。 DISK_NAMEソースディスクの名前( vm1-boot-diskなど)。VM_IMAGE_IMPORT_NAMEVM イメージのインポートの名前。名前は 35 文字以下にする必要があります。 IMAGE_NAME作成されたイメージの名前( custom-imageなど)。OS_NAMEイメージ OS の名前。 ubuntu-2004、windows-2019、rhel-8のいずれかである必要があります。MINIMUM_DISK_SIZEVM イメージのインポートの最小ディスクサイズ( 20G:
minimumDiskSizeなど)は、常に移行元のブートディスクのサイズ以上である必要があります。CREATED_IMAGE_NAME作成されたイメージの名前。作成するイメージ名は一意である必要があります。プロジェクトにすでに存在するイメージ名を指定することはできません。