Share to:

 

Virtualização em nível de sistema operacional

A virtualização em nível de sistema operacional é um paradigma de virtualização de sistema operacional no qual o núcleo permite a existência de múltiplas instâncias isoladas de espaço de usuário, incluindo contêineres (LXC, Solaris Containers, AIX WPARs, HP-UX SRP Containers, Docker, Podman), zonas (Solaris Containers), servidores privados virtuais (OpenVZ), partições, ambientes virtuais (VEs), núcleos virtuais (DragonFly BSD) e jails (FreeBSD jail e chroot).[1] Tais instâncias podem parecer computadores reais do ponto de vista dos programas em execução nelas. 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, poder de CPU, recursos de hardware quantificáveis) daquele computador. Programas em execução dentro de um contêiner podem ver apenas o conteúdo do contêiner e os dispositivos atribuídos ao contêiner.

Em sistemas operacionais do tipo 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 núcleo geralmente fornece recursos de gerenciamento de recursos para limitar o impacto das atividades de um contêiner em outros contêineres. Os contêineres Linux são todos baseados nos mecanismos de virtualização, isolamento e gerenciamento de recursos fornecidos pelo núcleo Linux, notavelmente cgroups.[2]

Embora a palavra contêiner se refira mais comumente à virtualização em nível de sistema operacional, às vezes é usada para se referir a máquinas virtuais mais completas operando em vários graus de acordo com o sistema operacional host, como 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 consiga acessar) todos os recursos do sistema. Eles incluem:

O sistema operacional pode permitir ou negar acesso a esses recursos com base em qual programa os solicita e na conta de usuário no contexto em que ele é 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 conteinerização, é possível executar programas dentro de contêineres, aos quais apenas partes desses recursos são alocadas. Um programa que espera ver o computador inteiro, 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: nesta última, 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 em nível de sistema operacional é comumente usada em ambientes de hospedagem virtual, onde é útil para alocar com segurança recursos de hardware finitos entre um grande número de usuários que não se confiam mutuamente. Os administradores de sistema também podem usá-la para consolidar hardware de servidor movendo serviços em hosts separados para contêineres em um servidor.

Outros cenários típicos incluem separar vários programas para contêineres separados para segurança aprimorada, independência de hardware e recursos de gerenciamento de recursos adicionados.[3] A segurança aprimorada fornecida pelo uso de um mecanismo chroot, no entanto, não é perfeita.[4] Implementações de virtualização em nível de sistema operacional capazes 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.

Sobrecarga

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

Flexibilidade

A virtualização em nível de 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 núcleo convidado diferente. Por exemplo, com o Linux, distribuições diferentes são boas, 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. Os métodos de adaptação, incluindo análises de retransmissão de servidor em nuvem, mantêm o ambiente virtual em nível de sistema operacional dentro desses aplicativos.[5]

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 mais antiga do Solaris 8 ou 9 em um host Solaris 10. As zonas de marca Linux (chamadas de zonas de 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 Linux Red Hat Enterprise Linux 3.x ou CentOS 3.x dentro das zonas "lx".[6][7] No entanto, em 2010, as zonas de marca Linux foram removidas do Solaris; em 2014, elas foram reintroduzidas no Illumos, que é a ramificação de código aberto do Solaris, com suporte a núcleos Linux de 32 bits.

Armazenamento

Algumas implementações fornecem mecanismos de cópia durante a gravação (copy-on-write, CoW) em nível de arquivo. (Mais comumente, um sistema de arquivos padrão é compartilhado entre partições, e aquelas partições que alteram os arquivos criam automaticamente suas próprias cópias.) Isso é mais fácil de fazer backup, mais eficiente em termos de espaço e mais simples de armazenar em cache do que os esquemas de cópia durante a gravação em nível de bloco comuns em virtualizadores de sistema inteiro. Os virtualizadores de sistema inteiro, no entanto, 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 Ativamente desenvolvido desde ou entre Recursos
Isolamento do sistema de arquivos Cópia durante a gravação Cotas de disco Limitação de taxa de E/S 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égios de root
chroot A maioria dos sistemas operacionais tipo UNIX Varia de acordo com o sistema operacional 1982 Parcial[a] Não Não Não Não Não Não Sim Não Não
Docker Linux,[9] Windows x64[10] macOS[11] Licença Apache 2.0 2013 Sim Sim Parcial[b] Sim (desde 1.10) Sim Sim Sim Sim Somente em 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[c] Sim Sim Parcial[d] ? Não Parcial[e]
lmctfy Linux Licença Apache 2.0 2013–2015 Sim Sim Sim Sim[c] Sim Sim Parcial[d] ? Não Parcial[e]
LXC Linux GNU GPLv2 2008 Sim[14] Sim Parcial[f] Parcial[g] Sim Sim Sim Sim Sim Sim[14]
Singularity Linux Licença BSD 2015[15] Sim[16] Sim Sim Não Não Não Não Não Não Sim[17]
OpenVZ Linux GNU GPLv2 2005 Sim Sim[18] Sim Sim[h] Sim Sim Sim[i] Parcial[j] Sim Sim[k]
Virtuozzo Linux, Windows Trialware 2000[22] Sim Sim Sim Sim[l] Sim Sim Sim[i] Parcial[m] Sim Sim
Solaris Containers (Zonas) illumos (OpenSolaris),
Solaris
CDDL,
Proprietário
2004 Sim Sim (ZFS) Sim Parcial[n] Sim Sim Sim[o][25][26] Parcial[p] Parcial[q][r] Sim[s]
FreeBSD jail FreeBSD, DragonFly BSD Licença BSD 2000[28] Sim Sim (ZFS) Sim Sim Sim[29] Sim Sim[30] Sim Parcial[31][32] Sim[33]
vkernel DragonFly BSD Licença BSD 2006[34] Sim[35] Sim[35] ? Sim[36] Sim[36] Sim[37] ? ? 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 comercial proprietário 2007 Sim Não Sim Sim Sim Sim Sim[t] Não Sim[39] ?
iCore Virtual Accounts Windows XP Freeware 2008 Sim Não Sim Não Não Não Não ? Não ?
Sandboxie Windows 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[40][41] Sim[40][41] Sim[40][41] Sim[40][41] Sim ? ? Sim
Turbo Windows Freemium 2012 Sim Não Não Não Não Não Sim Não Não Sim
rkt (rocket) Linux Licença Apache 2.0 2014[42]–2018 Sim Sim Sim Sim Sim Sim Sim ? ? Sim

Os contêineres Linux que não estão listados acima incluem:

  • LXD, um wrapper alternativo em torno do LXC desenvolvido pela Canonical[43]
  • Podman,[44] um substituto avançado e seguro sem root para Kubernetes para Docker com suporte para vários formatos de imagem de contêiner, incluindo imagens Docker e OCI
  • Charliecloud, um conjunto de ferramentas de contêiner usadas em sistemas HPC[45]
  • Plataforma Kata Containers MicroVM[46]
  • O Bottlerocket é um sistema operacional de código aberto baseado em Linux que é desenvolvido especificamente pela Amazon Web Services para executar contêineres em máquinas virtuais ou hosts "bare metal"[47]
  • Azure Linux é uma distribuição Linux de código aberto que é desenvolvida especificamente pela Microsoft Azure e semelhante ao Fedora CoreOS

Ver também

Notas

  1. O usuário root pode facilmente escapar do chroot. O chroot nunca foi suposto ser usado como um mecanismo de segurança.[8]
  2. Para drivers de armazenamento btrfs, overlay2, windowsfilter e zfs. [12]
  3. a b Usando o agendador CFQ, há uma fila separada por convidado.
  4. a b A rede é baseada no isolamento, não na virtualização.
  5. a b Um total de 14 capacidades de usuário são consideradas seguras dentro de um contêiner. O restante pode não poder ser concedido a processos dentro desse contêiner sem permitir que esse processo interfira potencialmente com coisas fora desse contêiner.[13]
  6. Cotas de disco por contêiner são possíveis ao usar partições separadas para cada contêiner com a ajuda do LVM, ou quando o sistema de arquivos do host subjacente é btrfs, caso em que os subvolumes btrfs são usados ​​automaticamente.
  7. A limitação de taxa de E/S é suportada ao usar Btrfs.
  8. Disponível desde o núcleo Linux 2.6.18-028stable021. A implementação é baseada no agendador de E/S de disco CFQ, mas é um esquema de dois níveis, então a prioridade de E/S não é por processo, mas sim por contêiner.[19]
  9. a b Cada contêiner pode ter seus próprios endereços de IP, regras de firewall, tabelas de roteamento e assim por diante. Três esquemas de rede diferentes são possíveis: baseado em rota, baseado em ponte e atribuindo um dispositivo de rede real (NIC) a um contêiner.
  10. Os contêineres Docker podem ser executados dentro de contêineres OpenVZ.[20]
  11. Cada contêiner pode ter acesso root sem afetar outros contêineres.[21]
  12. Disponível desde a versão 4.0, janeiro de 2008.
  13. Os contêineres Docker podem ser executados dentro dos contêineres Virtuozzo.[23]
  14. Sim com illumos[24]
  15. Veja Virtualização de rede Solaris e controle de recursos para obter mais detalhes.
  16. Somente quando o nível superior é uma zona KVM (illumos) ou uma zona kz (Oracle).
  17. A partir do Solaris 11.3 Beta, as Solaris Kernel Zones podem usar migração ao vivo.
  18. A migração a frio (desligamento-movimentação-reinicialização) é implementada.
  19. Zonas que não são globais são restritas para que não afetem outras zonas por meio de uma abordagem de limitação de capacidade. A zona global pode administrar as zonas que não são globais.[27]
  20. Disponível desde TL 02.[38]

Referências

  1. Hogg, Scott (26 de maio de 2014). «Software containers: Used more frequently than most realize». Network World (em inglês). Network world, Inc. Consultado em 9 de julho de 2015. Existem muitos outros sistemas de virtualização em nível de sistema operacional, como: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers, entre outros. 
  2. Rami, Rosen. «Namespaces and Cgroups, the basis of Linux Containers» (PDF) (em inglês). Consultado em 18 de agosto de 2016 
  3. «Secure Bottlerocket deployments on Amazon EKS with KubeArmor | Containers». aws.amazon.com (em inglês). 20 de outubro de 2022. Consultado em 20 de junho de 2023 
  4. Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Mastering FreeBSD and OpenBSD security. Col: O'Reilly Series (em inglês). [S.l.]: O'Reilly Media, Inc. p. 59. ISBN 0596006268 
  5. Huang, D. (2015). «Experiences in using os-level virtualization for block I/O». Proceedings of the 10th Parallel Data Storage Workshop (em inglês). [S.l.: s.n.] pp. 13–18. ISBN 9781450340083. doi:10.1145/2834976.2834982 
  6. «System administration guide: Oracle Solaris containers-resource management and Oracle Solaris zones, Chapter 16: Introduction to Solaris zones» (em inglês). Oracle Corporation. 2010. Consultado em 2 de setembro de 2014 
  7. «System administration guide: Oracle Solaris containers-resource nanagement and Oracle Solaris zones, Chapter 31: About branded zones and the Linux branded zone» (em inglês). Oracle Corporation. 2010. Consultado em 2 de setembro de 2014 
  8. «3.5. Limiting your program's environment». freebsd.org (em inglês) 
  9. «Docker drops LXC as default execution environment». InfoQ (em inglês) 
  10. «Install Docker desktop on Windows | Docker documentation». Docker (em inglês). 9 de fevereiro de 2023 
  11. «Get started with Docker desktop for Mac». Docker documentation (em inglês). 6 de dezembro de 2019 
  12. «docker container run - Set storage driver options per container (--storage-opt)». docs.docker.com (em inglês). 22 de fevereiro de 2024 
  13. «Paper - Linux-VServer». linux-vserver.org (em inglês) 
  14. a b Graber, Stéphane (1 de janeiro de 2014). «LXC 1.0: Security features [6/10]». Consultado em 12 de fevereiro de 2014. O LXC agora tem suporte para namespaces de usuário. [...] O LXC não está mais sendo executado como root, então, mesmo que um invasor consiga escapar do contêiner, ele terá os privilégios de um usuário comum no host. 
  15. «Sylabs brings Singularity containers into commercial HPC | Top 500 supercomputer sites». www.top500.org (em inglês) 
  16. «SIF — Containing your containers». www.sylabs.io (em inglês). 14 de março de 2018 
  17. Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (11 de maio de 2017). «Singularity: Scientific containers for mobility of compute». PLOS ONE (em inglês). 12 (5): e0177459. Bibcode:2017PLoSO..1277459K. PMC 5426675Acessível livremente. PMID 28494014. doi:10.1371/journal.pone.0177459Acessível livremente 
  18. Bronnikov, Sergey. «Comparison on OpenVZ wiki page». OpenVZ Wiki (em inglês). OpenVZ. Consultado em 28 de dezembro de 2018 
  19. «I/O priorities for containers». OpenVZ Virtuozzo Containers Wiki (em inglês) 
  20. «Docker inside CT» (em inglês) 
  21. «Container». OpenVZ Virtuozzo Containers Wiki (em inglês) 
  22. «Initial public prerelease of Virtuozzo (named ASPcomplete at that time)» (em inglês) 
  23. «Parallels Virtuozzo now provides native support for Docker» (em inglês) 
  24. Pijewski, Bill (1 de março de 2011). «Our ZFS I/O Throttle». wdp.dtrace.org (em inglês) 
  25. Network virtualization and resource control (Crossbow) FAQ Arquivado em 2008-06-01 no Wayback Machine
  26. «Managing network virtualization and network resources in Oracle® Solaris 11.2». docs.oracle.com (em inglês) 
  27. Oracle Solaris 11.1 administration, Oracle Solaris zones, Oracle Solaris 10 zones and resource management E29024.pdf, pp. 356–360. Disponível dentro de um arquivo (em inglês).
  28. «Contain your enthusiasm - Part two: Jails, zones, OpenVZ, and LXC» (em inglês). Jails were first introduced in FreeBSD 4.0 in 2000 
  29. «Hierarchical resource limits - FreeBSD Wiki» (em inglês). Wiki.freebsd.org. 27 de outubro de 2012. Consultado em 15 de janeiro de 2014 
  30. «Implementing a clonable network stack in the FreeBSD kernel» (PDF) (em inglês). usenix.org. 13 de junho de 2003 
  31. «VPS for FreeBSD» (em inglês). Consultado em 20 de fevereiro de 2016 
  32. «[Announcement] VPS // OS virtualization // alpha release» (em inglês). 31 de agosto de 2012. Consultado em 20 de fevereiro de 2016 
  33. «3.5. Limiting your program's environment» (em inglês). Freebsd.org. Consultado em 15 de janeiro de 2014 
  34. Matthew Dillon (2006). «sys/vkernel.h». BSD cross reference (em inglês). DragonFly BSD 
  35. a b «vkd(4) — Virtual kernel disc» (em inglês). DragonFly BSD. trata a imagem do disco como cópia durante a gravação. 
  36. a b Sascha Wildner (8 de janeiro de 2007). «vkernel, vcd, vkd, vke — virtual kernel architecture». DragonFly miscellaneous information manual (em inglês). DragonFly BSD 
  37. «vkernel, vcd, vkd, vke - virtual kernel architecture». DragonFly On-Line Manual Pages (em inglês). DragonFly BSD 
  38. «IBM fix pack information for: WPAR network isolation - United States». ibm.com (em inglês). 21 de julho de 2011 
  39. «Live application mobility in AIX 6.1». www.ibm.com (em inglês). 3 de junho de 2008 
  40. a b c d «systemd-nspawn». www.freedesktop.org (em inglês) 
  41. a b c d «2.3. Modifying control groups Red Hat Enterprise Linux 7». Red Hat Customer portal (em inglês) 
  42. Polvi, Alex. «CoreOS is building a container runtime, rkt». CoreOS Blog (em inglês). Consultado em 12 de março de 2019. Cópia arquivada em 1 de abril de 2019 
  43. «LXD». linuxcontainers.org (em inglês). Consultado em 11 de fevereiro de 2021 
  44. Rootless containers with Podman and fuse-overlayfs (em inglês), CERN workshop, 2019-06-04
  45. «Overview — Charliecloud 0.25 documentation» (em inglês). Consultado em 4 de outubro de 2020 
  46. «Home». katacontainers.io (em inglês) 
  47. «Bottlerocket is a Linux-based operating system purpose-built to run containers» (em inglês) 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya