A virtualização é parte essencial da infraestrutura de TI moderna, trazendo flexibilidade, eficiência e economia, mas e se você pudesse dar um passo além e rodar máquinas virtuais dentro de outras máquinas virtuais? Esse recurso, chamado Nested Virtualization, é ideal para criar laboratórios, ambientes de teste e desenvolvimento sem precisar de vários servidores físicos/bare metals.
Neste artigo, vamos mostrar como criar um ambiente Nested Virtualization em Oracle Cloud Infrastructure (OCI) usando KVM e gerenciando suas VMs via web de forma simplificada com o Cockpit.
As informações apresentadas aqui são apenas para fins de aprendizado e testes. Este guia não representa documentação oficial e não deve ser aplicado em sistemas de produção. O objetivo é explorar o conceito de Nested Virtualization em ambientes de laboratório.
Componentes
- Oracle Linux 9: Distribuição Linux empresarial da Oracle, otimizada para performance, segurança e uso em nuvem.
- KVM (Kernel-based Virtual Machine): Hypervisor integrado ao Linux que permite criar e executar múltiplas máquinas virtuais.
- Cockpit Web Console: Interface web para gerenciar o ambiente KVM com monitoramento, criação de VMs, gerenciamento de serviços, storage, rede entre outros.
Requisitos
Possuir uma VM em OCI com subnet já acessível ao usuário;
- Shapes compatíveis: AMD, VM.Standard.E5.Flex ou Intel, VM.Standard3.Flex;
- Configuração utilizada no lab:
- 2 OCPUs
- 16 GB RAM
- 128 GB block storage
- 10 VPU (Balanced Performance)
- Imagem: Oracle Linux 9
- Chave priv/pub para acesso SSH

Configuração
- Conecte via SSH na VM com IP e chave SSH privada
- Verifique o tamanho do disco (ocivolume-root), que ainda está com o tamanho original
- Execute o rescan dos discos
sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
echo “1” | sudo tee /sys/class/block/`readlink /dev/oracleoci/oraclevda | cut -d’/’ -f 2`/device/rescan
- Estenda a partição do disco
- Valide o resultado
- Atualize os pacotes do sistema
- Habilite o respositório do Oracle Linux KVM Utils
- Instale os pacotes de virtualização
sudo dnf install -y qemu-kvm libvirt
sudo dnf install -y virt-install virt-viewer
- Valide as versões dos pacotes:
- Habilite os serviços
for drv in qemu network nodedev nwfilter secret storage interface;
do
sudo systemctl enable virt${drv}d.service
sudo systemctl enable virt${drv}d{,-ro,-admin}.socket;
sudo systemctl start virt${drv}d{,-ro,-admin}.socket;
done
- Valide o status dos serviços
- Instale o Cockpit
- Habilite o serviço e verifique o status
sudo systemctl enable –now cockpit.socket
sudo systemctl status cockpit.socket
- Se o firewall estiver habilitado é necessário permitir conexões e efetuar o reload
sudo firewall-cmd –add-service=cockpit –permanent
sudo firewall-cmd –reload
- Você pode criar um usuário e adicionar nos grupos necessários para gerenciar o ambiente. Abaixo exemplos que devem ser alterados conforme sua necessidade:
sudo adduser [usuário]
sudo passwd [usuário]
- Adicione nos grupos relevantes, importante, utilizando o exemplo abaixo você está dando permissões administrativas
- Acesse o IP da VM com a porta 9090
- Faça login utilizando o usuário criado anteriormente

- Nesta console você já pode criar seu ambiente virtual;
- Overview: Visão geral do ambiente, com saúde dos serviços e consumo de recursos
- Logs: Visão de logs com filtros
- Storage: Informações de I/O e consumo de disco
- Networking: Informações de consumo de rede, firewall e interfaces
- Virtual Machines: Listagem e criação de VMs
- Accounts: Usuários e permissões
- Sevices: Status dos serviços

- Agora vamos para o processo de criação de VMs, clique em Virtual Machines > Create VM
- Escolha o Instalation Type, em nosso caso apontamos direto para URL de uma .ISO

- Em “Console” você pode interagir com a VM remotamente via VNC

- Tambem é possível criar redes como VLANs e atrelar VNICs adicionais nas VMs

Este é o conhecimento básico para iniciar seu laboratório. Para maiores informações acesse:
https://docs.oracle.com/en/operating-systems/oracle-linux/cockpit/index.html
https://docs.oracle.com/en/operating-systems/oracle-linux/cockpit/OL-COCKPIT.pdf
Cloud-init
Se preferir, o script abaixo pode ser usado no Cloud-Init de OCI e já configurar automaticamente todos os passos acima, faça a customização conforme sua necessidade.
Importante editar o hash em “passwd:” com o hash da senha que deseja configurar
#cloud-config
users:
- default
- name: adminkvm
gecos: "Admin KVM Cockpit"
groups: wheel,libvirt,kvm
shell: /bin/bash
passwd: $6$Do/nS1DFtT1aeSgt$X68bfFmTUWCPQ4oNJZ.03VTxdVtxa17x9RrqXYEPdEcx76HjVmF9iA0CahC3zcyehvfBMnz6bydXMWCJPVihN.
lock_passwd: false
sudo: ['ALL=(ALL) NOPASSWD:ALL']
write_files:
- path: /etc/sysctl.d/99-libvirtd.conf
content: |
net.ipv4.ip_forward = 1
runcmd:
- dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1
- echo "1" > /sys/class/block/$(readlink /dev/oracleoci/oraclevda | cut -d'/' -f 2)/device/rescan
- /usr/libexec/oci-growfs -y
- dnf upgrade -y
- dnf config-manager --enable ol9_kvm_utils
- dnf install -y qemu-kvm libvirt virt-install virt-viewer
- for drv in qemu network nodedev nwfilter secret storage interface; do
systemctl enable virt${drv}d.service;
systemctl enable virt${drv}d{,-ro,-admin}.socket;
systemctl start virt${drv}d{,-ro,-admin}.socket;
done
- dnf install -y cockpit cockpit-machines
- systemctl enable --now cockpit.socket
- firewall-cmd --add-service=cockpit --permanent
- firewall-cmd --reload
final_message: "Cloud-init KVM & Cockpit configuration complete!"

