Virtualização de nível de sistema operacional - OS-level virtualization

A virtualização no nível do SO é um paradigma do sistema operacional no qual o kernel permite a existência de várias instâncias isoladas do espaço do usuário . Tais instâncias, chamadas de contêineres ( LXC , contêineres Solaris , Docker ), Zonas ( contêineres Solaris ), servidores virtuais privados ( OpenVZ ), partições , ambientes virtuais (VEs), kernels virtuais ( DragonFly BSD ) ou jails ( FreeBSD jail ou chroot jail ), podem parecer computadores reais do ponto de vista dos programas em execução neles. Um programa de computador em execução em um sistema operacional comum pode ver todos os recursos (dispositivos conectados, arquivos e pastas, compartilhamentos de rede , potência da CPU, recursos de hardware quantificáveis) desse computador. No entanto, os programas executados dentro de um contêiner podem ver apenas o conteúdo do contêiner e os dispositivos atribuídos a ele.

Em sistemas operacionais semelhantes ao Unix, esse recurso pode ser visto como uma implementação avançada do mecanismo chroot padrão , que altera a pasta raiz aparente para o processo em execução atual e seus filhos. Além dos mecanismos de isolamento, o kernel geralmente fornece recursos de gerenciamento de recursos para limitar o impacto das atividades de um contêiner em outros contêineres.

O termo contêiner , embora mais popularmente se refira a sistemas de virtualização no nível do SO, às vezes é ambiguamente usado para se referir a ambientes de máquina virtual mais completos operando em vários graus de concerto com o SO host, por exemplo, os contêineres Hyper-V da Microsoft .

Operação

Em sistemas operacionais comuns para computadores pessoais, um programa de computador pode ver (mesmo que não seja capaz de acessar) todos os recursos do sistema. Eles incluem:

  1. Recursos de hardware que podem ser empregados, como a CPU e a conexão de rede
  2. Dados que podem ser lidos ou gravados, como arquivos, pastas e compartilhamentos de rede
  3. Periféricos conectados com os quais ele pode interagir, como webcam , impressora, scanner ou fax

O sistema operacional pode permitir ou negar acesso a tais recursos com base no programa que os solicita e na conta do usuário no contexto em que é executado. O sistema operacional também pode ocultar esses recursos, de modo que, quando o programa de computador os enumera, eles não apareçam nos resultados da enumeração. No entanto, do ponto de vista da programação, o programa de computador interagiu com esses recursos e o sistema operacional gerenciou um ato de interação.

Com a virtualização do sistema operacional, ou contêinerização, é possível executar programas dentro de contêineres, para os quais apenas partes desses recursos são alocadas. Um programa que espera ver todo o computador, uma vez executado dentro de um contêiner, só pode ver os recursos alocados e acredita que eles são tudo o que está disponível. Vários contêineres podem ser criados em cada sistema operacional, para cada um dos quais um subconjunto dos recursos do computador é alocado. Cada contêiner pode conter qualquer número de programas de computador. Esses programas podem ser executados simultaneamente ou separadamente e podem até interagir uns com os outros.

A conteinerização tem semelhanças com a virtualização de aplicativos : neste último, apenas um programa de computador é colocado em um contêiner isolado e o isolamento se aplica apenas ao sistema de arquivos.

Usos

A virtualização no nível do sistema operacional é comumente usada em ambientes de hospedagem virtual , onde é útil para alocar com segurança recursos finitos de hardware entre um grande número de usuários que desconfiam mutuamente. Os administradores de sistema também podem usá-lo para consolidar o hardware do servidor, movendo serviços em hosts separados para contêineres em um servidor.

Outros cenários típicos incluem a separação de vários programas em contêineres separados para maior segurança, independência de hardware e recursos adicionais de gerenciamento de recursos. A segurança aprimorada fornecida pelo uso de um mecanismo chroot, no entanto, está longe de ser rígida. Implementações de virtualização em nível de sistema operacional com capacidade de migração ao vivo também podem ser usadas para balanceamento de carga dinâmico de contêineres entre nós em um cluster.

A sobrecarga

A virtualização no nível do sistema operacional geralmente impõe menos sobrecarga do que a virtualização completa porque os programas em partições virtuais no nível do sistema operacional usam a interface de chamada de sistema normal do sistema operacional e não precisam ser submetidos à emulação ou executados em uma máquina virtual intermediária , como é o caso com virtualização completa (como VMware ESXi , QEMU ou Hyper-V ) e paravirtualização (como Xen ou Linux no modo de usuário ). Essa forma de virtualização também não requer suporte de hardware para desempenho eficiente.

Flexibilidade

A virtualização no nível do sistema operacional não é tão flexível quanto outras abordagens de virtualização, pois não pode hospedar um sistema operacional convidado diferente do host ou um kernel convidado diferente. Por exemplo, com o Linux , diferentes distribuições são adequadas, mas outros sistemas operacionais como o Windows não podem ser hospedados. Os sistemas operacionais que usam sistemática de entrada variável estão sujeitos a limitações dentro da arquitetura virtualizada. Métodos de adaptação, incluindo análise de retransmissão de servidor em nuvem, mantêm o ambiente virtual no nível do sistema operacional dentro desses aplicativos.

O Solaris supera parcialmente a limitação descrita acima com seu recurso de zonas de marca , que fornece a capacidade de executar um ambiente dentro de um contêiner que emula uma versão anterior do Solaris 8 ou 9 em um host Solaris 10. As zonas com marca Linux (conhecidas como zonas com marca "lx") também estão disponíveis em sistemas Solaris baseados em x86 , fornecendo um espaço de usuário Linux completo e suporte para a execução de aplicativos Linux; além disso, o Solaris fornece utilitários necessários para instalar as distribuições Red Hat Enterprise Linux  3.x ou CentOS  3.x Linux dentro de zonas "lx". No entanto, em 2010, as zonas com a marca Linux foram removidas do Solaris; em 2014, eles foram reintroduzidos na Illumos , que é o fork do Solaris de código aberto, com suporte para kernels Linux de 32 bits .

Armazenar

Algumas implementações fornecem mecanismos de cópia na gravação (CoW) em nível de arquivo . (Mais comumente, um sistema de arquivos padrão é compartilhado entre as partições e as partições que alteram os arquivos criam automaticamente suas próprias cópias.) Isso é mais fácil de fazer backup, mais espaço-eficiente e mais simples de armazenar em cache do que a cópia em nível de bloco esquemas de escrita comuns em virtualizadores de todo o sistema. Os virtualizadores de todo o sistema, entretanto, podem trabalhar com sistemas de arquivos não nativos e criar e reverter instantâneos de todo o estado do sistema.

Implementações

Mecanismo Sistema operacional Licença Desenvolvido ativamente desde ou entre Recursos
Isolamento do sistema de arquivos Cópia na gravação Cotas de disco Limitação de taxa de I / O Limites de memória Cotas de CPU Isolamento de rede Virtualização aninhada Ponto de verificação de partição e migração ao vivo Isolamento de privilégio de raiz
chroot A maioria dos sistemas operacionais semelhantes ao UNIX Varia de acordo com o sistema operacional 1982 Parcial Não Não Não Não Não Não sim Não Não
Docker Linux , FreeBSD , Windows x64 (Pro, Enterprise e Education) macOS Licença Apache 2.0 2013 sim sim Não diretamente Sim (desde 1.10) sim sim sim sim Apenas no modo experimental com CRIU [1] Sim (desde 1.10)
Linux-VServer
(contexto de segurança)
Linux , Windows Server 2016 GNU GPLv2 2001 sim sim sim sim sim sim Parcial ? Não Parcial
lmctfy Linux Licença Apache 2.0 2013–2015 sim sim sim sim sim sim Parcial ? Não Parcial
LXC Linux GNU GPLv2 2008 sim sim Parcial Parcial sim sim sim sim sim sim
Singularidade Linux Licença BSD 2015 sim sim sim Não Não Não Não Não Não sim
OpenVZ Linux GNU GPLv2 2005 sim sim sim sim sim sim sim Parcial sim sim
Virtuozzo Linux , Windows Trialware 2000 sim sim sim sim sim sim sim Parcial sim sim
Contêineres Solaris (zonas) illumos ( OpenSolaris ),
Solaris
CDDL ,
proprietário
2004 sim Sim (ZFS) sim Parcial sim sim sim Parcial Parcial sim
Prisão FreeBSD FreeBSD , DragonFly BSD Licença BSD 2000 sim Sim (ZFS) sim sim sim sim sim sim Parcial sim
vkernel DragonFly BSD Licença BSD 2006 sim sim N / D ? sim sim sim ? ? sim
sysjail OpenBSD , NetBSD Licença BSD 2006–2009 sim Não Não Não Não Não sim Não Não ?
WPARs AIX Software proprietário comercial 2007 sim Não sim sim sim sim sim Não sim ?
Contas virtuais iCore Windows XP freeware 2008 sim Não sim Não Não Não Não ? Não ?
Sandboxie janelas GNU GPLv3 2004 sim sim Parcial Não Não Não Parcial Não Não sim
systemd-nspawn Linux GNU LGPLv2.1 + 2010 sim sim sim sim sim sim sim ? ? sim
Turbo janelas Freemium 2012 sim Não Não Não Não Não sim Não Não sim
rkt Linux Licença Apache 2.0 2014–2018 sim sim sim sim sim sim sim ? ? sim

Veja também

Notas

Referências

links externos