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

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

既存の仮想ディスク(ゴールデン ディスクまたはゴールデン イメージ)を GDC にインポートして時間を節約し、生成されたイメージを使用して仮想マシンを作成します。インポート ツールは、RAW および QCOW 画像形式をサポートしています。

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

始める前に

先に進む前に、次のことを確認してください。

環境を準備する

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

IAM ロールをリクエストする

仮想ディスクのインポートに必要な権限を取得するには、プロジェクトに対する次のロールを付与するよう IAM プロジェクト管理者に依頼してください。

  • 仮想マシン プロジェクト管理者(project-vm-admin): プロジェクトの名前空間で VM を作成、変更、一覧表示、削除します。

  • プロジェクト閲覧者(project-viewer): プロジェクトの名前空間内のすべてのリソースを表示します。

  • 仮想マシン イメージ プロジェクト管理者(project-vm-image-admin): プロジェクトの名前空間で VM イメージを作成、一覧表示、削除します。

すべての VM ロールは、VM が存在するプロジェクトの Namespace にバインドする必要があります。手順に沿ってアクセス権を確認します。

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

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

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

gdcloud

import コマンドは、GDC 提供のイメージに、Secure Shell(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. 管理 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
    

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

    • MANAGEMENT_API_SERVER: 管理 API サーバーの kubeconfig ファイル。
    • 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 を使用すると、インポートが失敗した場合でも、コマンドの終了時に CLI によってオブジェクトが削除されます。コマンドを中断した場合、または API を使用してイメージをインポートした場合、仮想ディスク ファイルは、手動で削除するまで vm-images-bucket という名前のオブジェクト ストレージ バケットに残る可能性があります。

次のステップ