Virtualización a nivel de sistema operativo - OS-level virtualization

La virtualización a nivel de sistema operativo es un paradigma de sistema operativo en el que el kernel permite la existencia de múltiples instancias de espacio de usuario aisladas . Tales instancias, llamadas contenedores ( LXC , contenedores Solaris , Docker ), Zonas ( contenedores Solaris ), servidores privados virtuales ( OpenVZ ), particiones , entornos virtuales (VEs), kernels virtuales ( DragonFly BSD ) o cárceles ( jail FreeBSD o jail chroot ), 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 la CPU, capacidades de hardware cuantificables) de esa computadora. Sin embargo, 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 similares a 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 kernel a menudo proporciona funciones de administración de recursos para limitar el impacto de las actividades de un contenedor en otros contenedores.

El término contenedor , aunque más popularmente se refiere a sistemas de virtualización a nivel de SO, a veces se usa de manera ambigua para referirse a entornos de máquinas virtuales más completos que operan en diversos grados de concierto con el SO host, por ejemplo, los contenedores Hyper-V de Microsoft .

Operación

En los sistemas operativos ordinarios para computadoras personales, un programa de computadora puede ver (aunque no pueda acceder) todos los recursos del sistema. Incluyen:

  1. Capacidades de hardware que se pueden emplear, como la CPU y la conexión de red
  2. Datos que se pueden leer o escribir, como archivos, carpetas y recursos compartidos de red
  3. Periféricos conectados con los que puede interactuar, como cámara web , impresora, escáner o fax.

El sistema operativo puede permitir o denegar el acceso a dichos recursos en función del programa que los solicite y de la cuenta de usuario en el contexto en el que se ejecute. El sistema operativo también puede ocultar esos recursos, de modo que cuando el programa informático los enumere, no aparezcan en los resultados de la enumeración. Sin embargo, desde el punto de vista de la programación, el programa informático ha interactuado con esos recursos y el sistema operativo ha logrado un acto de interacción.

Con la virtualización del sistema operativo, o contenedorización, es posible ejecutar programas dentro de contenedores, a los que solo se asignan partes de estos recursos. Un programa que espera ver toda la computadora, una vez que se ejecuta dentro de un contenedor, solo puede ver los recursos asignados y cree que son todo lo que está disponible. Se pueden crear varios contenedores en cada sistema operativo, a cada uno de los cuales se asigna un subconjunto de los recursos de la computadora. Cada contenedor puede contener cualquier número de programas de computadora. Estos programas pueden ejecutarse al mismo tiempo o por separado, e incluso pueden interactuar entre sí.

La contenedorización tiene similitudes con la virtualización de aplicaciones : en esta última, solo un programa de computadora se coloca en un contenedor aislado y el aislamiento se aplica solo al sistema de archivos.

Usos

La virtualización a nivel de sistema operativo se usa comúnmente en entornos de alojamiento virtual , donde es útil para asignar de forma segura recursos de hardware finitos entre un gran número de usuarios que desconfían mutuamente. Los administradores del sistema también pueden usarlo para consolidar el hardware del servidor moviendo servicios en 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 funciones adicionales de administración de recursos. La seguridad mejorada proporcionada por el uso de un mecanismo chroot, sin embargo, no está cerca de ser férrea. Las implementaciones de virtualización a nivel de sistema operativo capaces de migración en vivo también se pueden utilizar para el equilibrio dinámico de carga de contenedores entre los nodos de un clúster.

Gastos generales

La virtualización a nivel del sistema operativo generalmente impone menos gastos generales que la virtualización completa porque los programas en particiones virtuales a nivel del sistema operativo utilizan la interfaz de llamada del sistema normal del sistema operativo y no necesitan ser sometidos a emulación o ejecutarse en una máquina virtual intermedia , como es el caso. caso con virtualización completa (como VMware ESXi , QEMU o Hyper-V ) y paravirtualización (como Xen o Linux en modo de usuario ). Esta forma de virtualización tampoco requiere soporte de hardware para un rendimiento eficiente.

Flexibilidad

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 host 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, incluidos los análisis de retransmisión de servidores en la nube, mantienen el entorno virtual a nivel de sistema operativo dentro de estas aplicaciones.

Solaris supera parcialmente la limitación descrita anteriormente con su función de zonas de marca , que brinda 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 con la marca Linux (denominadas zonas con la marca "lx") también están disponibles en los sistemas Solaris basados en x86 , lo que proporciona un espacio de usuario completo de Linux y soporte para la ejecución de aplicaciones Linux; Además, Solaris proporciona las utilidades necesarias para instalar distribuciones de Linux Red Hat Enterprise Linux  3.xo CentOS  3.x dentro de las zonas "lx". Sin embargo, en 2010, las zonas con la 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 de Linux de 32 bits .

Almacenamiento

Algunas implementaciones proporcionan mecanismos de copia en escritura (CoW) a nivel de archivo . (Más comúnmente, un sistema de archivos estándar se comparte entre particiones, y aquellas particiones que cambian los archivos crean automáticamente sus propias copias). Esto es más fácil de respaldar, más eficiente en espacio y más simple de almacenar en caché que la copia a nivel de bloque. -escribir esquemas comunes en virtualizadores de sistema completo. Sin embargo, los virtualizadores de todo el sistema pueden trabajar con sistemas de archivos no nativos y crear y revertir instantáneas de todo el estado del sistema.

Implementaciones

Mecanismo Sistema operativo Licencia Desarrollado activamente desde o entre Características
Aislamiento del sistema de archivos Copiar en escrito Cuotas de disco Limitación de velocidad de E / S Límites de memoria Cuotas de CPU Aislamiento de la red Virtualización anidada Puntos de control de particiones y migración en vivo Aislamiento de privilegios de root
chroot La mayoría de los sistemas operativos similares a UNIX Varía según el sistema operativo mil novecientos ochenta y dos Parcial No No No No No No No No
Estibador Linux , FreeBSD , Windows x64 (Pro, Enterprise y Education) macOS Licencia Apache 2.0 2013 No directamente (desde 1.10) Solo en modo experimental con CRIU [1] (desde 1.10)
Linux-VServer
(contexto de seguridad)
Linux , Windows Server 2016 GNU GPLv2 2001 Parcial ? No Parcial
lmctfy Linux Licencia Apache 2.0 2013-2015 Parcial ? No Parcial
LXC Linux GNU GPLv2 2008 Parcial Parcial
Singularidad Linux Licencia BSD 2015 No No No No No No
OpenVZ Linux GNU GPLv2 2005 Parcial
Virtuozzo Linux , Windows Software de prueba 2000 Parcial
Contenedores Solaris (zonas) illumos ( OpenSolaris ),
Solaris
CDDL ,
propietario
2004 Sí (ZFS) Parcial Parcial Parcial
Cárcel de FreeBSD FreeBSD , DragonFly BSD Licencia BSD 2000 Sí (ZFS) Parcial
vkernel DragonFly BSD Licencia BSD 2006 N / A ? ? ?
sysjail OpenBSD , NetBSD Licencia BSD 2006-2009 No No No No No No No ?
WPAR AIX Software propietario comercial 2007 No No ?
Cuentas virtuales iCore Windows XP Freeware 2008 No No No No No ? No ?
Sandboxie Ventanas GNU GPLv3 2004 Parcial No No No Parcial No No
systemd-nspawn Linux GNU LGPLv2.1 + 2010 ? ?
Turbo Ventanas Freemium 2012 No No No No No No No
rkt Linux Licencia Apache 2.0 2014-2018 ? ?

Ver también

Notas

Referencias

enlaces externos