Articulo de referencia

Virtualización a nivel de sistema operativo

La virtualización a nivel de sistema operativo es un paradigma de virtualización de sistemas operativos (SO) en el que el núcleo permite la existencia de múltiples instancias ai...

La virtualización a nivel de sistema operativo es un paradigma de virtualización de sistemas operativos (SO) en el que el núcleo permite la existencia de múltiples instancias aisladas de espacio de usuario , incluyendo contenedores ( LXC , Solaris Containers , AIX WPARs , HP-UX SRP Containers, Docker , Podman , Guix ), zonas ( Solaris Containers ), servidores privados virtuales ( OpenVZ ), particiones , entornos virtuales ( VE ), núcleos virtuales ( DragonFly BSD ) y jaulas ( jail y chroot de FreeBSD ). [ 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 los sistemas operativos tipo Unix , esta característica puede considerarse una implementación avanzada del mecanismo chroot estándar , que cambia la carpeta raíz aparente para el proceso en ejecución y sus procesos hijos. Además de los mecanismos de aislamiento, el kernel suele proporcionar funciones de gestión de recursos para limitar el impacto de las actividades de un contenedor en otros contenedores. Los contenedores de Linux se basan en los mecanismos de virtualización, aislamiento y gestión de recursos que proporciona el kernel de Linux , en particular los espacios de nombres de Linux y los cgroups . [ 2 ]

Aunque el término «contenedor» se refiere más comúnmente a la virtualización a nivel de sistema operativo, a veces también se utiliza para referirse a máquinas virtuales más completas que operan en diversos grados de sincronía con el sistema operativo anfitrión, como los contenedores Hyper-V de Microsoft . Para obtener una visión general de la virtualización desde 1960, consulte la Cronología de las tecnologías de virtualización .

Operación

En los sistemas operativos comunes para ordenadores personales, un programa informático puede ver (aunque no necesariamente pueda acceder a) todos los recursos del sistema. Estos incluyen:

El sistema operativo puede permitir o denegar el acceso a dichos recursos según el programa que los solicite y la cuenta de usuario en el contexto en el que se ejecuta. El sistema operativo también puede ocultar esos recursos, de modo que cuando el programa los enumere, no aparezcan en los resultados de la enumeración. No obstante, desde el punto de vista de la programación, el programa ha interactuado con esos recursos y el sistema operativo ha gestionado dicha interacción.

Mediante la virtualización del sistema operativo, o contenerización, es posible ejecutar programas dentro de contenedores, a los que solo se les asigna una parte de los recursos. Un programa que espera acceder a todo el equipo, una vez ejecutado dentro de un contenedor, solo puede ver los recursos asignados y cree que son los únicos disponibles. Se pueden crear varios contenedores en cada sistema operativo, a cada uno de los cuales se le asigna un subconjunto de los recursos del equipo. Cada contenedor puede contener cualquier número de programas. Estos programas pueden ejecutarse simultáneamente o por separado, e incluso interactuar entre sí.

La contenerización tiene similitudes con la virtualización de aplicaciones : en esta última, solo se coloca un programa informático en un contenedor aislado y el aislamiento se aplica únicamente 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 limitados entre un gran número de usuarios que no confían entre sí. Los administradores de sistemas también pueden utilizarla para consolidar el hardware de los servidores, trasladando servicios de distintos hosts a contenedores en un mismo servidor.

La virtualización a nivel de sistema operativo también se puede utilizar para ejecutar software creado para una determinada distribución de Linux en otra distribución; un ejemplo es Distrobox . [ 3 ]

Otros escenarios típicos incluyen separar varios programas en contenedores separados para mejorar la seguridad, la independencia del hardware y las funciones adicionales de administración de recursos. [ 4 ] Sin embargo, la seguridad mejorada que proporciona el uso de un mecanismo chroot no es perfecta. [ 5 ] Las implementaciones de virtualización a nivel de sistema operativo capaces de migración en vivo también se pueden usar para el equilibrio de carga dinámico de contenedores entre nodos en un clúster.

Arriba

La virtualización a nivel de sistema operativo suele generar menos sobrecarga que la virtualización completa , ya que los programas en particiones virtuales a nivel de sistema operativo utilizan la interfaz de llamadas al sistema normal del sistema operativo y no necesitan ser emulados ni ejecutados en una máquina virtual intermedia , como ocurre con la virtualización completa (como VMware ESXi , QEMU o Hyper-V ) y la paravirtualización (como Xen o Linux en modo 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 al del anfitrión, ni un núcleo invitado diferente. Por ejemplo, con Linux , se admiten diferentes distribuciones, pero no se pueden alojar otros sistemas operativos como Windows. Los sistemas operativos que utilizan sistemas de entrada variable están sujetos a limitaciones dentro de la arquitectura virtualizada. Los métodos de adaptación, incluido el análisis de retransmisión de servidores en la nube, mantienen el entorno virtual a nivel de sistema operativo dentro de estas aplicaciones. [ 6 ]

Solaris supera parcialmente la limitación descrita anteriormente con su función 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 (denominadas zonas de marca "lx") también están disponibles en sistemas Solaris basados ​​en x86 , proporcionando un espacio de usuario Linux completo y soporte para la ejecución de aplicaciones Linux; además, Solaris proporciona las utilidades necesarias para instalar las distribuciones Linux Red Hat Enterprise Linux  3.x o CentOS  3.x dentro de las zonas "lx". [ 7 ] [ 8 ] 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 núcleos Linux de 32 bits . [ 9 ]

Almacenamiento

Algunas implementaciones ofrecen 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 aquellas que modifican los archivos crean automáticamente sus propias copias). Esto facilita las copias de seguridad, optimiza el espacio y simplifica el almacenamiento en caché en comparación con 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 restaurar instantáneas del estado completo del sistema.

Implementaciones

Implementaciones mantenidas/desarrolladas activamente

Implementaciones históricas/obsoletas

Véase también

Notas

  1. El usuario root puede escapar fácilmente de chroot. Chroot nunca fue concebido para ser utilizado como mecanismo de seguridad. [ 10 ]
  2. Para los controladores de almacenamiento btrfs, overlay2, windowsfilter y zfs. [ 14 ]
  3. Es posible establecer cuotas de disco por contenedor utilizando 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 subvolúmenes btrfs.
  4. Se admite la limitación de la velocidad de E/S cuando se utiliza Btrfs .
  5. Disponible desde el kernel de Linux 2.6.18-028stable021. La implementación se basa en el planificador 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. [ 24 ]
  6. 1 2 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 asignación de un dispositivo de red real ( NIC ) a un contenedor.
  7. Los contenedores Docker pueden ejecutarse dentro de contenedores OpenVZ. [ 25 ]
  8. Cada contenedor puede tener acceso de root sin afectar posiblemente a otros contenedores. [ 26 ]
  9. Disponible desde la versión 4.0, enero de 2008.
  10. Los contenedores Docker pueden ejecutarse dentro de contenedores Virtuozzo. [ 28 ]
  11. Sí con illumos [ 29 ]
  12. Consulte Virtualización de red y control de recursos de Solaris para obtener más detalles.
  13. Solo cuando el nivel superior sea una zona KVM (illumos) o una zona kz (Oracle).
  14. A partir de Solaris 11.3 Beta, las zonas del kernel de Solaris pueden utilizar la migración en vivo.
  15. Se ha implementado la migración en frío (apagado-traslado-reinicio).
  16. Las zonas no globales están restringidas para que no puedan afectar a otras zonas mediante un enfoque de limitación de capacidades. La zona global puede administrar las zonas no globales. [ 32 ]
  17. Consulte la opción "allow.quotas" y la sección "Jails and file systems" en la página man de FreeBSD jail para obtener más detalles.
  18. Disponible desde TL 02. [ 43 ]
  19. Para KVM, el contenedor padre requiere acceso de lectura/escritura a /dev/kvm.
  20. 1 2 Al usar el planificador CFQ , hay una cola separada por cada invitado.
  21. 1 2 La creación de redes se basa en el aislamiento, no en la virtualización.
  22. 1 2 Un total de 14 capacidades de usuario se consideran seguras dentro de un contenedor. El resto no se puede otorgar a los procesos dentro de ese contenedor sin permitir que ese proceso interfiera potencialmente con cosas fuera de ese contenedor. [ 47 ]

Referencias

  1. Hogg, Scott (26 de mayo de 2014). "Contenedores de software: se usan con más frecuencia de lo que la mayoría cree" . Network World . Network World, Inc. Recuperado el 9 de julio de 2015. Hay muchos otros sistemas de virtualización a nivel de sistema operativo, como: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPAR), HP-UX Containers (SRP), Solaris Containers, entre otros.
  2. Rami, Rosen. "Espacios de nombres y Cgroups, la base de los contenedores Linux" (PDF) . Consultado el 18 de agosto de 2016 .
  3. Brockmeier, Joe (10 de diciembre de 2025). "Combina distribuciones de Linux con Distrobox" . LWN.net . Consultado el 17 de enero de 2026 .
  4. "Implementaciones seguras de Bottlerocket en Amazon EKS con KubeArmor | Contenedores" . aws.amazon.com . 2022-10-20 . Consultado el 2023-06-20 .
  5. Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Dominando la seguridad de FreeBSD y OpenBSD . Serie O'Reilly. O'Reilly Media, Inc. pág. 59. ISBN  0-596-00626-8.
  6. Huang, D. (2015). "Experiencias en el uso de virtualización a nivel de sistema operativo para E/S de bloques". Actas del 10.º Taller de Almacenamiento de Datos Paralelos (PDF) . págs. 13–18 . doi : 10.1145/2834976.2834982 . ISBN  978-1-4503-4008-3. S2CID 3867190 . 
  7. "Guía de administración del sistema: Contenedores de Oracle Solaris: administración de recursos 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 .
  8. "Guía de administración del sistema: Contenedores Oracle Solaris: administración de recursos y zonas 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 .
  9. Bryan Cantrill (28 de septiembre de 2014). "¡El sueño sigue vivo! Ejecutando contenedores Linux en un kernel illumos" . slideshare.net . Consultado el 10 de octubre de 2014 .
  10. "3.5. Limitar el entorno de su programa" . freebsd.org .
  11. "Docker deja de usar LXC como entorno de ejecución predeterminado" . InfoQ .
  12. "Instalar Docker Desktop en Windows | Documentación de Docker" . Docker . 9 de febrero de 2023.
  13. "Primeros pasos con Docker Desktop para Mac" . Documentación de Docker . 6 de diciembre de 2019.
  14. "docker container run - Configurar opciones del controlador de almacenamiento por contenedor (--storage-opt)" . docs.docker.com . 22 de febrero de 2024.
  15. https://criu.org/Docker
  16. "podman-volume-create — Documentación de Podman" . docs.podman.io . Consultado el 19 de octubre de 2025 .
  17. "podman-container-checkpoint — Documentación de Podman" . docs.podman.io . Consultado el 19 de octubre de 2025 .
  18. 1 2 Graber, Stéphane (1 de enero de 2014). "LXC 1.0: Características de seguridad [ 6/10 ] " . Recuperado 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ía con los privilegios de un usuario normal en el host.
  19. "Anuncio de la comunidad | Apptainer - Contenedores portátiles y reproducibles" . apptainer.org . 30 de noviembre de 2021. Consultado el 19 de octubre de 2025 .
  20. " Sylabs lleva los contenedores Singularity a la computación de alto rendimiento comercial | Los 500 mejores sitios de supercomputación" . www.top500.org
  21. "SIF — Conteniendo sus contenedores" . www.sylabs.io . 14 de marzo de 2018.
  22. Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (11 de mayo de 2017). "Singularity: Scientific containers for mobility of compute" . PLOS ONE . 12 (5) e0177459. Bibcode : 2017PLoSO..1277459K . doi : 10.1371/journal.pone.0177459 . PMC 5426675. PMID 28494014 .  
  23. Brónnikov, Serguéi. "Comparación en la página wiki de OpenVZ" . Wiki OpenVZ . AbiertoVZ . Consultado el 28 de diciembre de 2018 .
  24. "Prioridades de E/S para contenedores" . Wiki de contenedores OpenVZ Virtuozzo .
  25. "Docker dentro de CT" .
  26. "Contenedor" . Wiki de contenedores de OpenVZ Virtuozzo .
  27. "Primera versión preliminar pública de Virtuozzo (llamado ASPcomplete en ese momento)" .
  28. "Parallels Virtuozzo ahora ofrece soporte nativo para Docker" . Archivado del original el 13 de mayo de 2016. Consultado el 3 de junio de 2015 .
  29. Pijewski, Bill (1 de marzo de 2011). "Nuestro limitador de E/S de ZFS" . wdp.dtrace.org .
  30. Virtualización de red y control de recursos (Crossbow) Preguntas frecuentes Archivado el 1 de junio de 2008 en Wayback Machine
  31. "Gestión de la virtualización de red y los recursos de red en Oracle® Solaris 11.4" . docs.oracle.com .
  32. 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 en un archivo .
  33. "Contenga su entusiasmo - Segunda parte: Jails, zonas, OpenVZ y LXC" . Los jails se introdujeron por primera vez en FreeBSD 4.0 en el año 2000.
  34. "Límites jerárquicos de recursos - Wiki de FreeBSD" . Wiki.freebsd.org. 27 de octubre de 2012. Consultado el 15 de enero de 2014 .
  35. Zec, Marko (13 de junio de 2003). "Implementación de una pila de red clonable en el kernel de FreeBSD" (PDF) . usenix.org.
  36. "VPS para FreeBSD" . Consultado el 20 de febrero de 2016 .
  37. " [ Anuncio ] VPS // Virtualización de SO // Versión alfa" . 31 de agosto de 2012 . Consultado el 20 de febrero de 2016 .
  38. "3.5. Limitar el entorno de su programa" . Freebsd.org . Consultado el 15 de enero de 2014 .
  39. Matthew Dillon (2006). "sys/vkernel.h" . Referencia cruzada de BSD . DragonFly BSD .
  40. 1 2 "vkd(4) — Disco del núcleo virtual" . DragonFly BSD trata la imagen del disco como copia en escritura.
  41. 1 2 Sascha Wildner (2007-01-08). "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 kernel virtual". Manual de información miscelánea de DragonFly .
  42. "vkernel, vcd, vkd, vke - arquitectura de kernel virtual" . Páginas del manual en línea de DragonFly . DragonFly BSD .
  43. "Información sobre el paquete de correcciones de IBM para: Aislamiento de red WPAR - Estados Unidos" . ibm.com . 21 de julio de 2011.
  44. "Movilidad de aplicaciones en vivo en AIX 6.1" . www.ibm.com . 3 de junio de 2008.
  45. 1 2 3 4 "systemd-nspawn" . www.freedesktop.org .
  46. 1 2 3 4 "2.3. Modificación de grupos de control Red Hat Enterprise Linux 7" . Portal de clientes de Red Hat .
  47. "Documento - Linux-VServer" . linux-vserver.org .
  48. Polvi, Alex. "CoreOS está creando un entorno de ejecución de contenedores, rkt" . Blog de CoreOS . Archivado del original el 1 de abril de 2019. Consultado el 12 de marzo de 2019 .
  • Introducción a la virtualización. Archivado el 28/11/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. Archivado el 15 de marzo de 2023 en Wayback Machine , 22 de junio de 2015, por Mathijs Jeroen Scheepers.
  • Contenedores y datos persistentes , LWN.net , 28 de mayo de 2015, por Josh Berkus
Obtenido de " https://en.wikipedia.org/w/index.php?title=OS-level_virtualization&oldid=1362916236#Implementations "