VM Inside a VM Inside a VM Inside a VM...

As an update to my blog from the other day, I wanted to share a quick nugget on how to make multi-level VMs within Azure VMs go.

First, the terminology:

  1. The Level 1 VM is the VM that runs in Azure directly - like those nice 128 processor, 3.5 TB monsters in the M Series (Monster) or the new Ev3s that I spoke about in my previous blog.
  2. The Level 2 VM is the first VM that runs inside the VM. In a typical scenario, one would spin up one of these Monsters on Azure and then treat those as "HyperV hosts" complete with clustering. For me, my Level 2 VMs are where I will install Container Hosts. Why? WHY NOT!? Anyways, this second level VM will need some awareness of what is underneath it, nameley, Virtualization awareness.
  3. Beyond Level 2 VMs, you can (and should!) create N layers deep of VMs. I call these Level N+ VMs.

Now, in my Level 1 VM, I can create N Level 2 VMs, no big deal. But if I go spin up a Level 2 VM and then attempt to install HyperV on that VM to create Level N+ VMs, I get this:


Simple fix ye nested VM wanderer. Run this PS line on each Level 2 VM you want a Level 3 VM on (and so forth):

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

(Level 2 VM has to be OFF to run that). Returns quickly with no output.

Fire up the VM, bam. Nestedness...