Esta seção documenta características técnicas, vantagens e desvantagens de cada uma das respectivas tecnologias.
Versão em vídeo desta seção pode estar disponível no canal do Guia Foca no YouTube: Entenda Chroot, Container e Virtualização.
Chroot é uma das tecnologias mais antigas entre todas, veio inspirada no BSD Jail.
Vantagens
- O programa executa em um espaço separado do sistema de arquivos principal da máquina.
- Não possui perda de performance, pois é como uma pasta local no sistema
- Possibilita testes mais arriscados na máquina, inclusive testes com versões diferentes do SO (ou até de arquiteturas retro-compatíveis com o kernel, como testar um sistema i386 em um x86_64).
- Possibilita testes mais arriscados na máquina
Desvantagens
- O espaço do kernel é o mesmo da máquina física (não possui qualquer isolamento)
- Usa a mesma memória RAM (podendo lotar a memória)
- Separação de dispositivos físicos é deficiente, com isso o disco raíz pode ser acessado pelo chroot (escapar da jaula).
Container é o que há de mais performático em termo de isolação de privilégios. Basicamente é um Chroot que deu certo :-D
Vantagens
-
Permite isolar totalmente os recursos de CPU, memória, disco da máquina host
-
Atachar isoladamente placas de redes do host físico direto para o container
-
Alta performance de funcionamento, identico a máquina física
-
Não 'perde' espaço em disco, devido a alocação prévia de disco ou memória. Apenas o espaço requerido ou sendo executado serão efetivamente utilizados em máquina física.
-
Inicialização muito rápida. É possível iniciar 250 containers em questão de segundos em uma máquina razoável.
Desvantagens
-
Somente é possível utilizar o kernel da máquina hospedeira. A virtualização permite utilizar kernels de diferentes versões
-
Como executa no mesmo espaço de memória do kernel da máquina física, existe a possibilidade de alguns tipos de vulnerabilidades escalarem privilégios para a máquina host (um pouco raras hoje em dia, mas já ocorreu no passado).
Exemplos de tecnologias de containers: lxc,vserver, openvz, containerd, Docker.
Virtualização consiste em emular totalmente uma máquina (com memória RAM, disco, processador, video, arquitetura) com recursos alocados para sua máquina.
Vantagens da Virtualização
- Mesmas vantagens do chroot, exceto perda de performance (pode perder até 5% de performance da máquina, mesmo nos melhores sistemas de virtualização via hardware)
- Separação de kernel: O sistema host (o que roda a virtualização) pode rodar um kernel 5.4 e a máquina virtual (convidado) um kernel 6.0.
- Separação de Memória
- Separação de CPU
- Separação de Rede
- Permite emular outra arquiteturas (para desenvolvimento, homologação, testes, etc)
Desvantagens
- Disco e Memória precisam ser pré-alocados
- Perda de performance em comparação com chroot
- Pode haver grnade competição de recursos levando a máquina virtual a um starvation
Além de virtualização full, temos sistemas chamados Para-virtualização,
que carrega
todas as vantagens e desvantagens da virtualização tradicional
acima, mas
utiliza um kernel específicado pelo host
(podendo ser ou não a mesma versão ou
arquitetura
executada no host de virtualização). Um exemplo de sistema que suporta para-virtualização é o XEN.
Exemplos de sistema de virtualização convencional/para-virtualização: KVM, XEN, Vmware, Hyperv.
Copyright © 1999-2020 - Gleydson Mazioli da Silva