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


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

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

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

始める前に

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

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    gcloud

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

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

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

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

      gcloud init

ネストされた仮想化を新しい 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
    

次のステップ