Skip to main content

351.1 Conceitos e Teoria sobre Virtualização



Principais Conceitos sobre Virtualização


A virtualização é uma tecnologia que possibilita a criação ambientes virtuais, independentes do hardware físico do computador. Isso possibilita a execução de sistemas operacionais, aplicativos e recursos de computação em múltiplas instâncias virtuais dentro de um único hardware. O principal objetivo da virtualização é distribuir os recursos do hardware hospedeiro com as máquinas virtuais, que são: CPU, Memória, Armazenamento e Rede (também conhecidos como Core Four, são os recursos compartilhados).


É importante que a máquina virtual funcione exatamente como uma máquina física (que não está sendo virtualizada), além disso, o administrador têm o controle total do hypervisor e pode virtualizar qualquer Sistema Operacional, independente do S.O usado pelo hypervisor.


O que é um hypervisor?

Um hypervisor (ou Virtual Machine Monitor - VMM) é um software que permite a execução simultânea de múltiplos sistemas operacionais em um único hardware, facilitando a virtualização, ou seja, é o servidor hospedeiro que vai compartilhar seu hardware com as máquinas virtuais.


Vantagens da virtualização:

  1. Eficiência de Recursos: Compartilha os recursos de hardware entre vários sistemas operacionais e aplicativos, aumentando a eficiência e melhorando a utilização, já que cada VM poderá ser redimensionada para ter o hardware necessário para um determinado software, não desperdiçando memória ou tendo mais CPUs do que o necessário, por exemplo.

  2. Flexibilidade: Permite uma reconfiguração de recursos das VMs de forma fácil e rápida, assim como snapshots entre outros.

  3. Redução de Custos: Ajuda a reduzir os custos de TI ao minimizar o número de servidores físicos necessários.

  4. Implantação: Possui menor tempo de deploy em comparação com um servidor físico, além de economizar tempo e recursos.


Desvantagens da virtualização:

  1. Complexidade: A virtualização pode ser uma tecnologia complexa de implementar e gerenciar.

  2. Alto Custos: Inicialmente será gasto um valor mais elevado para compra de um hardware que consiga virtualizar dezenas/centenas de máquinas virtuais, além da escolha de softwares que podem ser pagos.

  3. Desempenho: As máquinas virtuais podem ter um desempenho inferior às máquinas físicas, especialmente se estiverem executando aplicativos que exigem muitos recursos.

  4. Segurança: As máquinas virtuais podem ser menos seguras que as máquinas físicas, pois podem ser mais vulneráveis a ataques direcionados ao hypervisor.


Existem alguns tipos de Virtualização:

  • Virtualização de Rede
    Compartilha recursos de rede entre diferentes sistemas operacionais e aplicativos.

  • Virtualização de Armazenamento
    Permite o compartilhamento de armazenamento físico entre diversos sistemas operacionais e aplicativos.

  • Virtualização de Servidor
    Executa vários sistemas operacionais em um único servidor físico, sendo a forma mais comum.

  • Virtualização de Desktop
    Possibilita a execução de vários desktops virtuais em um único servidor físico.


VM Sprawl

VM Sprawl é um fenômeno em que o número de máquinas virtuais em um ambiente de virtualização cresce descontroladamente, muitas vezes devido à criação excessiva e não gerenciada de VMs. Muitas vezes isso se dá por Falta de governança sobre o uso de criação e remoção das VMs.



Emulação versus Simulação


Emulação e simulação são frequentemente usados como sinônimos, mas não são a mesma coisa. Ambos estão relacionados a técnicas computacional.



Emulação


A Emulação é uma versão virtual de um sistema ou dispositivo físico. O intuito do emulador é criar uma réplica do sistema ou dispositivo original mas funcionando em outro ambiente, nesse caso imita o hardware e o software. Diferente do simulador, o emulador é desenvolvido com linguagem de baixo nível.


Exemplo são: Emulador de jogos.



Simulação


A Simulação é um sistema que se comporta de maneira similar a outro sistema. Seu principal objetivo é reproduzir a experiência e não o sistema usado (em alguns casos pode abranger a reproduzir o sistema mais no quesito do front-end). Quase sempre software que fazem a simulação (como de simuladores) são criados com software de alto nível, pois facilita a modelagem e a abstração necessárias para representar o sistema desejado.


Exemplo são: Simuladores de carro, de voo.



hypervisors


Os hypervisors, também conhecidos como VMMs (Virtual Machine Monitors) são softwares que possibilitam a execução simultânea de múltiplos sistemas operacionais em um único hardware, ou seja, o hypervisor é uma camada acima do S.O hospedeiro, facilitando a criação e gerenciamento de máquinas virtuais (VMs). Além dessa camada permitir a virtualização, também permite o isolamento de ambientes (isolam uma VM da outra), proporcionando flexibilidade e eficiência na utilização de recursos de hardware.


A imagem abaixo representa as camadas de virtualização, demonstrando que acima do S.O (Sistema Operacional) existe uma camada a mais para controle das máquina virtuais, essa que é o hypervisor.


hypervisor stack



Tipos de hypervisors


Há dois tipos de hypervisors que podem ser usados para a virtualização: são o tipo 1 e o tipo 2.

  • Tipo 1

    É comumente conhecido como hypervisor nativo ou até mesmo bare-metal, ele é executado diretamente no hardware do host para gerenciar sistemas operacionais guest. Ele ocupa o lugar de um sistema operacional host, e os recursos da máquina virtual são programados diretamente no hardware pelo hypervisor.

    Exemplos: VMware vSphere/ESXi, Microsoft Hyper-V, Oracle VM Server, Xen, KVM.


    O Sistemas Operacional nesse caso é o próprio Hypervisor.

    Este tipo de Hypervisor é mais comum em data centers pois o hardware precisa ser bastante robusto, o que é mais encontrado em servidores (quanto mais robusto mais caro será o hardware).

  • Tipo 2

    É denominado hosted e é executado em um Sistema Operacional convencional, tendo uma camada de software ou aplicação para gerenciar tanto o hypervisor quanto as máquina virtuais.


    Normalmente o gerenciamento do Hypervisor em sí é bastante tranquilo, sendo feita a instalação, configurações necessária e desse ponto em diante, todo o gerenciamento mesmo é feito em cima das máquinas virtuais somente, já que a base (hypervisor) já está solidificada no Sistema Operacional.

    Esse tipo de hypervisor é mais usado por usuários individuais que desejam executar vários sistemas operacionais em um computador pessoal para fins de testes/aprendizado, mesmo que ainda seja possível encontrar esse tipo em pequenas empresas.

    Exemplos: Oracle VirtualBox e VMWare Workstation.



Tipos de virtualização de Servidores


A virtualização de servidor é uma técnica que permite a criação de múltiplos ambientes virtuais isolados em um único servidor físico, é a virtualização como estamos acostumados. Dentro da virtualização de servidores temos dois tipos principais de virtualização:


HVM - Hardware Virtual Machine

O HVM (em Português Virtualização de Hardware) também é conhecida como Full-Virtualization. É um tipo de virtualização que virtualiza todos os dispositivos de hardware, incluindo CPU, memória, armazenamento e dispositivos de E/S. Nesse tipo, o sistema operacional não sofre alteração para funcionar na máquina virtual, ou seja, sistemas operacionais que não foram originalmente projetados para serem virtualizados podem ser executados em máquinas virtuais. Além disso, o sistema operacional da máquina virtual não sabe que está sendo virtualizado, ele funciona como se estivesse sendo executado em hardware físico dedicado.


O HVM usa extensões de virtualização de hardware ou mais comumente conhecidas Hardware-Assisted Virtualization para proporcionar um desempenho mais eficiente e próximo do nativo, ou seja, a CPU tem suporte a virtualização como Intel VT-x (vmx) ou AMD-V (smv).


PV - Paravirtualização

Nesse tipo de virtualização de servidores o sistema operacional da VM é modificado (paravirtualizado) para sabe que está sendo virtualizado, com isso ele interage diretamente com o hypervisor, melhorando a eficiência da comunicação e o desempenho geral da máquina virtual. Com isso, não é necessário suporte de Hardware como é feito no HVM, mas o Kernel do Guest precisa ter os drivers e suporte para a interface de integração com o Hypervisor (por padrão já funciona no Linux).


Um detalhe importante é que apenas o hardware é virtualizado, já o acesso é feito via hypercalls para o hypervisor.


Como saber se minha CPU tem suporte?
Para verificar se a CPU tem suporte a virtualização através das extensões de hardware, use o seguinte comando:
egrep -o -m1 '(vmx|svm)' /proc/cpuinfo


Funcionalidades do Hypervisor


Os Hypervisors oferecem algumas funcionalidades no quesito administração das VMs, as principais funcionalidades incluem:

  1. Snapshot e Clone:

    • Oferecem a capacidade de tirar snapshots das VMs para fins de backup e recuperação, além de permitir a clonagem rápida de VMs.
  2. Migração de VMs:

    • Algumas soluções de hypervisor permitem a migração dinâmica de VMs entre hosts físicos sem interrupção de serviço, conhecida como migração real time.
  3. Console de Gerenciamento:

    • Fornecem interfaces gráficas ou consoles de gerenciamento para monitorar e administrar as VMs.
  4. Pause (Pausar):

    • Alguns hypervisors oferecem a capacidade de pausar uma máquina virtual. Ao pausar uma VM, o estado atual da máquina, incluindo a RAM e o estado do processador, é mantido, mas a VM é temporariamente interrompida. Essa funcionalidade pode ser útil para conservação de recursos ou para situações em que é necessário interromper temporariamente uma VM.
  5. Suspend (Suspender):

    • Similar à pausa, a suspensão de uma máquina virtual envolve a gravação do estado atual da VM, mas geralmente de forma mais persistente. A VM é suspensa e pode ser retomada posteriormente a partir do ponto exato onde foi suspensa. Isso é útil para economia de energia ou para mover uma VM entre hosts físicos enquanto mantém seu estado.
  6. Resume (Retomar):

    • A funcionalidade de retomada é usada para continuar a execução de uma máquina virtual que foi previamente pausada ou suspensa. O hypervisor restaura o estado da VM para que ela continue a execução a partir do ponto em que foi interrompida, mantendo a integridade do estado da máquina virtual.


Tipos de migração


A migração de máquina virtual é o processo de mover uma VM de um host físico para outro. Existem dois tipos principais de migração de VM:


  • Migração ao vivo ou Live migration
    A migração ao vivo (ou em tempo real) é o processo de mover uma VM em execução de um servidor físico para outro servidor físico sem interromper a VM.

  • Migração a frio ou Cold migration
    Este é o processo de mover uma VM desligada de um servidor físico para outro servidor físico.


Além da migração de máquina virtual existe a migração P2V e V2V:

  • PV2 - Physical-to-Virtual
    A migração Physical-to-Virtual (em Português Física para Virtual) ou P2V, é um processo no qual um sistema operacional, aplicações e dados que estão sendo executado em hardware físico são migrado para uma máquina virtual.

  • V2V - Virtual-to-Virtual
    A migração Virtual-to-Virtual (em Português *Virtual para Virtual) ou V2V, é o processo de migração de uma máquina virtual de uma plataforma de virtualização para outra. Por exemplo, mover uma VM de um ambiente VMware para um ambiente Hyper-V.



NUMA - Non-Uniform Memory Access


O NUMA é uma arquitetura que define como os processadores em um sistema acessam a memória. É particularmente útil em servidores com grande número de VMs, onde o acesso a Memória e CPU são realizadas em grande quantidade e várias vezes por segundo. No sistema NUMA, o sistema é dividido em diferentes grupos de processamento, chamados de "nodes", cada node possui sua própria CPU e memória local.


As CPUs em um node (grupo) têm preferência ao acessar a memória local do seu grupo (isso resulta em menor latência). No entanto, elas também podem acessar remotamente a memória de outros nodes. O NUMA é particularmente crucial em ambientes com um grande número de processadores, onde a eficiência no acesso à memória é essencial. Em situações de alto volume de uso, o NUMA pode ser fundamental para otimizar o desempenho, garantindo que o acesso à memória seja gerenciado de maneira eficiente.

Para esclarecer, quando dizemos que uma VM acessa CPU e memória de um node escolhido, estamos nos referindo a um único servidor físico. Em um ambiente NUMA, um servidor é dividido em nós (nodes), e cada nó tem sua própria CPU e memória.



Limitação de Recursos


É importante limitar o uso de recursos por VM para que não acabe consumindo todos os recursos do host hospedeiro. Podemos limitar o uso de forma Geral ou por VM. Cada tecnologia disponibiliza parâmetros para fazer a limitação, ou seja, cada Hypervisor vai ter uma forma de configurar o limite de CPU, Memória, Armazenamento e Rede.



Soluções Open Source


Vamos ver algumas plataformas de gerenciamento de virtualização que são comumente usadas e que são Open Source, essas plataformas de gerenciamento ou ferramentas de administração de VM numa linguagem mais popular não são Hypervisors, são ferramentas que facilitam o gerenciamento de VM e que normalmente usam um Hypervisor no backend para orquestração de máquinas virtuais.



oVirt


O oVirt é uma plataforma de gerenciamento de virtualização de código aberto que fornece ferramentas para administrar ambientes de virtualização baseados em KVM (Kernel-based Virtual Machine). Ele oferece uma interface gráfica, uma plataforma web e API para gerenciar máquinas virtuais, armazenamento, redes e recursos relacionados. Além disso, possui integração com projetos como: LibVirt, GlusterFS, PatternFly e Ansible. O oVirt oferece interface gráfica e linha de comando para gerenciar a plataforma.



Proxmox Virtual Environment (Proxmox VE)


O Proxmox VE é uma plataforma de virtualização de código aberto baseada em Debian que é usa um Hypervisor do tipo 1. O Proxmox VE oferece interface gráfica e linha de comando para gerenciar a plataforma. O Proxmox combina dois tipos de virtualização:

  1. Virtualização baseada em máquinas virtuais (VMs) Usa o KVM (Kernel-based Virtual Machine) como backend para orquestração de máquinas virtuais.
  2. Virtualização baseada em contêineres com LXC (Linux Containers) Usa o LXC como backend para fazer a orquestração de containers.


Virtual Machine Manager (Virt-Manager)


O Virtual Machine Manager também conhecido como Virt-Manager, é uma aplicação de código aberto que fornece uma interface gráfica para gerenciamento de máquinas virtuais. É muito utilizado em ambientes Linux que utilizam o KVM (Kernel-based Virtual Machine) e o QEMU (Quick Emulator) como tecnologias de virtualização. O irt-Manager oferece interface gráfica e linha de comando para gerenciar a plataforma. Os comandos mais comuns são virsh e virt-install.



VirtualBox


O Oracle VM VirtualBox, também chamado apenas de VirtualBox, é uma plataforma de virtualização de código aberto desenvolvida pela Oracle. O VirtualBox usa um Hypervisor do tipo 2 e implementa seu próprio hypervisor, sendo uma parte integral do software. Ele não depende de virtualização de hardware (como Intel VT-x ou AMD-V) para funcionar, mas pode ser configurado para usar a virtualização de hardware.


Além disso, no VirtualBox podemos usar os Guest Additions (ou também chamados de Guest Drivers), eles são um conjunto de drivers e utilitários que são instalados na máquina virtual (guest) para melhorar a integração entre a VM e o sistema operacional hospedeiro. Possui interface gráfica mas opera via linha de comando também.



Systemd-machined


O systemd-machined é um daemon (serviço em segundo plano) presente em sistemas Linux, responsável por rastrear e gerenciar máquinas virtuais e contêineres em execução localmente. Integrante do projeto systemd, ele é administrado pelos comandos systemctl e machinectl.


Este serviço é capaz de detectar automaticamente máquinas virtuais e contêineres em execução, utilizando métodos como KVM, cgroups e sockets para obter informações detalhadas sobre esses ambientes isolados. O systemd-machined oferece uma abordagem unificada para o gerenciamento eficiente desses recursos, proporcionando uma integração coesa com outros componentes do systemd.



Vagrant


O Vagrant é uma ferramenta open source utilizada para trabalhar com máquinas virtuais, criando ambientes totalmente virtuais. Sua ferramenta de linha de comando é simultaneamente simples e poderosa, permitindo a rápida provisionamento de sistemas virtualizados. Em muitos casos, é possível disponibilizar uma máquina virtual pronta para uso em menos de 20 segundos, dependendo significativamente da velocidade da conexão com a Internet para o download de imagens.


Não possui uma interface gráfica, sendo exclusivamente operado via linha de comando. Embora não seja altamente recomendado para ambientes de produção, o Vagrant é amplamente utilizado em ambientes de testes e desenvolvimento. Oferece suporte a vários hypervisors, incluindo VirtualBox, VMware e KVM.



Switches Virtuais


Os switches virtuais (VS) são essenciais para conectar máquinas virtuais (VMs) entre si. Sem um Switch Virtual, cada VM teria que ser conectada a uma interface física de rede, tanto no servidor quanto no switch físico. Isso seria muito ineficiente, pois exigiria mais hardware e consumiria mais energia. Por isso é importante o uso de Switches Virtuais, como o Open vSwitch (OVS).



Open vSwitch - OVS


O Open vSwitch (OVS) é um switch virtual multicamadas open source amplamente utilizado em ambientes de virtualização, como OpenStack e Kubernetes. Ele desempenha o papel crucial de um switch virtual, permitindo que máquinas virtuais e contêineres se comuniquem eficientemente, eliminando a necessidade de interfaces físicas individuais no host hospedeiro (problema descrito acima).


O OVS suporta diversos hypervisors, incluindo KVM, Xen, VirtualBox e VMware, além de sistemas operacionais como Linux e FreeBSD. Suas funcionalidades avançadas englobam VLANs, tunelamento GRE e VXLAN, Bridge, Port Mirroring, QoS (Quality of Service), balanceamento de carga e filtragem de pacotes.


Integrando-se a controladores SDN (Software Defined Networking), o OVS oferece flexibilidade e automação no gerenciamento de redes. O uso do OVSDB (Open vSwitch Database) permite uma configuração dinâmica e eficiente do OVS.


Além disso, o suporte ao protocolo OpenFlow possibilita a comunicação entre o OVS e controladores SDN, permitindo decisões centralizadas na rede. Sua integração frequente a ambientes de orquestração, como OpenStack e Kubernetes, proporciona recursos avançados de networking em ambientes virtualizados e contêineres.


A imagem abaixo representa as camadas de virtualização, demonstrando mais detalhadamente onde fica o Switch Virtual na camada de virtualização:

Open vSwitch

Imagem retirada do wikimedia.org em [26/01/2024]



Fontes


https://www.lpi.org/blog/2020/10/01/xen-virtualization-and-cloud-computing-01-introduction

https://www.redhat.com/pt-br/topics/virtualization/what-is-virtualization

https://aws.amazon.com/pt/what-is/virtualization/

https://www.ibm.com/topics/virtualization

https://opensource.com/resources/virtualization

https://wiki.xenproject.org/wiki/Book/HelloXenProject/1-Chapter

https://blog.mandic.com.br/artigos/tecnologias-de-virtualizacao-pvm-e-hvm/

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html

https://www.ovirt.org/

https://www.proxmox.com/en/proxmox-virtual-environment/overview

https://www.virtualbox.org/

https://www.openvswitch.org/