Virtualização

O que é Nested virtualisation?

Definição

Nested virtualisation lets a virtual machine itself run virtual machines, by exposing the processor virtualisation extensions to the guest. It is required for Proxmox VE, VM-based CI jobs and some Docker configurations. Many providers disable it, which is the usual reason those workloads fail elsewhere.

Porque é que Nested virtualisation importa

É necessária para Proxmox VE, trabalhos de CI baseados em VM e algumas configurações Docker. Muitos fornecedores desativam-na, que é a razão habitual para essas cargas de trabalho falharem noutros locais.

Nested virtualisation na prática

Quando usas virtualização aninhada, arrancas um hipervisor dentro de um convidado KVM e passas as extensões de virtualização do CPU do host. Verificas /proc/cpuinfo no convidado para as flags svm ou vmx. Se estiverem ausentes, o teu hipervisor interior cai em emulação por software, o que pode cortar a performance por uma ordem de grandeza. Pode também precisar de ativar o tipo de CPU 'host' em vez de um modelo genérico para obter essas flags. Se errares, o teu workload Proxmox ou CI arrasta.

O que se costuma entender mal sobre Nested virtualisation

Assume-se que a virtualização aninhada só importa para correr SOs completos como Windows numa VM. A correção: também parte a rede overlay padrão do Docker e certos módulos do kernel, porque dependem de funcionalidades de virtualização no convidado. Portanto, um workload de containers pode falhar num fornecedor que desative o aninhamento, mesmo que nunca pretendas correr uma VM.

Nested virtualisation — perguntas frequentes

Posso correr Docker dentro de uma VM aninhada?

Sim, e esta é a razão mais comum para precisar de virtualização aninhada. A rede bridge padrão do Docker usa iptables e módulos do kernel que podem comportar-se de forma diferente sem extensões de virtualização do CPU expostas. Os nossos planos KVM incluem virtualização aninhada, por isso os teus containers Docker funcionam como esperado.

Como verifico se a virtualização aninhada está ativa?

Dentro da tua VM, executa grep -E '(svm|vmx)' /proc/cpuinfo. Se vires as flags, o aninhamento está disponível. Se não, o hipervisor não as está a expor, o que normalmente significa que o fornecedor o desativou.

Mais de virtualização

KVM
KVM é virtualização completa de hardware integrada no kernel Linux, dando a cada convidado o seu próprio kernel e isolamento imposto por hardware dos outros inquilinos.
OpenVZ
OpenVZ é virtualização baseada em contentores em que cada instância partilha o kernel do anfitrião, pelo que os convidados não podem carregar módulos do kernel nem executar um sistema operativo diferente.
LXC
LXC é contentorização nativa do Linux que isola processos com namespaces e cgroups, partilhando o kernel do anfitrião.
Hipervisor
Um hipervisor é a camada de software que cria e executa máquinas virtuais, alocando CPU física, memória e I/O entre elas.
vCPU
Uma vCPU é um processador virtual apresentado a um convidado, suportado por tempo de agendamento num núcleo físico ou thread.
cloud-init
cloud-init é o mecanismo padrão para configurar uma máquina virtual no primeiro arranque, usando metadados fornecidos pela plataforma.