ネストされた仮想化を有効にする


このドキュメントでは、仮想マシン(VM)インスタンスでネストされた仮想化を有効にする方法と、ネストされた VM を作成可能かどうか確認する方法について説明します。次のいずれかの方法を使用して、VM でネストされた仮想化を有効にします。

  • (推奨)VM の作成時に enableNestedVirtualization フィールドを true に設定するか、VM を更新することで、ネストされた仮想化を新規または既存の VM 上で有効にします。カスタム イメージの作成や特別なライセンスキーの使用が不要であるため、この方法をおすすめします。

  • 特別なライセンスキーを使用して、ネストされた仮想化を有効にします。ブートディスクを作成して、ネストされた仮想化の特別なライセンスキーを使用してカスタム イメージを作成し、それを使用する VM を作成します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

      ネストされた仮想化を新しい VM で直接有効にする

      VM 上でネストされた仮想化を直接有効にするには、次の操作を行います。

      gcloud

      次の gcloud compute instances create コマンドを使用して、ネストされた仮想化を有効にした L1 VM を作成します。

      gcloud compute instances create VM_NAME \
        --enable-nested-virtualization \
        --zone=ZONE \
        --min-cpu-platform="Intel Haswell"
      

      次のように置き換えます。

      • VM_NAME: ネストされた仮想化が有効になっている新しい L1 VM の名前

      • ZONE: ネストされた仮想化を有効にした新しい L1 VM のゾーン

      REST

      次の instances.insert メソッドを使用して、ネストされた仮想化を有効にした L1 VM を作成します。

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
      {
        ...
        "name": "VM_NAME",
        ...
        "minCpuPlatform": "Intel Haswell",
        "advancedMachineFeatures": {
          "enableNestedVirtualization": true
        },
        ...
      }
      

      次のように置き換えます。

      • PROJECT_ID: プロジェクト ID

      • ZONE: ネストされた仮想化を有効にした新しい L1 VM のゾーン

      • VM_NAME: ネストされた仮想化が有効になっている新しい L1 VM の名前

      既存の VM で直接ネストされた仮想化を有効にする

      既存の VM でネストされた仮想化を有効にするには、次の手順を行います。

      gcloud

      1. 次の gcloud compute instances export コマンドを使用して、VM のプロパティをエクスポートします。

        gcloud compute instances export VM_NAME \
          --destination=YAML_FILE_PATH \
          --zone=ZONE
        

        次のように置き換えます。

        • VM_NAME: プロパティをエクスポートする VM の名前

        • YAML_FILE_PATH: エクスポートした構成データを保存する .yaml ファイルのパスとファイル名

        • ZONE: VM が配置されているゾーン

      2. FILE_PATH に保存された VM 構成ファイルで、enableNestedVirtualization の値を更新します。値がファイルに含まれていない場合は、次の行を追加します。

        advancedMachineFeatures:
          enableNestedVirtualization: true
        
      3. 次の gcloud compute instances update-from-file コマンドを使用して、enableNestedVirtualization の値で VM を更新します。

        gcloud compute instances update-from-file VM_NAME \
          --source=FILE_PATH \
          --most-disruptive-allowed-action=RESTART \
          --zone=ZONE
        

        次のように置き換えます。

        • VM_NAME: 更新する VM の名前

        • FILE_PATH: 更新された VM 構成ファイルへのパス。

        • ZONE: 更新する VM が配置されたゾーン

      REST

      次の instances.update メソッドを使用して、enableNestedVirtualization の値を更新します。

      PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART
      
      {
        ⋮
        "advanced_machine_features": {
          ⋮
          "enableNestedVirtualization": "true"
        },
        ⋮
      }
      

      次のように置き換えます。

      • PROJECT_ID: プロジェクトの ID

      • ZONE: VM が配置されているゾーン

      • VM_NAME: プロパティをエクスポートする VM の名前

      特別なライセンスキーを使用してネストされた仮想化を有効にする

      L1 VM で VMX を有効にする特別なライセンスキーを使用して、カスタム イメージを作成することで、ネストされた仮想化を VM で有効にすることもできます。ライセンスキーには追加料金はかかりません。

      1. 公開イメージまたはカスタム イメージからブートディスクを作成します。次の例では、イメージ プロジェクトに debian-cloud を使用し、イメージ ファミリーに debian-10 を使用します。既存のディスクを含む VM インスタンスがすでにある場合は、この手順をスキップできます。

        gcloud

        gcloud compute disks create DISK_NAME \
          --zone=ZONE \
          --image-project=debian-cloud \
          --image-family=debian-10
        

        次のように置き換えます。

        • DISK_NAME: 新しいディスクの名前

        • ZONE: ディスクを作成するゾーン

        REST

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks
        
        {
          ...
          "name": "DISK_NAME",
          "sourceImage": "projects/debian-cloud/global/images/family/debian-10",
          ...
        }
        

        次のように置き換えます。

        • PROJECT_ID: プロジェクト ID

        • ZONE: ディスクを作成するゾーン

        • DISK_NAME: 新しいディスクの名前

      2. ネストされた仮想化に必要な特別なライセンスキーを使用して、カスタム イメージを作成します。

        gcloud

        gcloud compute images create IMAGE_NAME \
          --source-disk DISK_NAME \
          --source-disk-zone ZONE \
          --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
        

        次のように置き換えます。

        • IMAGE_NAME: 新しいイメージの名前

        • DISK_NAME: 以前に作成したディスクの名前

        • ZONE: イメージを作成するゾーン

        REST

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images
        
        {
          ...
          "licenses": ["projects/vm-options/global/licenses/enable-vmx"],
          "name": "IMAGE_NAME",
          "sourceDisk": "zones/ZONE/disks/DISK_NAME",
          ...
        }
        

        次のように置き換えます。

        • PROJECT_ID: プロジェクト ID

        • IMAGE_NAME: 新しいイメージの名前

        • ZONE: イメージを作成するゾーン

        • DISK_NAME: 以前に作成したディスクの名前

      3. 必要に応じて、特別なライセンスでイメージを作成した後、ソースディスクを削除します。

        gcloud

        gcloud compute disks delete DISK_NAME --zone=ZONE
        

        次のように置き換えます。

        • DISK_NAME: 削除するディスクの名前

        • ZONE: 削除するディスクを含むゾーン

        REST

        DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME
        

        次のように置き換えます。

        • PROJECT_ID: プロジェクト ID

        • ZONE: 削除するディスクを含むゾーン

        • DISK_NAME: 削除するディスクの名前

      4. 特別なライセンスで新しいイメージを使用する VM を作成します。最小 CPU プラットフォームは "Intel Haswell" にする必要があります。

        gcloud

        gcloud compute instances create VM_NAME \
            --zone=ZONE \
            --min-cpu-platform "Intel Haswell" \
            --image IMAGE_NAME
        

        次のように置き換えます。

        • VM_NAME: VM の名前

        • ZONE: VM を作成するゾーン

        • IMAGE_NAME: 以前に作成されたイメージの名前

        REST

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
        
        {
          ...
          "name": "VM_NAME",
          "minCpuPlatform": "Intel Haswell",
          "disks": [
            {
              "initializeParams": {
                "sourceImage": "IMAGE_NAME"
              }
            }
          ]
          ...
        }
        
        

        次のように置き換えます。

        • PROJECT_ID: プロジェクト ID

        • VM_NAME: VM の名前

        • ZONE: VM を作成するゾーン

        • IMAGE_NAME: 以前に作成されたイメージの名前

      ネストされた仮想化が VM で有効になっていることを確認する

      1. VM インスタンスに接続します。

        gcloud compute ssh VM_NAME
        

        VM_NAME は、接続する VM の名前に置き換えます。

      2. ネストされた仮想化が有効になっていることを確認します。ネストされた仮想化が有効であれば、0 以外のレスポンスが返されます。

        grep -cw vmx /proc/cpuinfo
        

      次のステップ