カスタム イメージを作成する

既存のソースディスクからカスタム イメージを作成し、それを使用して仮想マシン(VM)を作成して起動できます。カスタム イメージは、永続ブートディスクを作成して特定の状態に変更し、その状態を保存して VM を作成する場合に理想的です。カスタム イメージを作成して保存し、将来の VM 作成で新しい VM イメージとして使用すると、後で設定手順を重複して行う必要がなくなります。

始める前に

gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。GDC エアギャップ アプライアンスのすべてのコマンドは、gdcloud または kubectl CLI を使用し、Linux 環境が必要です。

kubeconfig ファイルのパスを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

  1. Management API サーバー名を確認するか、プラットフォーム管理者(PA)にサーバー名を確認します。

  2. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  3. この手順では、パスを使用して 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 を停止できない場合は、ディスクへの書き込みを最小限に抑え、ファイル システムを同期してください。永続ディスクへの書き込みを最小限に抑えるには、次の手順を行います。

  1. 永続ディスクにデータを書き込むアプリまたは OS プロセスを一時停止します。必要に応じて、アプリでディスクへのフラッシュを実行します。他のアプリにも同様のプロセスがある場合があります。
  2. アプリの永続ディスクへの書き込みを停止します。
  3. sudo sync を実行します。

イメージの作成

ディスクが VM にアタッチされている場合でも、永続ディスクからディスク イメージを作成する手順は次のとおりです。

コンソール

  1. プロジェクトを選択します。

  2. ナビゲーション メニューで、[仮想マシン] > [イメージ] をクリックします。

  3. [イメージを作成] をクリックします。

  4. イメージの一意の名前を入力します。名前は 35 文字以下にする必要があります。

  5. イメージ名に追加するバージョンを入力します。

  6. [ソースディスク] フィールドで、ディスクを選択します。

  7. [最小ディスクサイズ] フィールドに、ディスクサイズを入力します。

  8. 画像の説明を入力します。

  9. [作成] をクリックします。

画像が画像リストに表示されます。

API

  1. すべての VirtualMachineDisk オブジェクトを一覧表示します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
       get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT
    
  2. 新しいイメージのソースディスクとして使用する VirtualMachineDisk オブジェクトを選択します。

  3. 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":"...."}]
    
    1. VM の実行ステータスを確認します。ステータスが Stopped でない場合は、VM を停止して、VirtualMachineImage の作成に進みます。
  4. VirtualMachineDisksize を取得してイメージを作成します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachinedisks.virtualmachine.gdc.goog --namespace PROJECT \
        DISK_NAME -o jsonpath='{.spec.size}'
    
  5. 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
    
  6. イメージのインポートが完了し、ステータスが 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
    }
    
  7. イメージが作成されたことを確認します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get virtualmachineimages.virtualmachine.gdc.goog --namespace PROJECT \
        CREATED_IMAGE_NAME
    

    次の定義を使用して、変数を置き換えます。

    変数定義
    MANAGEMENT_API_SERVER Management API サーバーの kubeconfig ファイル。
    PROJECT イメージを作成する GDC プロジェクト。
    DISK_NAME ソースディスクの名前(vm1-boot-disk など)。
    VM_IMAGE_IMPORT_NAME VM イメージのインポートの名前。名前は 35 文字以下にする必要があります。
    IMAGE_NAME 作成されたイメージの名前(custom-image など)。
    OS_NAME イメージ OS の名前。
    ubuntu-2004windows-2019rhel-8 のいずれかである必要があります。
    MINIMUM_DISK_SIZE VM イメージのインポートの最小ディスクサイズ(20G:
    minimumDiskSize など)は、常に移行元のブートディスクのサイズ以上である必要があります。
    CREATED_IMAGE_NAME 作成されたイメージの名前。作成するイメージ名は一意である必要があります。プロジェクトにすでに存在するイメージ名を指定することはできません。