このドキュメントでは、Google Distributed Cloud(GDC)のエアギャップ仮想マシン(VM)インスタンスで使用するカスタム イメージを作成する方法について説明します。
既存のソースディスクからカスタム イメージを作成し、それを使用して仮想マシン(VM)を作成して起動できます。カスタム イメージは、永続ブートディスクを作成して特定の状態に変更し、その状態を保存して VM を作成する場合に理想的です。カスタム イメージを作成して保存し、将来の VM 作成で新しい VM イメージとして使用すると、後で設定手順を重複して行う必要がなくなります。
このドキュメントは、Google Distributed Cloud(GDC)のエアギャップ環境で VM を作成し、VM イメージを管理するプラットフォーム管理者またはアプリケーション オペレーター グループのデベロッパーを対象としています。詳細については、GDC エアギャップの対象ユーザーに関するドキュメントをご覧ください。
始める前に
gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。
Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。
これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して
MANAGEMENT_API_SERVERを置き換えます。
IAM ロールをリクエストする
プロジェクトに対する次のロールをリクエストするには、プロジェクト IAM 管理者に連絡してください。
プロジェクト VirtualMachine 管理者(
project-vm-admin): プロジェクト Namespace で VM を作成、変更、一覧表示、削除します。プロジェクト閲覧者(
project-viewer): プロジェクトの Namespace 内のすべてのリソースを表示します。プロジェクト仮想マシン イメージ管理者(
project-vm-image-admin): プロジェクト Namespace でカスタム VM イメージを作成、一覧表示、削除します。
すべての VM ロールは、VM が存在するプロジェクトの Namespace にバインドする必要があります。手順に沿ってアクセスを確認します。
カスタム イメージの作成
このセクションでは、Linux VM でカスタム イメージを作成する方法について説明します。
イメージ用の VM の準備
実行中の VM にアタッチされている状態のディスクからイメージを作成できます。ただし、イメージをキャプチャしやすい状態に VM を調整することで、イメージの信頼性が向上します。
永続ディスクへのデータ書き込みを停止する
VM を停止してシャットダウンできるようにし、永続ディスクへのデータの書き込みを停止します。
イメージの作成
ディスクが VM にアタッチされている場合でも、次の手順で永続ディスクからディスク イメージを作成できます。
コンソール
プロジェクトを選択します。
ナビゲーション メニューで、[仮想マシン] > [イメージ] をクリックします。
[イメージを作成] をクリックします。
イメージの一意の名前を入力します。名前は 35 文字以下にする必要があります。
イメージ名に追加するバージョンを入力します。
[ソースディスク] フィールドで、ディスクを選択します。
[最小ディスクサイズ] フィールドに、ディスクサイズを入力します。
画像の説明を入力します。
[作成] をクリックします。
画像が画像リストに表示されます。
API
すべての
VirtualMachineDiskオブジェクトを一覧表示します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog新しいイメージのソースディスクとして使用する
VirtualMachineDiskオブジェクトを選択します。VM ディスクが VM にアタッチされているかどうかを確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \ -o jsonpath='{.status.virtualMachineAttachments}'次の出力例は、VM にアタッチされたディスクを示しています。
[{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]- 出力で
"name"の値が返された場合、ディスクはnameフィールドで示される VM にアタッチされています。この例では、nameの値はvm1です。VM の実行ステータスを確認します。 - 出力が空の場合は、
VirtualMachineDiskのsizeを取得します。
- 出力で
VM の実行ステータスを確認します。ステータスが
Stoppedでない場合は、VM を停止して、VirtualMachineImageの作成に進みます。VirtualMachineDiskのsizeを取得してイメージを作成します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \ -o jsonpath='{.spec.size}'VirtualMachineImageImportオブジェクトを作成して、Management API サーバーにデプロイします。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -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 \ -n PROJECT \ get virtualmachineimageimports.virtualmachine.gdc.goog 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 \ -n PROJECT \ get virtualmachineimages.virtualmachine.gdc.goog \ 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作成されたイメージの名前。作成するイメージ名は一意である必要があります。プロジェクトにすでに存在するイメージ名を使用することはできません。
Terraform
すべての
VirtualMachineDiskオブジェクトを一覧表示します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog新しいイメージのソースディスクとして使用する
VirtualMachineDiskオブジェクトを選択します。VM ディスクが VM にアタッチされているかどうかを確認します。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \ -o jsonpath='{.status.virtualMachineAttachments}'ディスクが VM にアタッチされていることを示す出力例:
[{"autoDelete":true,"nameRef":{"name":"vm1"},"uid":"...."}]- 出力で
"name"の値が返された場合、ディスクはnameフィールドで示される VM にアタッチされています。この出力例では、nameの値はvm1です。VM の実行ステータスを確認します。 - 出力が空の場合は、
VirtualMachineDiskのsizeを取得します。
- 出力で
VM の実行ステータスを確認します。ステータスが
Stoppedでない場合は、VM を停止して、VirtualMachineImageの作成に進みます。VirtualMachineDiskのsizeを取得してイメージを作成します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachinedisks.virtualmachine.gdc.goog DISK_NAME \ -o jsonpath='{.spec.size}'次の内容で
main.tfという名前のファイルを作成します。provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "image_import" { manifest = { "apiVersion" = "virtualmachine.gdc.goog/v1" "kind" = "VirtualMachineImageImport" "metadata" = { "name" = "VM_IMAGE_IMPORT_NAME" "namespace" = "PROJECT" } "spec" = { "source" = { "diskRef" = { "name" = "DISK_NAME" } } "imageMetadata" = { "name" = "IMAGE_NAME" "operatingSystem" = "OS_NAME" "minimumDiskSize" = "MINIMUM_DISK_SIZE" } } } }Terraform を使用して
VirtualMachineImageImportオブジェクトを適用します。terraform applyイメージのインポートが完了し、ステータスが
Readyであることを確認します。kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachineimageimports.virtualmachine.gdc.goog 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 \ -n PROJECT \ get virtualmachineimages.virtualmachine.gdc.goog \ 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作成されたイメージの名前。作成するイメージ名は一意である必要があります。プロジェクトにすでに存在するイメージ名を使用することはできません。