stringtranslate.com

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 kernel permite la existencia de múltiples instancias aisladas de espacio de usuario , llamadas contenedores ( LXC , contenedores Solaris , AIX WPARs , contenedores HP-UX SRP, Docker , Podman ), zonas . ( Contenedores Solaris ), servidores privados virtuales ( OpenVZ ), particiones , entornos virtuales (VE), núcleos virtuales ( DragonFly BSD ) o cárceles ( FreeBSD jail o chroot jail ). [1] Estas instancias pueden parecerse a 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 normal puede ver todos los recursos (dispositivos conectados, archivos y carpetas, recursos compartidos de red , potencia de 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 mismo.

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 kernel a menudo proporciona funciones de gestió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 gestión de recursos proporcionados por el kernel de Linux , en particular los espacios de nombres y cgroups de Linux . [2]

El término contenedor , aunque se refiere más popularmente a sistemas de virtualización a nivel de sistema operativo, a veces se utiliza de manera ambigua para referirse a entornos de máquinas virtuales más completos que operan en diversos grados de coordinación con el sistema operativo anfitrión, por ejemplo, los contenedores Hyper-V de Microsoft . Se puede encontrar una descripción más histórica de la virtualización en general desde 1960 en Timeline of virtualization development .

Operación

En los sistemas operativos comunes para computadoras personales, un programa de computadora puede ver (aunque no pueda acceder) todos los recursos del sistema. 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 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 gestionado 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 sólo se asignan partes de estos recursos. Un programa que espera ver toda la computadora, una vez ejecutado 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 le asigna un subconjunto de los recursos de la computadora. Cada contenedor puede contener cualquier número de programas informáticos. 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 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 usa comúnmente en entornos de alojamiento virtual , donde es útil para asignar de forma segura recursos de hardware finitos entre una gran cantidad de usuarios que desconfían mutuamente. Los administradores de sistemas 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 separar 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 proporcionada por el uso de un mecanismo chroot no es perfecta. [4] Las implementaciones de virtualización a nivel de sistema operativo capaces de realizar migración en vivo también se pueden utilizar para el equilibrio de carga dinámico de contenedores entre nodos de un clúster.

Gastos generales

La virtualización a nivel de sistema operativo generalmente impone menos gastos generales que la virtualización completa porque los programas en particiones virtuales a nivel de sistema operativo utilizan la interfaz de llamada al sistema normal del sistema operativo y no necesitan estar sujetos a emulación ni ejecutarse en una máquina virtual intermedia , como es el caso. caso de virtualización completa (como VMware ESXi , QEMU o Hyper-V ) y 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 del host ni un kernel invitado diferente. Por ejemplo, con Linux , están bien diferentes distribuciones, pero no se pueden alojar otros sistemas operativos como Windows. 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, incluido el análisis de retransmisión del servidor en la nube, mantienen el entorno virtual a nivel del sistema operativo dentro de estas aplicaciones. [5]

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 de marca Linux (denominadas zonas de marca "lx") también están disponibles en sistemas Solaris basados ​​en x86 , lo que proporciona un espacio de usuario de Linux completo y soporte para la ejecución de aplicaciones de Linux; Además, Solaris proporciona las utilidades necesarias para instalar distribuciones de Linux Red Hat Enterprise Linux  3.x o CentOS  3.x dentro de las zonas "lx". [6] [7] 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 , compatible con kernels de 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 un sistema de archivos estándar se comparta entre particiones, y aquellas particiones que cambian los archivos crean automáticamente sus propias copias). Esto es más fácil de realizar una copia de seguridad, ocupa menos espacio y es más sencillo de almacenar en caché que la copia a nivel de bloque. -Esquemas de escritura comunes en virtualizadores de sistemas completos. 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

Los contenedores de Linux que no figuran en la lista anterior incluyen:

Ver también

Notas

  1. ^ El usuario root puede escapar fácilmente de chroot. Nunca se suponía que Chroot fuera utilizado como mecanismo de seguridad. [9]
  2. ^ ab Al utilizar el programador CFQ , hay una cola separada por invitado.
  3. ^ ab La creación de redes se basa en el aislamiento, no en la virtualización.
  4. ^ ab Un total de 14 capacidades de usuario se consideran seguras dentro de un contenedor. Es posible que el resto no se pueda otorgar a procesos dentro de ese contenedor sin permitir que ese proceso interfiera potencialmente con cosas fuera de ese contenedor. [14]
  5. ^ Las cuotas de disco por contenedor son posibles cuando se usan particiones separadas para cada contenedor con la ayuda de LVM , o cuando el sistema de archivos del host subyacente es btrfs, en cuyo caso los subvolúmenes btrfs se usan automáticamente.
  6. ^ Se admite la limitación de la velocidad de E/S cuando se utiliza Btrfs .
  7. ^ 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. [20]
  8. ^ 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.
  9. ^ Los contenedores Docker pueden ejecutarse dentro de contenedores OpenVZ. [21]
  10. ^ Cada contenedor puede tener acceso raíz sin afectar posiblemente a otros contenedores. [22]
  11. ^ Disponible desde la versión 4.0, enero de 2008.
  12. ^ Los contenedores Docker pueden funcionar dentro de contenedores Virtuozzo. [24]
  13. ^ Sí con ilumos [25]
  14. ^ Consulte Virtualización de redes y control de recursos de Solaris para obtener más detalles.
  15. ^ Solo cuando el nivel superior es una zona KVM (illumos) o una zona kz (Oracle).
  16. ^ A partir de Solaris 11.3 Beta, las zonas del kernel de Solaris pueden utilizar la migración en vivo.
  17. ^ Se implementa la migración en frío (apagar-mover-reiniciar).
  18. ^ Las zonas no globales están restringidas, por lo que es posible que no afecten a otras zonas mediante un enfoque de limitación de capacidad. La zona global podrá administrar las zonas no globales. [28]
  19. ^ Consulte la opción "allow.quotas" y la sección "Cárceles y sistemas de archivos" en la página de manual de la cárcel de FreeBSD para obtener más detalles.
  20. ^ Disponible desde TL 02. [39]

Referencias

  1. ^ Hogg, Scott (26 de mayo de 2014). "Contenedores de software: se utilizan con más frecuencia de lo que la mayoría cree". networkworld.com . Mundo de la red, 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.
  2. ^ Rami, Rosen. «Espacios de nombres y Cgroups, la base de los Contenedores de Linux» (PDF) . Consultado el 18 de agosto de 2016 .
  3. ^ "Implementaciones seguras de Bottlerocket en Amazon EKS con KubeArmor | Contenedores". aws.amazon.com . 2022-10-20 . Consultado el 20 de junio de 2023 .
  4. ^ Korff, Yanek; Esperanza, Paco; Alfarero, Bruce (2005). Dominar la seguridad de FreeBSD y OpenBSD. Serie O'Reilly. O'Reilly Media, Inc. pág. 59.ISBN _ 0596006268.
  5. ^ Huang, D. (2015). "Experiencias en el uso de virtualización a nivel de sistema operativo para E/S de bloques". Actas del décimo taller paralelo de almacenamiento de datos . págs. 13-18. doi :10.1145/2834976.2834982. ISBN 9781450340083. S2CID  3867190.
  6. ^ "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". Corporación Oráculo . 2010 . Consultado el 2 de septiembre de 2014 .
  7. ^ "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 con marca y la zona con marca Linux". Corporación Oráculo . 2010 . Consultado el 2 de septiembre de 2014 .
  8. ^ Bryan Cantrill (28 de septiembre de 2014). "¡El sueño está vivo! Ejecutando contenedores de Linux en un kernel illusmos". slideshare.net . Consultado el 10 de octubre de 2014 .
  9. ^ "3.5. Limitar el entorno de su programa". freebsd.org .
  10. ^ "Docker elimina LXC como entorno de ejecución predeterminado". InfoQ .
  11. ^ "Docker llega a FreeBSD". FreeBSDNews.com . 9 de julio de 2015.
  12. ^ "Instalar el escritorio Docker en Windows | Documentación de Docker". Docker . 9 de febrero de 2023.
  13. ^ "Comience con el escritorio Docker para Mac". Documentación acoplable . 6 de diciembre de 2019.
  14. ^ "Papel: Linux-VServer". linux-vserver.org .
  15. ^ 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 admite 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.
  16. ^ "Sylabs lleva los contenedores Singularity a HPC comercial | Top 500 sitios de supercomputadoras". www.top500.org .
  17. ^ "SIF: contiene sus contenedores". www.sylabs.io . 14 de marzo de 2018.
  18. ^ Kurtzer, Gregorio M.; Sochat, Vanessa; Bauer, Michael W. (11 de mayo de 2017). "Singularidad: contenedores científicos para la movilidad informática". MÁS UNO . 12 (5): e0177459. Código Bib : 2017PLoSO..1277459K. doi : 10.1371/journal.pone.0177459 . PMC 5426675 . PMID  28494014. 
  19. ^ Brónnikov, Sergey. "Comparación en la página wiki de OpenVZ". Wiki OpenVZ . AbiertoVZ . Consultado el 28 de diciembre de 2018 .
  20. ^ "Prioridades de E/S para contenedores". Wiki de contenedores OpenVZ Virtuozzo .
  21. ^ "Docker dentro de CT".
  22. ^ "Contenedor". Wiki de contenedores OpenVZ Virtuozzo .
  23. ^ "Prelanzamiento público inicial de Virtuozzo (llamado ASPcomplete en ese momento)".
  24. ^ "Parallels Virtuozzo ahora proporciona soporte nativo para Docker".
  25. ^ Pijewski, Bill. "Nuestro acelerador de E/S ZFS".
  26. ^ Preguntas frecuentes sobre virtualización de redes y control de recursos (Crossbow) Archivado el 1 de junio de 2008 en Wayback Machine.
  27. ^ "Gestión de virtualización de red y recursos de red en Oracle® Solaris 11.2". docs.oracle.com .
  28. ^ 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. Disponible dentro de un archivo.
  29. ^ "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.
  30. ^ "Límites jerárquicos de recursos - FreeBSD Wiki". Wiki.freebsd.org. 27 de octubre de 2012 . Consultado el 15 de enero de 2014 .
  31. ^ "Implementación de una pila de red clonable en el kernel de FreeBSD" (PDF) . usenix.org. 2003-06-13.
  32. ^ "VPS para FreeBSD" . Consultado el 20 de febrero de 2016 .
  33. ^ "[Anuncio] VPS // Virtualización del sistema operativo // lanzamiento alfa". 31 de agosto de 2012 . Consultado el 20 de febrero de 2016 .
  34. ^ "3.5. Limitar el entorno de su programa". Freebsd.org . Consultado el 15 de enero de 2014 .
  35. ^ Mateo Dillon (2006). "sys/vkernel.h". Referencia cruzada de BSD . Libélula BSD .
  36. ^ ab "vkd(4) - Disco del núcleo virtual". Libélula BSD . trata la imagen del disco como copia en escritura.
  37. ^ ab Sascha Wildner (8 de enero de 2007). "vkernel, vcd, vkd, vke: arquitectura del núcleo virtual". Manual de información diversa de DragonFly . Libélula BSD .
    • "vkernel, vcd, vkd, vke - arquitectura de kernel virtual". Manual de información diversa de DragonFly.
  38. ^ "vkernel, vcd, vkd, vke: arquitectura de kernel virtual". Páginas del manual en línea de DragonFly . Libélula BSD .
  39. ^ "Información del fixpack de IBM para: aislamiento de red WPAR - Estados Unidos". ibm.com . 21 de julio de 2011.
  40. ^ "Movilidad de aplicaciones en vivo en AIX 6.1". www.ibm.com . 3 de junio de 2008.
  41. ^ abcd "systemd-nspawn". www.freedesktop.org .
  42. ^ abcd "2.3. Modificación de grupos de control Red Hat Enterprise Linux 7". Portal del cliente de Red Hat .
  43. ^ Polvi, Alex. "CoreOS está creando un tiempo de ejecución de contenedor, rkt". Blog de CoreOS . Archivado desde el original el 1 de abril de 2019 . Consultado el 12 de marzo de 2019 .
  44. ^ "LXD". linuxcontainers.org . Consultado el 11 de febrero de 2021 .
  45. ^ Contenedores desarraigados con Podman y superposiciones de fusibles, taller del CERN, 4 de junio de 2019
  46. ^ "Descripción general: documentación de Charliecloud 0.25" . Consultado el 4 de octubre de 2020 .
  47. ^ "Inicio". katacontainers.io .
  48. ^ "Bottlerocket es un sistema operativo basado en Linux diseñado específicamente para ejecutar contenedores".

enlaces externos