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

img0

Configuração

  1. Conecte via SSH na VM com IP e chave SSH privada
ssh -i [path da chave] opc@[IP da instância]
  1. Verifique o tamanho do disco (ocivolume-root), que ainda está com o tamanho original
lsblk
  1. 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

  1. Estenda a partição do disco
sudo /usr/libexec/oci-growfs -y
  1. Valide o resultado
lsblk
  1. Atualize os pacotes do sistema
sudo dnf upgrade -y
  1. Habilite o respositório do Oracle Linux KVM Utils
sudo dnf config-manager –enable ol9_kvm_utils
  1. Instale os pacotes de virtualização

sudo dnf install -y qemu-kvm libvirt

sudo dnf install -y virt-install virt-viewer

  1. Valide as versões dos pacotes:
sudo virt-host-validate
  1. 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

  1. Valide o status dos serviços
sudo systemctl list-units –type=socket virt*
  1. Instale o Cockpit
sudo dnf install -y cockpit cockpit-machines
  1. Habilite o serviço e verifique o status

sudo systemctl enable –now cockpit.socket

sudo systemctl status cockpit.socket

  1. 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

  1. 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]

  1. Adicione nos grupos relevantes, importante, utilizando o exemplo abaixo você está dando permissões administrativas
sudo usermod -aG wheel [usuário]
  1. Acesse o IP da VM com a porta 9090
https://[ip-da-instancia]:9090
  1. Faça login utilizando o usuário criado anteriormente

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

img

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

img3

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

img4

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

img5

 

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!"