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.
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:
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.
Flexibilidade: Permite uma reconfiguração de recursos das VMs de forma fácil e rápida, assim como snapshots entre outros.
Redução de Custos: Ajuda a reduzir os custos de TI ao minimizar o número de servidores físicos necessários.
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:
Complexidade: A virtualização pode ser uma tecnologia complexa de implementar e gerenciar.
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.
Desempenho: As máquinas virtuais podem ter um desempenho inferior às máquinas físicas, especialmente se estiverem executando aplicativos que exigem muitos recursos.
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.
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é mesmobare-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?
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:
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.
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.
Console de Gerenciamento:
- Fornecem interfaces gráficas ou consoles de gerenciamento para monitorar e administrar as VMs.
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.
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.
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:
- Virtualização baseada em máquinas virtuais (VMs) Usa o KVM (Kernel-based Virtual Machine) como backend para orquestração de máquinas virtuais.
- 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:
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.proxmox.com/en/proxmox-virtual-environment/overview