- hipervisor é responsável por gerenciar os recursos do hardware físico que podem ser usados por máquinas virtuais individuais. O hipervisor divide o acesso aos recursos de hardware do sistema hospedeiro entre os convidados, permitindo assim que vários sistemas operacionais sejam executados em um único sistema hospedeiro.
- guest (convidado): são as máquinas virtuais do hipervisor.
- migração: O processo de mover uma máquina virtual de uma instalação do hipervisor para outra. migração ao vivo é quando a migração pode ser feita com o sistema ligado.
Tipos de hipervisores mais comuns no linux
Há dois tipos de hipervisores
- Hipervisor Tipo 1 (Bare Metal): Roda diretamente no hardware físico, sem precisar de um sistema operacional hospedeiro.
- Hipervisor Tipo 2 (Hosted): Roda sobre um sistema operacional já existente.
Vamos citar hipervisores usados no linux e falar se são do tipo 1 ou 2:
- Xen: Hypervisor tipo 1 (bare metal), executa diretamente sobre o hardware. Muito usado em ambientes de nuvem e data centers. Alta performance e isolamento, mas mais complexo de configurar.
- KVM (Kernel-based Virtual Machine): Integrado ao kernel Linux, transforma o Linux em um hypervisor tipo 1. É amplamente usado, inclusive por plataformas como o Proxmox e o OpenStack. Oferece ótimo desempenho e é bem suportado.
- VirtualBox: Hypervisor tipo 2 (roda sobre um sistema operacional). Ideal para desktops, testes e desenvolvimento. Fácil de usar, mas com desempenho inferior comparado ao Xen e KVM em produção.
Tipos de máquina virtual
Totalmente virtualizado é quando o sistema convidado não tem conhecimento de que está sendo virtualizado. O hipervisor emula todo o hardware necessário, permitindo a instalação de sistemas operacionais sem nenhuma modificação. Apesar de ser mais flexível, pode apresentar desempenho um pouco inferior devido à sobrecarga da emulação. O convidado totalmente virtualizado (ou HardwareVM) não sabe que é uma instância de máquina virtual em execução. Para que esse tipo de virtualização seja possível com hardware baseado em x86, as extensões de CPU Intel VT-x ou AMD-V devem ser habilitadas no sistema no qual o hipervisor está instalado. Isso pode ser feito a partir de um menu de configuração de firmware na BIOS ou UEFI. A grande vantagem é a compatibilidade, pois permite rodar qualquer sistema operacional sem modificações. No entanto, o desempenho pode ser menor devido à necessidade de emular o hardware.
Para saber se seu sistema já tem extensões de CPU habilitadas para rodar uma máquina virtual (os resultados podem variar dependendo de sua CPU) execute o comando:
grep --color -E "vmx|svm" /proc/cpuinfo
Dependendo da saída, vmx pode estar realçado (para CPUs habilitadas com Intel VT-x) ou, ainda,svm (para CPUs habilitadas com AMD SVM). Se não obtiver resultados, consulte as instruções da BIOS ou da UEFI sobre como habilitar a virtualização para o seu processador.
Convidado paravirtualizado é aquele que sabe que está rodando em um ambiente virtualizado. Nesse caso, o sistema operacional é adaptado para se comunicar diretamente com o hypervisor por meio de interfaces específicas, o que resulta em melhor desempenho, mas exige suporte do sistema convidado. A vantagem é que oferece melhor desempenho, pois o sistema operacional interage diretamente com o hypervisor sem precisar de emulação completa. O ponto negativo é que o sistema operacional precisa ser modificado para suportar a paravirtualização.
Convidado híbrido combina os dois modelos anteriores. Ele utiliza emulação de hardware apenas quando necessário e se beneficia de interfaces otimizadas sempre que possível, alcançando um bom equilíbrio entre compatibilidade e desempenho. É uma solução interessante quando se busca eficiência sem perder a flexibilidade.
provisionamento de disco usado para este convidado
Existem vários tipos de imagens de disco que uma máquina virtual pode usar, mas os dois principais são:
COW (Copy-On-Write), ou cópia na gravação, Esse formato cria o disco como uma imagem base (geralmente compacta) e só grava alterações feitas pela VM. É muito eficiente em termos de espaço e ideal para testes, clones e snapshots rápidos. A principal vantagem é economia de armazenamento, mas o desempenho pode ser inferior, especialmente com muitas operações de escrita. Também conhecida como thin-provisioning ou sparse images.
RAW, ou full, esse formato representa o disco virtual como um arquivo que espelha exatamente o conteúdo de um disco físico. Ele tem desempenho superior, pois não há sobrecarga de tradução de formato. É ideal para ambientes de produção e quando se busca maior performance. No entanto, ocupa todo o espaço alocado desde o início.
containers
No Linux, containers são uma tecnologia de virtualização leve que permite rodar aplicações de forma isolada em um único sistema operacional. Cada container compartilha o mesmo kernel, mas tem seu próprio sistema de arquivos, rede e processos, o que os torna mais eficientes em termos de recursos em comparação com máquinas virtuais.
Os containers são usados principalmente para empacotar, distribuir e executar aplicações de forma consistente, independentemente do ambiente em que estejam sendo executadas.
Principais containers no Linux:
- Docker: O mais popular, utilizado para desenvolver, enviar e executar containers. Oferece uma interface simples e uma vasta comunidade.
- Podman: Similar ao Docker, mas sem depender de um daemon central, sendo um daemon-less container engine.
- Kubernetes: Orquestrador de containers que gerencia o deployment, scaling e operações de containers.
- LXC (Linux Containers): Oferece uma virtualização de sistema mais próxima da virtualização tradicional, com containers que podem ser configurados como sistemas completos.
- LXD: Gerenciamento avançado de containers com características de máquinas virtuais.
rkt: Uma alternativa ao Docker focada na segurança e na simplicidade, descontinuada por sua comunidade mas ainda utilizada por alguns.
O que é cgroup:
O cgroup (control groups) é um recurso do Linux que permite limitar, monitorar e isolar os recursos de sistema (como CPU, memória, disco e rede) usados por grupos de processos, incluindo containers. Isso ajuda a garantir que os containers não consumam mais recursos do que o alocado, melhorando a performance e segurança do sistema.