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


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

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

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

始める前に

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

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

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

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

    REST

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

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      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
    

次のステップ