Este artículo necesita citas adicionales para su verificación . ( noviembre de 2020 ) |
La virtualización a nivel de SO es un paradigma de virtualización del sistema operativo (SO) en el que el núcleo permite la existencia de múltiples instancias de espacio de usuario aisladas , incluidos contenedores ( LXC , Solaris Containers , AIX WPARs , HP-UX SRP Containers, Docker , Podman ), zonas ( Solaris Containers ), servidores privados virtuales ( OpenVZ ), particiones , entornos virtuales ( VEs ), núcleos virtuales ( DragonFly BSD ) y cárceles ( FreeBSD jail y chroot ). [1] Dichas instancias pueden parecer computadoras reales desde el punto de vista de los programas que se ejecutan en ellas. Un programa de computadora que se ejecuta en un sistema operativo ordinario puede ver todos los recursos (dispositivos conectados, archivos y carpetas, recursos compartidos de red , potencia de CPU, capacidades de hardware cuantificables) de esa computadora. Los programas que se ejecutan dentro de un contenedor solo pueden ver el contenido del contenedor y los dispositivos asignados al contenedor.
En sistemas operativos tipo Unix , esta característica puede verse como una implementación avanzada del mecanismo chroot estándar , que cambia la carpeta raíz aparente para el proceso en ejecución actual y sus hijos. Además de los mecanismos de aislamiento, el núcleo a menudo proporciona funciones de administración de recursos para limitar el impacto de las actividades de un contenedor en otros contenedores. Todos los contenedores de Linux se basan en los mecanismos de virtualización, aislamiento y administración de recursos proporcionados por el núcleo de Linux , en particular los espacios de nombres y cgroups de Linux . [2]
Aunque la palabra contenedor se refiere más comúnmente a la virtualización a nivel de sistema operativo, a veces se utiliza para referirse a máquinas virtuales más completas que operan en distintos grados de concierto con el sistema operativo host, [ cita requerida ] como los contenedores Hyper-V de Microsoft . [ cita requerida ] Para obtener una descripción general de la virtualización desde 1960, consulte Cronología de las tecnologías de virtualización .
En los sistemas operativos comunes de las computadoras personales, un programa informático puede ver (aunque no pueda acceder a) todos los recursos del sistema. Entre ellos se incluyen:
El sistema operativo puede permitir o denegar el acceso a dichos recursos en función de qué programa los solicita y de la cuenta de usuario en el contexto en el que se ejecuta. El sistema operativo también puede ocultar dichos recursos, de modo que cuando el programa informático los enumera, no aparecen en los resultados de la enumeración. Sin embargo, desde un punto de vista de programación, el programa informático ha interactuado con esos recursos y el sistema operativo ha gestionado un acto de interacción.
Con la virtualización de sistemas operativos, o contenedorización, es posible ejecutar programas dentro de contenedores, a los que se asignan solo partes de estos recursos. Un programa que espera ver todo el equipo, una vez que se ejecuta dentro de un contenedor, solo puede ver los recursos asignados y cree que son todos los que están disponibles. Se pueden crear varios contenedores en cada sistema operativo, a cada uno de los cuales se asigna un subconjunto de los recursos del equipo. Cada contenedor puede contener cualquier cantidad de programas de computadora. Estos programas pueden ejecutarse simultáneamente o por separado, e incluso pueden interactuar entre sí.
La contenerización tiene similitudes con la virtualización de aplicaciones : en esta última, solo se coloca un programa de computadora en un contenedor aislado y el aislamiento se aplica solo al sistema de archivos.
La virtualización a nivel de sistema operativo se utiliza habitualmente en entornos de alojamiento virtual , donde resulta útil para asignar de forma segura recursos de hardware finitos entre una gran cantidad de usuarios que desconfían entre sí. Los administradores de sistemas también pueden utilizarla para consolidar el hardware del servidor al trasladar servicios de hosts separados a contenedores en un servidor.
Otros escenarios típicos incluyen la separación de varios programas en contenedores separados para mejorar la seguridad, la independencia del hardware y agregar funciones de administración de recursos. [3] Sin embargo, la seguridad mejorada que proporciona el uso de un mecanismo chroot no es perfecta. [4] Las implementaciones de virtualización a nivel de sistema operativo capaces de realizar migraciones en vivo también se pueden utilizar para equilibrar la carga dinámica de contenedores entre nodos en un clúster.
La virtualización a nivel de sistema operativo generalmente impone menos sobrecarga que la virtualización completa porque los programas en particiones virtuales a nivel de sistema operativo usan la interfaz de llamada de sistema normal del sistema operativo y no necesitan estar sujetos a emulación o ejecutarse en una máquina virtual intermedia , como es el caso de la virtualización completa (como VMware ESXi , QEMU o Hyper-V ) y la paravirtualización (como Xen o User-mode Linux ). Esta forma de virtualización tampoco requiere soporte de hardware para un rendimiento eficiente.
La virtualización a nivel de sistema operativo no es tan flexible como otros enfoques de virtualización, ya que no puede alojar un sistema operativo invitado diferente del anfitrión, o un kernel invitado diferente. Por ejemplo, con Linux , diferentes distribuciones están bien, pero otros sistemas operativos como Windows no se pueden alojar. Los sistemas operativos que utilizan sistemáticas de entrada variable están sujetos a limitaciones dentro de la arquitectura virtualizada. Los métodos de adaptación que incluyen análisis de retransmisión de servidor en la nube mantienen el entorno virtual a nivel de sistema operativo dentro de estas aplicaciones. [5]
Solaris supera parcialmente la limitación descrita anteriormente con su característica de zonas de marca , que proporciona la capacidad de ejecutar un entorno dentro de un contenedor que emula una versión anterior de Solaris 8 o 9 en un host Solaris 10. Las zonas de marca Linux (conocidas como zonas de marca "lx") también están disponibles en sistemas Solaris basados en x86 , lo que proporciona un espacio de usuario Linux completo y soporte para la ejecución de aplicaciones Linux; además, Solaris proporciona las utilidades necesarias para instalar distribuciones Linux Red Hat Enterprise Linux 3.x o CentOS 3.x dentro de las zonas "lx". [6] [7] Sin embargo, en 2010 las zonas de marca Linux se eliminaron de Solaris; en 2014 se reintrodujeron en Illumos , que es la bifurcación de Solaris de código abierto , que admite kernels Linux de 32 bits . [8]
Algunas implementaciones proporcionan mecanismos de copia en escritura (CoW) a nivel de archivo. (Lo más común es que se comparta un sistema de archivos estándar entre particiones y las particiones que modifican los archivos creen automáticamente sus propias copias). Esto es más fácil de respaldar, más eficiente en términos de espacio y más simple de almacenar en caché que los esquemas de copia en escritura a nivel de bloque comunes en los virtualizadores de sistema completo. Sin embargo, los virtualizadores de sistema completo pueden trabajar con sistemas de archivos no nativos y crear y revertir instantáneas de todo el estado del sistema.
Mecanismo | Sistema operativo | Licencia | Desarrollado activamente desde o entre | Características | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Aislamiento del sistema de archivos | Copiar en escritura | Cuotas de disco | Limitación de velocidad de E/S | Límites de memoria | Cuotas de CPU | Aislamiento de red | Virtualización anidada | Puntos de control de particiones y migración en vivo | Aislamiento de privilegios de root | ||||
enjambre | La mayoría de los sistemas operativos similares a UNIX | Varía según el sistema operativo | 1982 | Parcial [a] | No | No | No | No | No | No | Sí | No | No |
Estibador | Linux , [10] Windows x64 [11] macOS [12] | Licencia Apache 2.0 | 2013 | Sí | Sí | No directamente | Sí (desde 1.10) | Sí | Sí | Sí | Sí | Sólo en modo experimental con CRIU [1] | Sí (desde 1.10) |
Linux-VServer (contexto de seguridad) | Linux , servidor Windows 2016 | Licencia Pública General de GNU versión 2 | 2001 | Sí | Sí | Sí | Sí [b] | Sí | Sí | Parcial [c] | ? | No | Parcial [d] |
iluminar | Linux | Licencia Apache 2.0 | 2013–2015 | Sí | Sí | Sí | Sí [b] | Sí | Sí | Parcial [c] | ? | No | Parcial [d] |
Código LXC | Linux | Licencia Pública General de GNU versión 2 | 2008 | Sí [14] | Sí | Parcial [e] | Parcial [f] | Sí | Sí | Sí | Sí | Sí | Sí [14] |
Singularidad | Linux | Licencia BSD | 2015 [15] | Sí [16] | Sí | Sí | No | No | No | No | No | No | Sí [17] |
VZ abierto | Linux | Licencia Pública General de GNU versión 2 | 2005 | Sí | Sí [18] | Sí | Sí [g] | Sí | Sí | Sí [h] | Parcial [i] | Sí | Sí [j] |
Virtuoso | Linux , ventanas | Software de prueba | 2000 [22] | Sí | Sí | Sí | Sí [k] | Sí | Sí | Sí [h] | Parcial [l] | Sí | Sí |
Contenedores Solaris (Zonas) | ilumos ( OpenSolaris ), Solaris | CDDL , propiedad exclusiva | 2004 | Sí | Sí (ZFS) | Sí | Parcial [m] | Sí | Sí | Sí [n] [25] [26] | Parcial [o] | Parcial [p] [q] | Sí [r] |
Cárcel de FreeBSD | FreeBSD , DragonFlyBSD | Licencia BSD | 2000 [28] | Sí | Sí (ZFS) | Sí [s] | Sí | Sí [29] | Sí | Sí [30] | Sí | Parcial [31] [32] | Sí [33] |
núcleo virtual | Libélula BSD | Licencia BSD | 2006 [34] | Sí [35] | Sí [35] | — | ? | Sí [36] | Sí [36] | Sí [37] | ? | ? | Sí |
cárcel del sistema | OpenBSD , NetBSD | Licencia BSD | 2006–2009 | Sí | No | No | No | No | No | Sí | No | No | ? |
WPAR | AIX | Software comercial propietario | 2007 | Sí | No | Sí | Sí | Sí | Sí | Sí [t] | No | Sí [39] | ? |
Cuentas virtuales iCore | Windows XP | Software gratuito | 2008 | Sí | No | Sí | No | No | No | No | ? | No | ? |
Caja de arena | Ventanas | Licencia Pública General de GNU versión 3 | 2004 | Sí | Sí | Parcial | No | No | No | Parcial | No | No | Sí |
sistemad-nspawn | Linux | Licencia GNU LGPLv2.1+ | 2010 | Sí | Sí | Sí [40] [41] | Sí [40] [41] | Sí [40] [41] | Sí [40] [41] | Sí | ? | ? | Sí |
Turbo | Ventanas | Freemium | 2012 | Sí | No | No | No | No | No | Sí | No | No | Sí |
rkt ( cohete ) | Linux | Licencia Apache 2.0 | 2014 [42] –2018 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | ? | ? | Sí |
Los contenedores de Linux no enumerados anteriormente incluyen:
Existen muchos otros sistemas de virtualización a nivel de SO como: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers, entre otros.
LXC ahora tiene soporte para espacios de nombres de usuario. [...] LXC ya no se ejecuta como root, por lo que incluso si un atacante logra escapar del contenedor, se encontrará con los privilegios de un usuario normal en el host.
Las cárceles se introdujeron por primera vez en FreeBSD 4.0 en 2000
la imagen del disco como copia en escritura.