Nested Virtualization – Windows Server Hyper-V 2016 TPv4 – Windows 10

Olá Pessoal,

Chegou o tão esperado momento para muitos usuários que gostariam de instalar e utilizar o Hyper-V dentro de uma Máquina Virtual (VMs em VMs). Só que por enquanto não são todos os recursos disponíveis que se pode utilizar, limitando assim vários cenários. Como os próprios desenvolvedores do Hyper-V disseram, está em uma versão “early preview”, ou seja, bem Beta, tem muito que ser construído/desenvolvido.

Chamado de Nested Virtualization (Virtualização Aninhada), essa nova característica agora é possível fazer um Máquina Virtual de Host do Hyper-V. Lembrando que é só para desenvolvedores, testes diversos e estudos, como montar um Cluster sem precisar ter várias máquinas físicas e não para utilizar em ambiente de produção.

Para quem gosta de abusar um pouco do limite dos recursos, fique sabendo que não é possível instalar o 3º Hyper-V. Exemplo: Host Físico Hyper-V -> VM (Hyper-V) -> VM (Hyper-V).

Funcionamento sob o Hardware

A tecnologia Hypervisor funciona na camada privilegiada Ring -1 e entrega o suporte de virtualização do hardware (Intel VT-x e AMD-V) o Host físico, e no caso do Nested o Hypervisor escondia das VMs Convidadas (Guests) esse suporte, mas agora foi liberado.

Arquitetura Hyper-V

Abaixo a imagem mostra como é o funcionamento do Hyper-V sem Nested. Podemos ver que nesse caso o Hyper-V Hypervisor tem controle total das extensões de virtualização e não expõe para a VM convidada.

nested-virtualization-hyper-v
Imagem: Sarah Cooley

Já nesse segundo caso com Nested “habilitado” o Hypervisor já expõe para a VM os recursos necessários para instalar o Hyper-V dentro da VM. E como disse no início do post, não é possível instalar a 3ª instância pois ocorre o mesmo, não é exposto as extensões para o convidado do convidado.

nested-hyper-v
Imagem: Sarah Cooley

Requisitos e Limitações

  • Ter pelo menos 4gb RAM para esse Host secundário de Hyper-V (convenhamos que 16gb já começa a ficar bom para começar a “brincar”);
  • Rodar Windows Server 2016 TPv4, Hyper-V Server 2016 TPv4 ou Windows 10 Build 10565 tanto no Host físico, quanto no virtualizado;
  • Processador Intel com tecnologia VT-x e AMD -V (Não suporta AMD por enquanto para Windows Server TPv4);
  • Sem garantia de estabilidade ou desempenho (apenas testes). Recomendado instalar a mesma build dentro da VM;
  • Outros Hypervisors não instalam na VM.

Versão Preview

Como já mencionado anteriormente que o Nested Virtualization está em versões bem cruas, a Microsoft já declara o conhecimento de problemas existentes e esclarece alguns:

Mas como é bom ter um feedback por parte dos usuários, eles resolveram soltar as versões para usuários do Windows Insider (na qual eu também participo e sempre recebo atualizações do Windows 10 antes, e também já reportei vários problemas), mesmo com vários problemas.

  • Ambos Hypervisors têm que ter a última versão (Host e Guest);
  • Só é possível rodar a Virtualização Aninha (Nested) em uma VM, não podendo instalar outros recursos, caso instalar pode ser que a VM não inicie caso você tenha VMs dentro dela;
  • Precisar ter mais de 1 vCPU;
  • Memória Dinâmica tem que estar desligada, senão pode impedir da VM dar boot;
  • Aumentar memória em tempo real irá falhar;
  • Aplicar Checkpoint/Snapshot também irá falhar;
  • Live Migration não funciona, ou seja, a VM no qual é Host não pode ser migrada.
  • Salvar e fazer restauração irá falhar;
  • MAC Address Spoofing tem que estar habilitado para rede funcionar nos convidados;
  • Hosts com Device Guard habilitado não pode expor as extensões de virtualização para os convidados, você precisa desabilitar o VBS (Virtualization Based Security) para permitir a instalação do Nested. Saiba mais sobre Device Guard

Obs: Essas restrições apenas se aplicam para a VM na primeira camada, continuando funcionais para as secundárias.

Habilitando Nested Virtualization

  1. Crie a Máquina Virtual com a mesma build do Host.
  2. Rodar esse Script como administrador no Host de Hyper-V – https://github.com/Microsoft/Virtualization-Documentation/blob/master/hyperv-tools/Nested/Enable-NestedVm.ps1

Ele irá checar suas configurações e mudar o que estiver incorreto e habilitar o Nested na VM apontada no script especificada nesse código abaixo (executar esse código abaixo + especificar a VM é suficiente)

Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/master/hyperv-tools/Nested/Enable-NestedVm.ps1 -OutFile ~/Enable-NestedVm.ps1

~/Enable-NestedVm.ps1 -VmName “DemoVM”

  1. Instalar o Hyper-V na Máquina Virtual.

Invoke-Command -VMName “DemoVM” -ScriptBlock { Enable-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V -Online; Restart-Computer }

  1. E começar a criar as máquinas virtuais dentro da sua VM Nested.

Extensão de Virtualização

As configurações recentes das extensões pode ser vistas rodando esse comando:

Get-VMProcessor -VMName <Target VM’s name> | FL *

As configurações que você procurar é: ExposeVirtualizationExtensions = True.

Por padrão essa configuração é desabilitada, para habilitar rode:

Set-VMProcessor -VMName <Target VM’s Name> -ExposeVirtualizationExtensions $true

Performance

Como sabemos, rodar Nested é rodar dentro de uma VM ou explicando melhor, camadas a dentro “longe” do hardware, então o desempenho é para sofrer mais. O dia em que o Azure rodar Nested Virtualization, aí sim podemos dizer que está pronto para produção, pois para quem não sabe, o Azure é a plataforma mais queridinha deles hoje, então se der certo no Azure, irá dar certo em seu servidor ou notebook.

Máquina Virtual fica perdendo conexão

 Utilize senhas pois utilizar a VM com senhas em branco é um dos problemas conhecidos e que irá resolver o problema.

 Hyper-V Containers

Também é possível rodar Hyper-V Container dentro da VM. Explicando de forma rápida, com o Container você pode rodar uma aplicação isolada, longe do Kernel. Já rodar Windows Containers ele divide a camada subjacente (que seria o kernel) e fica mais exposto e não tão seguro.

Quem quiser saber mais sobre Containers a documentação é em inglês, mas hoje clicando com botão direito (pelo menos no chrome) é possível traduzir toda a página.

Porque usar Nested Virtualization?

Continuando com a ideia acima de Containers, para um provedor de Cloud oferecer para o usuário “mexer” numa VM dentro da infraestrutura dele é perigoso, pois está próximo ao hardware e não tão isolado. Então a Microsoft não quis travar ninguém e permitir Nested Virtualization, onde aí sim poderá entregar seguramente VMs para todos utilizarem, sem se preocupar.

Azure

Por enquanto a Microsoft não anunciou nada sobre suportar Nested Virtualization no Azure, hoje só conseguimos utilizar o recurso diretamente no Azure de forma transparente, mesmo sendo uma VM compartilhada para nós clientes finais.

Testes

Infelizmente eu não tenho um Hardware tão interessante quanto desse teste que foi feito abaixo, então segue o link e vejam que apenas para STORAGE que caiu bastante a performance, é incrível o que já foi testado e deu ótimos resultados. Aposto que no futuro será muito utilizado o Nested Virtualization e não só ficará para Testes e Labs de “brincadeira”.

Inicie seus Labs

Comece já baixando o Windows Server 2014 TPv4 e instale em seu Desktop ou Notebook.

Aproveita deixa um comentário, compartilha, se inscreve no Blog e também no Canal do Youtube!! Valeu.

Anúncios

Obrigado por comentar

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s