Virtualización a nivel de sistema operativo

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda

La virtualización a nivel de sistema operativo es un método de virtualización de servidor en el cual el kernel de un sistema operativo permite que existan múltiples instancias aisladas de espacios de usuario, en lugar de solo uno. Tales instancias, las cuales son a veces llamadas contenedores, contenedores de software, motores de virtualización (VEs por sus siglas en inglés) o prisiones (prisión FreeBSD o prisión chroot), puede verse y sentirse como un servidor real desde el punto de vista de sus dueños y usuarios.

En sistemas operativos estilo Unix, esta tecnología puede ser vista como una implementación avanzada del mecanismo chroot estándar. Además de mecanismos de aislamiento, el kernel a menudo proporciona mecanismos de administración de recursos para limitar el impacto de las actividades de un contenedor sobre otros contenedores.

Usos[editar]

La virtualización a nivel de sistema operativo es generalmente utilizada en ambientes de alojamiento virtual, donde es útil para distribuir recursos de hardware finitos de forma segura entre un número grande de usuarios mutuamente desconfiados. Administradores de sistema también lo pueden utilizar, en menor extensión, para ahorrar hardware, moviendo servicios que se encuentran en servidores distintos hacia un mismo servidor.

Otros escenarios típicos incluyen separar varias aplicaciones en contenedores distintos para mejorar la seguridad, independencia de hardware y brindar mecanismos de administración de recurso adicionales. La mejora de seguridad proporcionada por el uso de un mecanismo chroot, aun así, no es de ninguna forma infalible.[1]​ Las implementaciones de virtualización a nivel de sistema operativo capaces de hacer migraciones en vivo también puede ser utilizadas para realizar balance dinámico de carga sobre contenedores entre nodos en un grupo.

Sobrecarga[editar]

La virtualización a nivel de sistema operativo normalmente impone poca o ninguna sobrecarga, porque los programas en particiones virtuales utilizan la interfaz de llamada de sistema normal del sistema operativo y no necesitan de emulación o ser ejecutados en una máquina virtual intermedia, como es el caso con virtualizadores a sistema completo (como VMware ESXi, QEMU o Hyper-V) y paravirtualizadores (como Xen o UML). Esta forma de virtualización además no requiere soporte en hardware para actuar eficientemente.

Flexibilidad[editar]

La virtualización a nivel de sistema operativo no es tan flexible como otros enfoques de virtualización porque no puede hospedar un sistema operativo diferente del anfitrión o un kernel distinto. Por ejemplo, con Linux, no hay problemas con las distribuciones diferentes, pero otros sistemas operativos como Windows no puede ser virtualizados.

Solaris vence parcialmente la limitación descrita anteriormente con su característica de zonas marcadas, la cual proporciona la capacidad de ejecutar un entorno dentro de un contenedor que emula un más Solaris versión 8 o 9 en un Solaris 10 anfitrión. Las zonas marcadas de Linux también están disponibles en sistemas Solaris basados en x86, proporcionando un espacio de usuario de Linux completo y soporte para la ejecución de aplicaciones de Linux; además, Solaris proporciona las herramientas necesarias para instalar otras distribuciones de Linux como Red Hat Enterprise Linux 3.x o CentOS 3.x dentro de zonas marcadas de Linux.[2][3]​Sin embargo, en 2010 las zonas marcadas de Linux fueron eliminadas de Solaris; en 2014 eran reintroducidas en Illumos, la rama de código abierto de Solaris, brindando soporte a los kernels de Linux de 32-bits.[4]

Almacenamiento[editar]

Algunas implementaciones de virtualización a nivel de sistema operativo proporcionan mecanismos copy-on-write a nivel de archivos. (En la mayoría de los casos, un sistema de ficheros estándar es compartido entre particiones, y aquellas particiones que cambian los archivos automáticamente crean sus propias copias.) Con este sistema es más sencillo realizar copias de seguridad, además, hace un uso más eficiente del espacio en disco y resulta más sencillo de guardar en caché que los esquemas copy-on-write a nivel de bloque comunes en virtualizadores a sistema completo. Los virtualizadores a sistema completo, sin embargo, pueden trabajar con sistemas de ficheros no nativos y crear y restaurar copias del estado actual completo del sistema.

Implementaciones[editar]

Mecanismo Sistema operativo Licencia Disponible desde o entre Características
Aislamiento de sistema de ficheros Copy-on-write Cuotas de disco Límite de entrada/salida Límites de memoria Cuotas de CPU Aislamiento de red Virtualización anidada Puntos de control de particiones y migraciones en vivo Aislamiento de privilegios de administración
chroot La mayoría de los sistemas operativos estilo Unix Cambia de acuerdo al sistema operativo 1982 Parcial Parcial[6] No No No No No No No No No No No No Sí  No No No No
Docker Linux[7] Licencia Apache 2.0 2013 Sí  Sí  No No directamente Sí  (desde la versión 1.10) Sí  Sí  Sí  Sí  No No Sí  (desde la versión 1.10)
Linux-VServer
(contexto de seguridad)
Linux, Windows Server 2016 GNU GPLv2 2001 Sí  Sí  Sí  Sí [8] Sí  Sí  Parcial Parcial[9] ? No No Parcial Partial[11]
lmctfy Linux Licencia Apache 2.0 2013 Sí  Sí  Sí  Sí [8] Sí  Sí  Parcial Parcial[9] ? No No Parcial Partial[11]
LXC Linux GNU GPLv2 2008 Sí [12] Sí  Parcial Parcial Parcial Parcial[13] Sí  Sí  Sí  Sí  No No Sí [12]
LXD[14] Linux Licencia Apache 2.0 2015 Sí  Sí  Parcial Parcial (ver LXC) Parcial Parcial (ver LXC) Sí  Sí  Sí  Sí  Parcial Parcial[16] Sí 
OpenVZ Linux GNU GPLv2 2005 Sí  Sí  (ZFS) Sí  Sí [18] Sí  Sí  Sí [19] Parcial Parcial[21] Sí  Sí Yes[23]
Virtuozzo Linux, Windows Propietaria 2000[24] Sí  Sí  Sí  Sí [25] Sí  Sí  Sí [19] Parcial Parcial[27] Sí  Sí 
Contenedores Solaris (Zones) illumos (OpenSolaris),
Solaris
CDDL, Propietaria 2004 Sí  Sí  (ZFS) Sí  Parcial Parcial[29] Sí  Sí  Sí [30][31][32] Parcial Parcial[33] Parcial Parcial[34][35] Sí Yes[37]
Prisión FreeBSD FreeBSD Licencia BSD 2000[38] Sí  Sí  (ZFS) Sí [39] Sí  Sí [40] Sí  Sí [41] Sí  Parcial Parcial[42][43] Sí [44]
sysjail OpenBSD, NetBSD Licencia BSD 2006–2009 Sí  No No No No No No No No No No Sí  No No No No ?
WPARs AIX Propietaria 2007 Sí  No No Sí  Sí  Sí  Sí  Sí [46] No No Sí [47] ?
HP-UX Containers (SRP) HPUX Propietaria 2007 Sí  No No Parcial Parcial[48] Sí  Sí  Sí  Sí  ? Sí  ?
Cuentas virtuales de iCore Windows XP Propietaria:

Freeware

2008 Sí  No No Sí  No No No No No No No No ? No No ?
Sandboxie Windows Propietaria:

Freeware

2004 Sí  Sí  Parcial Parcial No No No No No No Parcial Parcial No No No No Sí 
Spoon Windows Propietaria 2012 Sí  Sí  No No No No No No No No Sí  No No No No Sí 
systemd-nspawn Linux GNU LGPLv2.1+ 2010 Sí  Sí  Sí [49][50] Sí [49][50] Sí [49][50] Sí [49][50] Sí  ? ? Sí 
VMware ThinApp Windows Propietaria 2008 Sí  Sí  No No No No No No No No Sí  No No No No Sí 

Véase también[editar]

Notas[editar]

Referencias[editar]

  1. «How to break out of a chroot() jail». 2002. Archivado desde el original el 22 de septiembre de 2013. Consultado el 7 de mayo de 2013. 
  2. «System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 16: Introduction to Solaris Zones». Oracle Corporation. 2010. Consultado el 2 de septiembre de 2014. 
  3. «System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 31: About Branded Zones and the Linux Branded Zone». Oracle Corporation. 2010. Consultado el 2 de septiembre de 2014. 
  4. Bryan Cantrill (28 de septiembre de 2014). «The dream is alive! Running Linux containers on an illumos kernel». slideshare.net. Consultado el 10 de octubre de 2014. 
  5. «3.5. Limiting your program's environment». freebsd.org. 
  6. Root user can easily escape from chroot. Chroot was never supposed to be used as a security mechanism.[5]
  7. «Docker drops LXC as default execution environment». InfoQ. 
  8. a b Utilizing the CFQ scheduler, there is a separate queue per guest.
  9. a b Networking is based on isolation, not virtualization.
  10. Linux-VServer Paper, Secure Capabilities
  11. a b A total of 14 user capabilities are considered safe within a container. The rest may cannot be granted to processes within that container without allowing that process to potentially interfere with things outside that container.[10]
  12. a b Graber, Stéphane (1 de enero de 2014). «LXC 1.0: Security features [6/10]». Consultado el 12 de febrero de 2014. «LXC now has support for user namespaces. [...] LXC is no longer running as root so even if an attacker manages to escape the container, he’d find himself having the privileges of a regular user on the host». 
  13. I/O rate limiting is supported when using Btrfs.
  14. Kouka, Abdelmonam (2015). Ubuntu Server Essentials. Packt Publishing Ltd. p. 124. ISBN 9781785282768. Consultado el 31 de marzo de 2016. «Also known as the Linux container hypervisor, LXD is the next-generation hypervisor provided by Canonical. It combines the density of containers with the manageability of virtual machines.» 
  15. «Live Migration in LXD». Ubuntu Insights Web site. 
  16. In progress: Works on non-systemd OS[15]
  17. «I/O priorities for containers». OpenVZ Virtuozzo Containers Wiki. 
  18. Available since Linux kernel 2.6.18-028stable021. Implementation is based on CFQ disk I/O scheduler, but it is a two-level schema, so I/O priority is not per-process, but rather per-container.[17]
  19. a b Each container can have its own IP addresses, firewall rules, routing tables and so on. Three different networking schemes are possible: route-based, bridge-based, and assigning a real network device (NIC) to a container.
  20. «Docker inside CT». 
  21. Docker containers can run inside OpenVZ containers.[20]
  22. «Container». OpenVZ Virtuozzo Containers Wiki. 
  23. Each container may have root access without possibly affecting other containers.[22]
  24. «Initial public prerelease of Virtuozzo (named ASPcomplete at that time)». 
  25. Available since version 4.0, January 2008.
  26. «Parallels Virtuozzo Now Provides Native Support for Docker». 
  27. Docker containers can run inside Virtuozzo containers.[26]
  28. Pijewski, Bill. «Our ZFS I/O Throttle». 
  29. Yes with illumos[28]
  30. See OpenSolaris Network Virtualization and Resource Control for more details.
  31. Network Virtualization and Resource Control (Crossbow) FAQ
  32. «Managing Network Virtualization and Network Resources in Oracle® Solaris 11.2». 
  33. Only when top level is a KVM zone (illumos) or a kz zone (Oracle).
  34. Starting in Solaris 11.3 Beta, Solaris Kernel Zones may use live migration.
  35. Cold migration (shutdown-move-restart) is implemented.
  36. Oracle Solaris 11.1 Administration, Oracle Solaris Zones, Oracle Solaris 10 Zones and Resource Management E29024.pdf, pp. 356–360. Available within an archive.
  37. Non-global zones are restricted so they may not affect other zones via a capability-limiting approach. The global zone may administer the non-global zones.[36]
  38. «Contain your enthusiasm - Part Two: Jails, Zones, OpenVZ, and LXC». «Jails were first introduced in FreeBSD 4.0 in 2000». 
  39. Check the "allow.quotas" option and the "Jails and File Systems" section on the FreeBSD jail man page for details.
  40. «Hierarchical_Resource_Limits - FreeBSD Wiki». Wiki.freebsd.org. 27 de octubre de 2012. Consultado el 15 de enero de 2014. 
  41. «Implementing a Clonable Network Stack in the FreeBSD Kernel». usenix.org. 13 de junio de 2003. 
  42. «VPS for FreeBSD». Consultado el 20 de febrero de 2016. 
  43. «[Announcement] VPS // OS Virtualization // alpha release». Consultado el 20 de febrero de 2016. 
  44. «3.5. Limiting your program's environment». Freebsd.org. Consultado el 15 de enero de 2014. 
  45. «IBM Fix pack information for: WPAR Network Isolation - United States». ibm.com. 
  46. Available since TL 02.[45]
  47. Live Application Mobility in AIX 6.1
  48. Yes with logical volumes.
  49. a b c d https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--property=
  50. a b c d https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups