仮想ディスクをインポートする

このドキュメントでは、仮想マシン(VM)ディスク イメージを Google Distributed Cloud(GDC)にエアギャップでインポートする手順について説明します。

既存の仮想ディスク(ゴールデン ディスクまたはゴールデン イメージと呼ばれることが多い)を Distributed Cloud にインポートして時間を節約し、生成されたイメージを使用して仮想マシンを作成します。インポート ツールは、RAW と QCOW のイメージ形式をサポートしています。

このドキュメントは、VM イメージを作成するプラットフォーム管理者またはアプリケーション オペレーター グループの開発者を対象としています。詳細については、GDC エアギャップの対象読者に関するドキュメントをご覧ください。

始める前に

続行する前に、次のことを確認してください。

  • gdcloud CLI がダウンロード、インストール、構成されている。GDC のすべての CLI コマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

権限とアクセス権をリクエストする

イメージをインポートして、このページに記載されている VM オペレーションを実行するには、VM が存在するプロジェクトの Namespace で次の IAM ロールを付与するよう、プロジェクト IAM 管理者に依頼してください。

  • プロジェクト VirtualMachine 管理者(project-vm-admin): プロジェクト Namespace の VM を管理します。

  • プロジェクト閲覧者(project-viewer): プロジェクト Namespace 内のすべてのリソースに対する読み取り専用アクセス権があります。

手順に沿ってアクセスを確認します。

仮想ディスクをインポートする

仮想ディスク ファイルは、ワークステーションから直接インポートできます。インポート ツールは、ファイルをプロジェクトのオブジェクト ストレージ バケットに自動的にアップロードします。

仮想ディスクをインポートするには、gdcloud CLI または Virtual Machine Manager API を使用します。

gdcloud

import コマンドは、セキュアシェル(SSH)とリモート デスクトップ プロトコル(RDP)を使用してインスタンスに接続するための認証情報を構成するために必要なパッケージがディスクにあることを確認します。これにはゲスト環境が含まれます。

このコマンドは、GDC でインスタンスが適切に実行されるように、ネットワーク タイム プロトコル(NTP)と cloud-init のパッケージもインストールします。

  • 起動可能なイメージを作成するには、gdcloud compute images import コマンドを使用します。
gdcloud compute images import IMAGE_NAME \
  --source-file=SOURCE_FILE \
  --os=IMAGE_OS \
  --timeout=TIMEOUT

次の変数を置き換えます。

  • IMAGE_NAME: 対象イメージの名前。名前は 35 文字以下にする必要があります。
  • SOURCE_FILE: 仮想ディスク ファイル。このファイルはワークステーションのローカル ファイルです。絶対パスまたは相対パスを指定できます。
  • IMAGE_OS: インポートするディスクの OS。
  • TIMEOUT: インポートが「TIMEOUT」で失敗するまでの時間。たとえば、2h を指定すると、プロセスは 2 時間後に失敗します。デフォルトのタイムアウトは 1h です。

アップロード オペレーションには、仮想ディスクのサイズとネットワーク接続の速度に応じて、長時間かかることがあります。インポート オペレーションは、ディスクのサイズによって数十分かかることがあります。

API

API を使用して仮想ディスクをインポートする手順は次のとおりです。

  1. Management API サーバーに VirtualMachineImageImport オブジェクトを作成して、イメージのインポート プロセスを開始します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_ID \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImageImport
    metadata:
      name: IMAGE_NAME
      namespace: PROJECT_ID
    spec:
      source:
        objectStorage:
          bucketRef:
            name: vm-images-bucket
          objectName: SOURCE_FILE
      imageMetadata:
        name: IMAGE_NAME
        operatingSystem: IMAGE_OS
        minimumDiskSize: DISK_SIZE
    EOF
    

    次の変数を置き換えます。

    • IMAGE_NAME: インポートするイメージの名前。名前は 35 文字以下にする必要があります。
    • PROJECT_ID: イメージをインポートするプロジェクトのプロジェクト ID。
    • SOURCE_FILE: オブジェクト ストレージへの仮想ディスクのアップロードを含むソースファイルの名前。この値は、vm-images-bucket/ の後のオブジェクト ストレージ パスのセクションです。
    • IMAGE_OS: インポートするディスクの OS。
    • DISK_SIZE: このイメージで作成されるディスクの最小サイズ。元のイメージのファイル システム サイズに 20% 以上のバッファを使用します。たとえば、元のファイル システムのサイズが 10G の仮想ディスクには、少なくとも 12G を使用します。
  2. VirtualMachineImageImport オブジェクトのステータスをクエリして、インポートの進行状況をモニタリングします。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_ID \
      get virtualmachineimageimport.virtualmachine.gdc.goog IMAGE_NAME \
      -o jsonpath='{.status}'
    

リソースのクリーンアップ

インポート プロセスでは、仮想ディスク ファイルをオブジェクト ストレージにアップロードします。gdcloud CLI を使用する場合、コマンドが成功したかどうかにかかわらず、コマンドが完了するとオブジェクトはクリーンアップされます。コマンドが中断された場合、または API を使用してイメージのインポートを実行した場合、仮想ディスク ファイルは、手動でファイルを削除するまで、vm-images-bucket という名前のオブジェクト ストレージ バケットに残る可能性があります。

次のステップ