Paradigma del sistema operativo que permite múltiples instancias de espacio de usuario aisladas
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 .
Operació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.
Usos
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.
Arriba
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.
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 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]
Almacenamiento
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.
Implementaciones
Los contenedores de Linux no enumerados anteriormente incluyen:
- LXD , un contenedor alternativo a LXC desarrollado por Canonical [43]
- Podman , [44] un reemplazo directo, seguro, sin raíz y listo para Kubernetes avanzado para Docker con soporte para múltiples formatos de imágenes de contenedores, incluidas imágenes OCI y Docker
- Charliecloud, un conjunto de herramientas de contenedores utilizadas en sistemas HPC [45]
- Plataforma MicroVM de Kata Containers [46]
- Bottlerocket es un sistema operativo de código abierto basado en Linux creado específicamente por Amazon Web Services para ejecutar contenedores en máquinas virtuales o hosts físicos [47].
- Azure Linux es una distribución de Linux de código abierto diseñada específicamente por Microsoft Azure y similar a Fedora CoreOS.
Véase también
Notas
- ^ El usuario root puede escapar fácilmente del entorno chroot. Nunca se pensó que el entorno chroot se utilizara como mecanismo de seguridad. [9]
- ^ ab Al usar el programador CFQ , hay una cola separada por invitado.
- ^ La red se basa en el aislamiento, no en la virtualización.
- ^ ab Se considera que un total de 14 capacidades de usuario son seguras dentro de un contenedor. El resto no se puede conceder a procesos dentro de ese contenedor sin permitir que ese proceso interfiera potencialmente con cosas fuera de ese contenedor. [13]
- ^ Las cuotas de disco por contenedor son posibles cuando se utilizan particiones separadas para cada contenedor con la ayuda de LVM , o cuando el sistema de archivos del host subyacente es btrfs, en cuyo caso se utilizan automáticamente los subvolúmenes btrfs.
- ^ Se admite la limitación de la velocidad de E/S cuando se utiliza Btrfs .
- ^ Disponible desde el kernel de Linux 2.6.18-028stable021. La implementación se basa en el programador de E/S de disco CFQ, pero es un esquema de dos niveles, por lo que la prioridad de E/S no es por proceso, sino por contenedor. [19]
- ^ ab Cada contenedor puede tener sus propias direcciones IP, reglas de firewall, tablas de enrutamiento, etc. Son posibles tres esquemas de red diferentes: basado en rutas, basado en puentes y asignando un dispositivo de red real ( NIC ) a un contenedor.
- ^ Los contenedores Docker pueden ejecutarse dentro de contenedores OpenVZ. [20]
- ^ Cada contenedor puede tener acceso raíz sin afectar a otros contenedores. [21]
- ^ Disponible desde la versión 4.0, enero de 2008.
- ^ Los contenedores Docker pueden ejecutarse dentro de los contenedores Virtuozzo. [23]
- ^ Sí con illumos [24]
- ^ Consulte Virtualización de red y control de recursos de Solaris para obtener más detalles.
- ^ Solo cuando el nivel superior es una zona KVM (illumos) o una zona kz (Oracle).
- ^ A partir de Solaris 11.3 Beta, las zonas del kernel de Solaris pueden usar la migración en vivo.
- ^ Se implementa la migración en frío (apagado-movimiento-reinicio).
- ^ Las zonas no globales están restringidas, por lo que no pueden afectar a otras zonas mediante un enfoque de limitación de capacidad. La zona global puede administrar las zonas no globales. [27]
- ^ Consulte la opción "allow.quotas" y la sección "Cárceles y sistemas de archivos" en la página del manual de cárceles de FreeBSD para obtener más detalles.
- ^ Disponible desde TL 02. [38]
Referencias
- ^ Hogg, Scott (26 de mayo de 2014). "Contenedores de software: se utilizan con más frecuencia de lo que la mayoría cree". Network World . Network world, Inc. Consultado el 9 de julio de 2015.
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.
- ^ Rami, Rosen. «Namespaces and Cgroups, the foundation of Linux Containers» (PDF) . Consultado el 18 de agosto de 2016 .
- ^ "Implementaciones seguras de Bottlerocket en Amazon EKS con KubeArmor | Contenedores". aws.amazon.com . 2022-10-20 . Consultado el 2023-06-20 .
- ^ Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Dominando la seguridad de FreeBSD y OpenBSD. Serie O'Reilly. O'Reilly Media, Inc. p. 59. ISBN 0596006268.
- ^ Huang, D. (2015). "Experiencias en el uso de la virtualización a nivel de sistema operativo para E/S de bloque". Actas del 10.º Taller de almacenamiento de datos en paralelo . págs. 13-18. doi :10.1145/2834976.2834982. ISBN 9781450340083. Número de identificación del sujeto 3867190.
- ^ "Guía de administración del sistema: gestión de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris, Capítulo 16: Introducción a las zonas de Solaris". Oracle Corporation . 2010 . Consultado el 2 de septiembre de 2014 .
- ^ "Guía de administración del sistema: gestión de recursos y contenedores de Oracle Solaris y zonas de Oracle Solaris, capítulo 31: Acerca de las zonas de marca y la zona de marca Linux". Oracle Corporation . 2010 . Consultado el 2 de septiembre de 2014 .
- ^ Bryan Cantrill (28 de septiembre de 2014). "¡El sueño está vivo! Ejecutar contenedores Linux en un núcleo illumos". slideshare.net . Consultado el 10 de octubre de 2014 .
- ^ "3.5. Limitar el entorno de su programa". freebsd.org .
- ^ "Docker abandona LXC como entorno de ejecución predeterminado". InfoQ .
- ^ "Instalar Docker Desktop en Windows | Documentación de Docker". Docker . 9 de febrero de 2023.
- ^ "Comienza a usar Docker Desktop para Mac". Documentación de Docker . 6 de diciembre de 2019.
- ^ "Artículo - Linux-VServer". linux-vserver.org .
- ^ ab Graber, Stéphane (1 de enero de 2014). "LXC 1.0: Funciones de seguridad [6/10]" . Consultado el 12 de febrero de 2014 .
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.
- ^ "Sylabs lleva los contenedores Singularity al HPC comercial | Los 500 mejores sitios de supercomputadoras". www.top500.org .
- ^ "SIF — Conteniendo sus contenedores". www.sylabs.io . 14 de marzo de 2018.
- ^ Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (11 de mayo de 2017). "Singularidad: contenedores científicos para la movilidad de la computación". PLOS ONE . 12 (5): e0177459. Bibcode :2017PLoSO..1277459K. doi : 10.1371/journal.pone.0177459 . PMC 5426675 . PMID 28494014.
- ^ Brónnikov, Sergey. "Comparación en la página wiki de OpenVZ". Wiki OpenVZ . AbiertoVZ . Consultado el 28 de diciembre de 2018 .
- ^ "Prioridades de E/S para contenedores". Wiki de contenedores Virtuozzo de OpenVZ .
- ^ "Docker dentro de CT".
- ^ "Contenedor". Wiki de contenedores Virtuozzo de OpenVZ .
- ^ "Lanzamiento público inicial de Virtuozzo (llamado ASPcomplete en ese momento)".
- ^ "Parallels Virtuozzo ahora ofrece soporte nativo para Docker".
- ^ Pijewski, Bill. "Nuestro acelerador de E/S ZFS".
- ^ Preguntas frecuentes sobre virtualización de redes y control de recursos (Crossbow) Archivado el 1 de junio de 2008 en Wayback Machine
- ^ "Administración de la virtualización de red y los recursos de red en Oracle® Solaris 11.2". docs.oracle.com .
- ^ Administración de Oracle Solaris 11.1, Zonas de Oracle Solaris, Zonas de Oracle Solaris 10 y gestión de recursos E29024.pdf, págs. 356–360. Disponible dentro de un archivo.
- ^ "Contenga su entusiasmo - Segunda parte: Cárceles, zonas, OpenVZ y LXC".
Las cárceles se introdujeron por primera vez en FreeBSD 4.0 en 2000
- ^ "Límites de recursos jerárquicos - Wiki de FreeBSD". Wiki.freebsd.org. 2012-10-27 . Consultado el 2014-01-15 .
- ^ "Implementación de una pila de red clonable en el núcleo FreeBSD" (PDF) . usenix.org. 13 de junio de 2003.
- ^ "VPS para FreeBSD" . Consultado el 20 de febrero de 2016 .
- ^ "[Anuncio] VPS // Virtualización de SO // Versión alfa". 31 de agosto de 2012. Consultado el 20 de febrero de 2016 .
- ^ "3.5. Limitación del entorno de su programa". Freebsd.org . Consultado el 15 de enero de 2014 .
- ^ Matthew Dillon (2006). "sys/vkernel.h". Referencia cruzada de BSD . DragonFly BSD .
- ^ ab "vkd(4) — Disco de núcleo virtual". DragonFly BSD trata
la imagen del disco como copia en escritura.
- ^ por Sascha Wildner (8 de enero de 2007). "vkernel, vcd, vkd, vke: arquitectura de núcleo virtual". Manual de información miscelánea de DragonFly . DragonFly BSD .
- "vkernel, vcd, vkd, vke - arquitectura del núcleo virtual". Manual de información miscelánea de DragonFly.
- ^ "vkernel, vcd, vkd, vke - arquitectura de núcleo virtual". Páginas del manual en línea de DragonFly . DragonFly BSD .
- ^ "Información del paquete de correcciones de IBM para: aislamiento de red WPAR - Estados Unidos". ibm.com . 21 de julio de 2011.
- ^ "Movilidad de aplicaciones en vivo en AIX 6.1". www.ibm.com . 3 de junio de 2008.
- ^ abcd "systemd-nspawn". www.freedesktop.org .
- ^ abcd "2.3. Modificación de grupos de control en Red Hat Enterprise Linux 7". Portal de clientes de Red Hat .
- ^ Polvi, Alex. "CoreOS está construyendo un entorno de ejecución de contenedores, rkt". Blog de CoreOS . Archivado desde el original el 2019-04-01 . Consultado el 12 de marzo de 2019 .
- ^ "LXD". linuxcontainers.org . Consultado el 11 de febrero de 2021 .
- ^ Contenedores sin raíz con Podman y fuse-overlayfs, taller del CERN, 2019-06-04
- ^ "Descripción general: documentación de Charliecloud 0.25" . Consultado el 4 de octubre de 2020 .
- ^ "Inicio". katacontainers.io .
- ^ "Bottlerocket es un sistema operativo basado en Linux diseñado específicamente para ejecutar contenedores".
Enlaces externos
- Una introducción a la virtualización Archivado el 28 de noviembre de 2019 en Wayback Machine
- Una breve introducción a tres técnicas de virtualización diferentes
- Virtualización y contenerización de la infraestructura de aplicaciones: una comparación, 22 de junio de 2015, por Mathijs Jeroen Scheepers
- Contenedores y datos persistentes, LWN.net , 28 de mayo de 2015, por Josh Berkus