fbpx
Wikipedia

Virtualización a nivel de sistema operativo

La virtualización a nivel de sistema operativo, también llamada virtualización basada en contenedores, contenerización[1]​ o contenedorización,[2]​ es un método de virtualización en el que, sobre el núcleo del sistema operativo, se ejecuta una capa de virtualización que permite que existan múltiples instancias aisladas de espacios de usuario, en lugar de solo uno. Tales instancias, las cuales son llamadas contenedores, contenedores de software, jaulas o prisiones, pueden verse y sentirse como un servidor real desde el punto de vista de sus dueños y usuarios. Al software que permite el alojamiento de distintos contenedores se le llama motor de contenedores. Además de mecanismos de aislamiento, el kernel a menudo proporciona mecanismos de administración de recursos para limitar el impacto de las actividades de un contenedor sobre otros contenedores.

Historia Editar

Como origen de la virtualización a nivel de sistema operativo podemos señalar 1982 con la creación de chroot por parte de Bill Joy. A chroot se le pasan dos parámetros, uno que indica un directorio y el otro el comando a ejecutar. Lo que hace chroot es ejecutar el comando pasado como parámetro impidiendo que él y sus procesos hijos accedan a cualquier ruta fuera del directorio pasado también como parámetro. Se establece lo que se llama jaula chroot. Estas restricciones son relativamente fáciles de superar. [3]​ Lo que se persigue es crear una zona con algo más de seguridad donde poder ejecutar un programa del cual se desconfía y que puede presentar un comportamiento peligroso para la integridad del sistema.

En los años 90 Poul-Henning Kamp introduce las llamadas jaulas FreeBSD,[4]​ a veces simplemente llamadas jaulas BSD. Son el primer ejemplo de virtualización a nivel de sistema operativo. Su objetivo es solventar la limitación de chroot de que sólo limita la parte del sistema de ficheros a la que pueden acceder los procesos dentro de la jaula. El resto de recursos del sistema (conjunto de usuarios del sistema, los procesos en ejecución, el subsistema de red,...) están compartidos entre el sistema alojado y el servidor. Las jaulas BSD extienden este modelo virtualizando no solamente el acceso al sistema de ficheros, sino al conjunto de usuarios, al subsistema de red del kernel de FreeBSD y unas cuantas cosas más.[5]​ Para ello elimina todos los privilegios de superusuario que podría afectar a objetos que no están enteramente dentro de la jaula.[4]​ Además cada jaula puede tener su propio conjunto de usuarios e incluso su propio usuario root (limitado al entorno de la jaula no pudiendo realizar operaciones fuera del mismo).[5]​ Es un sistema más avanzado que crea un entorno virtual prácticamente indistinguible de una máquina real (o máquina virtual real).[6]​ Tienen como limitación, sin embargo, la obligación de ejecutar la misma versión del núcleo del sistema.[6]

De manera prácticamente paralela a las jaulas FreeBSD, aparece Linux VServer un sistema de virtualización para plataformas Linux que también permite aislar los recursos (sistemas de archivos, direcciones de red, memoria,..).[7]​ Este sistema fue añadido directamente al kernel de Linux en el año 2001. [7]​ Posteriormente, también para Linux, se lanzó OpenVZ y su versión comercial Virtuozzo).[7]

Dentro de la familia de sistemas operativos Solaris aparece una tecnología equivalente a las jaulas BSD llamada zonas Solaris. La principal diferencia con las jaulas BSD es la baja sobrecarga que le añaden al sistema operativo y el hecho de que se les puedan asignar recursos específicos.[6]

En 2002 se introducen en el kernel de linux los namespaces. Estos namespaces permiten particionar los recursos del kernel de modo que un grupo de procesos vea un conjunto de recursos y otro conjunto de procesos vea otro conjunto diferente de recursos. La implementación de namespaces fue mejorándose y ampliándose en versiones sucesivas del kernel.

En el año 2006 Google lanza para plataformas Linux su herramienta Process Containers que fue diseñada para limitar y aislar los accesos a recursos de la máquina como CPU, memoria, I/O de disco, red, etc., por parte de un grupo de procesos. Este proyecto fue renombrado posteriormente al nombre Grupos de control o simplemente cgroups en 2007 y finalmente se fusionó con el kernel de Linux.[7]

Unos años más tarde nace para plataformas Linux el sistema LinuX Containers (LXC).[7]​ Este sistema, apoyándose sobre namespaces y cgroups que ofrece el kernel de Linux, consiguió la primera implementación estable de un gestor de contenedores sobre Linux.[7]​ Sobre LXC se ha construido LXD, un administrador de contenedores del sistema que proporciona una mejor experiencia de usuario. LXD ofrece un servicio similar a una máquina virtual en el sentido de que ofrece al usuario un sistema operativo completo con interfaces de red y almacenamiento pero, en este caso, con ciertas restricciones de acceso.[8]

Entre 2011 y 2013 surgen diversas tecnologías de gestión de contenedores como Warden, LMCTFY (siglas de Let Me Contain That For You) y Docker.[7]​ Warden desarrolló el primer modelo cliente-servidor para administrar contenedores distribuidos en diferentes equipos. [7]​ LMCTFY permitía que las aplicaciones propiamente dichas tuvieran capacidad para controlar el contenedor, administrando sus propios subcontenedores o contenedores hijos.[7]​ En 2013 surge Docker, el cual permite gestionar el ciclo de vida de los contenedores de forma sencilla en comparación con la herramientas anteriores.[9]​ Esto provoca que Docker, y por tanto los contenedores, se empiecen a usar de forma masiva.[7]

La gran ventaja de Docker es que está orientado a empaquetar dentro de los contenedores aplicaciones aisladas entre sí,[8]​ con todas las funcionalidades que necesitan para ser ejecutadas permitiendo integrarlas en los flujos de integración/distribución continua.[9]​ De esta forma obtiene una cadena unificada desde el desarrollo de aplicaciones hasta su puesta en producción. Teniendo un modelo de único despliegue de las aplicaciones, consigue reducir los tiempos de configuración, los tiempos de despliegue,… y mejorando, en ese sentido, el tiempo de puesta en producción de las aplicaciones. [9]​ De esta manera independientemente del entorno en el que ejecutemos el contenedor (local, desarrollo o entornos productivos) siempre nos vamos a asegurar que se ejecuta de la misma manera.[9]​ Para ello usa instantáneas de un contenedor, a las que llama imágenes,[10]​ que se ejecutan instanciándolas en lo que ya sería el contenedor.[9]​ Podremos crear tantas instancias de una imagen como queramos y en los entornos que queramos.[9]​ Típicamente se tienen contenedores mínimos efímeros, sin estado, que normalmente no se actualizan o reconfiguran, sino que simplemente se reemplazan por completo.[11]​ Si queremos datos persistentes se montan rutas del sistema subyacente en los contenedores por ejemplo usando los llamados volúmenes.[12]

Inicialmente Docker usó como entorno de ejecución por defecto LXC, sin embargo más tarde fue reemplazado por libcontainer.[7][13]​ De esta forma consiguió poder ser usado con otras tecnologías de aislamiento distintas a LXC y poder acceder directamente a las APIs del kernel del sistema operativo y así poder reducir las dependencias de librerías y aumentar la eficiencia del sistema.[13]​ Sobre libcontainer Docker creó runC, un motor de contenedores ligero de línea de comandos[14][15]

Aunque Docker sigue siendo, con diferencia, la solución más usada, durante estos últimos años han surgido otras alternativas como:[7][16][17][18]

  • rkt (antes llamado Rocket). Creado por Container Linux para proporcionar más seguridad e interoperabilidad. No obligaba a ejecutar todo como root, no tenía demonios, estaba controlado por línea de comandos CLI, y tenía comodidades como verificación criptográfica y compatibilidad completa con imágenes de Docker.[19]​ Docker fue ganando popularidad y rkt finalmente fue abandonado.[19]
  • Apache Mesos. Permite ejecutar frameworks sobre los cuales se ejecuta la aplicación y está especialmente orientado a entornos de Big Data[20]
  • Windows Server Container. Las instancias de los contenedores se ejecutan a la vez sobre el mismo núcleo del anfitrión. [21]
  • Hyper V Container Los contenedores no comparten el mismo núcleo sino que se aísla entre cada uno utilizando la tecnología de virtualización Hyper-V.[21]

En 2015 se funda la Open Container Initiative (OCI), una asociación de instituciones y empresas asociadas para diseñar estándares abiertos sobre virtualización a nivel de sistema operativo para, de esta forma, asegurar que las plataformas de contenedores no estén vinculadas a ninguna empresa o proyecto concreto.[22]

En 2016 el más importante orquestador de contenedores Kubernetes propuso Container Runtime Interface como la interfaz (API) para los motores de ejecución de contenedores, para de esta manera proponer una forma de conectarse a otros motores de ejecución distintos de Docker.[23][24]​ De esta forma podía integrarse con múltiples motores de ejecución de manera transparente.[24]​ Poco a poco empezaron a salir motores de ejecución que cumplían la especificación de forma nativa y que a la vez soportaban las imágenes Docker.[24][23]​ Por ejemplo cri-o (por debajo utiliza típicamente runC o crun como motor de contenedores de bajo nivel, ambas implementaciones OCI[19]​ siendo crun más ligera[25]​) y cri-containerd (plugin añadido a containerd, el motor de ejecución de alto nivel de Docker y que por debajo utiliza típicamente runC[19]​).[24][23]​ Sin embargo, Docker no cumplía CRI (aunque desde la versión uliliza ContainerD de forma interna) y por eso se desarrolló el componente docker-shim que hacía de interlocutor entre las dos partes para que sea posible utilizar Docker dentro de Kubernetes.[24]​ En diciembre de 2020 Kubernetes anunció que deprecaba el soporte a Docker en la próxima versión, y que en futuras versiones solo estarían disponibles los motores de ejecución de contenedores que cumplieran CRI de manera nativa.[24][23]

Usos Editar

Escenarios típicos de uso de la virtualización a nivel de sistema operativo son:

  • En ambientes de alojamiento virtual, permiten distribuir recursos de hardware finitos de forma segura entre un número grande de usuarios mutuamente desconfiados.
  • Administradores de sistema lo usan para ahorrar hardware, moviendo servicios que se encuentran en servidores distintos hacia un mismo servidor.
  • Permiten la separación de varias aplicaciones en contenedores distintos para mejorar la seguridad, independencia de hardware y brindar mecanismos de administración de recurso adicionales. La mejora de seguridad proporcionada, aun así, no es de ninguna forma infalible.
  • Las implementaciones de virtualización a nivel de sistema operativo capaces de hacer migraciones en vivo pueden ser utilizadas para realizar balanceo de carga dinámico de contenedores entre nodos en un grupo.

Características Editar

Sobrecarga Editar

La virtualización a nivel de sistema operativo normalmente impone poca o ninguna sobrecarga, porque los programas en particiones virtuales utilizan la interfaz de llamada de sistema normal del sistema operativo y no necesitan de emulación o ser ejecutados en una máquina virtual intermedia, como es el caso con virtualizadores a sistema completo (como VMware ESXi, QEMU o Hyper-V) y paravirtualizadores (como Xen o UML). Esta forma de virtualización además no requiere soporte en hardware para actuar eficientemente.

Flexibilidad Editar

La virtualización a nivel de sistema operativo no es tan flexible como otros enfoques de virtualización porque no puede hospedar un sistema operativo diferente del anfitrión o un kernel distinto. Por ejemplo, con Linux, no hay problemas con las distribuciones diferentes, pero otros sistemas operativos como Windows no puede ser virtualizados.

Solaris vence parcialmente la limitación descrita anteriormente con su característica de zonas marcadas, la cual proporciona la capacidad de ejecutar un entorno dentro de un contenedor que emula un Solaris versión 8 o 9 en un Solaris 10 anfitrión. Las zonas marcadas de Linux también están disponibles en sistemas Solaris basados en x86, proporcionando un espacio de usuario de Linux completo y soporte para la ejecución de aplicaciones de Linux; además, Solaris proporciona las herramientas necesarias para instalar otras distribuciones de Linux como Red Hat Enterprise Linux 3.x o CentOS 3.x dentro de zonas marcadas de Linux.[26][27]​ Sin embargo, en 2010 las zonas marcadas de Linux fueron eliminadas de Solaris; en 2014 eran reintroducidas en Illumos, la rama de código abierto de Solaris, brindando soporte a los kernels de Linux de 32-bits.[28]

Almacenamiento Editar

Algunas implementaciones de virtualización a nivel de sistema operativo proporcionan mecanismos copy-on-write a nivel de archivos. (En la mayoría de los casos, un sistema de ficheros estándar es compartido entre particiones, y aquellas particiones que cambian los archivos automáticamente crean sus propias copias). Con este sistema es más sencillo realizar copias de seguridad, además, hace un uso más eficiente del espacio en disco y resulta más sencillo de guardar en caché que los esquemas copy-on-write a nivel de bloque, comunes en virtualizadores a sistema completo. Los virtualizadores a sistema completo, sin embargo, pueden trabajar con sistemas de archivos no nativos y crear y restaurar copias del estado actual completo del sistema.

Tipos Editar

Podemos clasificar los sistemas de virtualización de sistemas operativos según el tipo de servicios que ofrecen en:[29][11][30]

  • Contenedores de infraestructura o sistema de contenedores. Ofrecen un servicio que permite ejecutar múltiples instancias de sistemas operativos de manera aislada. Ofrece todo lo necesario para que el sistema “contenido” pueda trabajar, tales como CPU, network, I/O. Es similar a una máquina virtual pero más rápido y ligero. Ejemplos de estos sistemas son LXC y LXD.
  • Contenedores de procesos o Contenedores de aplicaciones. Ofrecen un sistema para empaquetar aplicaciones y todas sus dependencias y, por tanto, son muy útiles para el desarrollo y distribución de aplicaciones. Por ejemplo, en integración continua es habitual desarrollar con contenedores para eliminar las diferencias de entorno entre producción y desarrollo y facilitar la migración del entorno. Este tipo de contenedores son muy usados en la computación en la nube para distribuir las aplicaciones. Ejemplos de estos sistemas son Docker y systemd-nspawn. Típicamente se tienen contenedores mínimos efímeros, sin estado, que normalmente no se actualizan o reconfiguran, sino que simplemente se reemplazan por completo.[11]
  • Contenedores sandbox. Enfocados en proveer aislamiento mediante un entorno que permita ejecutar contenedores en un espacio escapsulado donde tiene acceso restringido a recursos del sistema operativo o datos del usuario (sandbox). Ejemplos de estos sistemas son Firejail,[31]​ nsroot,[32]​ nsjail,[32]FreeBSD jail, sandboxie[33]​ y Bubblewrap.

El que un sistema esté más enfocado en proveer un tipo de servicio no quiere decir que no pueda proveer el otro. Por ejemplo Docker es un contenedor de aplicaciones pero permite proporcionar espacio aislado. Sin embargo al ser un software bastante grande y con muchas funciones, expande la superficie de ataque innecesariamente y por tanto, no es la mejor forma para proporcionar espacio aislado.[34]

Además se pueden combinar, por ejemplo se puede usar LXD para proporcionar sistemas Linux completos a sus usuarios que luego pueden instalar Docker dentro de su contenedor LXD para ejecutar el software que desean.[11]

Comparación con la virtualización de plataforma Editar

Comparado con la virtualización de plataforma, la virtualización a nivel de sistema operativo:[6][35]

  • Es mucho más ligera. Puede llegar a tener un rendimiento en la ejecución muy próximo al nativo reduciendo, por ejemplo, el consumo de memoria por servidor virtual u optimizando su entrada y salida debido a que un solo kernel controla el acceso a los dispositivos y recursos. Esta ligereza permite un tiempo de arranque más reducido, y que la misma máquina permita admitir más contenedores que máquinas virtuales
  • No requiere un hipervisor para funcionar
  • No requiere ningún mecanismo hardware.
  • Permite un mayor control desde fuera (desde el anfitrión) del que se pueda tener usando máquinas virtuales.
  • El soporte de contenedores implica que haya que realizar diversas modificaciones en el kernel del sistema operativo anfitrión, sobre todo para hacer creer a los contenedores que son ejecutadas en un entorno exclusivo.
  • Al compartir el mismo núcleo con el servidor físico anfitrión:
    • Un fallo en el kernel puede provocar la caída de la totalidad de los contenedores alojados (único punto de fallo).
    • Por lo general, los contenedores no pueden correr sistemas operativos que difieran del instalado en el sistema anfitrión, aunque en algunos casos es posible que ejecuten diferentes versiones de la misma distribución o incluso distintas distribuciones Linux. Por ejemplo, FreeBSD jails permite ejecutar diferentes versiones de FreeBSD sobre un único kernel FreeBSD, por lo tanto permitiendo tener diferentes versiones de aplicaciones, procesos, librerías, etc. Otro ejemplo: Linux V-Server, FreeVPS y OpenVZ pueden ejecutar diferentes distribuciones Linux en los servidores virtuales, aunque siempre compartiendo el mismo kernel. Con docker en Windows se pueden ejecutar contenedores Linux gracias a la capa de compatibilidad WSL que permite ejecutar ejecutables de Linux nativamente en Windows.[36]
    • Las librerías, herramientas, utilidades,... que ejecuten los servidores virtuales deben estar compilados para el mismo juego de instrucciones y hardware que utiliza el sistema operativo anfitrión.

• Mayor portabilidad Las aplicaciones que se ejecutan en contenedores se pueden poner en marcha fácilmente en sistemas operativos y plataformas de hardware diferentes. Funcionamiento más constante • Los equipos de DevOps saben que las aplicaciones en contenedores van a ejecutarse igual, independientemente de dónde se pongan en marcha. • Mayor eficiencia Los contenedores permiten poner en marcha, aplicar parches o escalar las aplicaciones con mayor rapidez. • Mejor desarrollo de aplicaciones Los contenedores respaldan los esfuerzos ágiles y de DevOps para acelerar los ciclos de desarrollo, prueba y producción.

Orquestadores de contenedores Editar

Las herramientas que realizan orquestación de contenedores, llamados Orquestadores de contenedores son herramientas que dirigen el comportamiento de los contenedores pudiendo automatizar el despliegue, la gestión y el escalado de las aplicaciones basadas en contenedores.[7]​ Estas herramientas son necesarias en entornos en los que tenemos que manejar un sistema con muchos contenedores, que dan distintos servicios (base de datos, servidor web, métricas, la propia aplicación, ...) y desplegados sobre distintos servidores. [7][37]​ Estos contenedores atienden una demanda determinada que tiene que ser satisfecha por unos recursos los cuales se tienen que escalar, actualizar, etc. sin repercutir en el usuario de la aplicación.[7]​ Por tanto hay que controlar y dirigir la creación de contenedores, verificar su correcta ejecución, gestionar los errores,...[37]

Ejemplos de orquestadores de contenedores son docker-compose, Docker Swarm, Rancher y Kubernetes.[7]​ Algunos gestores de contenedores como Apache Mesos aportan sus propios mecanismos de orquestación y no necesitan un herramienta externa para realizar esa tarea.

Contenedores y sistemas distribuidos Editar

Un Sistema distribuido es aquel en el que los componentes, localizados en la red se comunican y coordinan sus acciones mediante el envío de mensajes. Los Sistemas Distribuidos permiten que los recursos de la red no se encuentren centralizados en una sola máquina, pudiendo estar en varias, e incluso en lugares diferentes. Como se mencionó anteriormente, los contenedores son una forma de virtualización del sistema operativo. Estos pueden llegar a utilizarse para ejecutar cualquier cosa, desde un micro servicio hasta una aplicación de mayor nivel. La manera más sencilla de relacionarlos es tomando en cuenta que si el objetivo de los sistemas distribuidos es no centralizar los recursos en una sola máquina, los contenedores hacen más sencilla esta distribución, al requerir menos recursos que un sistema operativo completo, facilitar una mayor portabilidad al usuario, ya que como se mencionó, las aplicaciones que se ejecutan en estos se pueden poner en operación de manera más sencilla y rápida que en un sistema operativo. Otro punto fuerte es que se puede poner a operar en plataformas de hardware diferentes, facilitando aún más lo que se busca con los sistemas distribuidos.

¿Cuál es la relación que docker y kubernetes tienen con los contenedores? Editar

Docker es un popular entorno en tiempo de ejecución que se usa para crear y construir software dentro de contenedores. Usa imágenes de Docker (instantáneas de copia en escritura) para poner en marcha aplicaciones o software en contenedores en varios entornos, desde el desarrollo hasta las pruebas y la producción. Docker se basa en estándares abiertos y funciona en la mayoría de los entornos operativos más comunes, incluidos Linux, Microsoft Windows y otras infraestructuras locales o basadas en la nube.

Sin embargo, las aplicaciones en contenedores pueden ser complicadas. Durante la producción, muchas pueden requerir cientos o miles de contenedores independientes. Es en este punto donde los entornos en tiempo de ejecución de contenedores, como Docker, se benefician del uso de otras herramientas para orquestar o gestionar todos los contenedores en funcionamiento.

Una de las herramientas más populares para este fin es Kubernetes, un orquestador de contenedores que reconoce varios entornos en tiempo de ejecución de contenedores, incluido Docker.

Kubernetes orquesta el funcionamiento de varios contenedores juntos de forma armónica. Gestiona áreas como el uso de recursos de infraestructura subyacentes para aplicaciones en contenedores (por ejemplo, la cantidad de recursos de computación, red y almacenamiento necesarios). Las herramientas de orquestación como Kubernetes facilitan la automatización y el escalado de cargas de trabajo basadas en contenedores para entornos de producción activos.

Implementaciones Editar

A continuación se muestra tabla con algunas implementaciones de motores de contenedores:

Mecanismo Sistema operativo Licencia Disponible desde o entre Características
Aislamiento de sistema de ficheros Copy-on-write Cuotas de disco Límite de entrada/salida Límites de memoria Cuotas de CPU Aislamiento de red Virtualización anidada Puntos de control de particiones y migraciones en vivo Aislamiento de privilegios de administración
chroot La mayoría de los sistemas operativos estilo Unix Cambia de acuerdo al sistema operativo 1982   Parcial[39]   No   No   No   No   No   No      No   No
Docker Linux[40] Licencia Apache 2.0 2013         No directamente    (desde la versión 1.10)               No    (desde la versión 1.10)
Linux-VServer
(contexto de seguridad)
Linux, Windows Server 2016 GNU GPLv2 2001            [41]         Parcial[42] ?   No   Partial[44]
lmctfy Linux Licencia Apache 2.0 2013            [41]         Parcial[42] ?   No   Partial[44]
LXC Linux GNU GPLv2 2008   [45]      Parcial   Parcial[46]               No   [45]
LXD[47] Linux Licencia Apache 2.0 2015         Parcial (ver LXC)   Parcial (ver LXC)               Parcial[49]   
OpenVZ Linux GNU GPLv2 2005       (ZFS)      [51]         [52]   Parcial[54]      Yes[56]
Virtuozzo Linux, Windows Propietaria 2000[57]            [58]         [52]   Parcial[60]      
Contenedores Solaris (Zones) illumos (OpenSolaris),
Solaris
CDDL, Propietaria 2004       (ZFS)      Parcial[62]         [63][64][65]   Parcial[66]   Parcial[67][68]   Yes[70]
Prisión FreeBSD FreeBSD Licencia BSD 2000[71]       (ZFS)   [72]      [73]      [74]      Parcial[75][76]   [77]
sysjail OpenBSD, NetBSD Licencia BSD 2006–2009      No   No   No   No   No      No   No ?
WPARs AIX Propietaria 2007      No               [79]   No   [80] ?
HP-UX Containers (SRP) HPUX Propietaria 2007      No   Parcial[81]             ?    ?
Cuentas virtuales de iCore Windows XP Propietaria:

Freeware

2008      No      No   No   No   No ?   No ?
Sandboxie Windows Propietaria:

Freeware

2004         Parcial   No   No   No   Parcial   No   No   
Spoon Windows Propietaria 2012         No   No   No   No      No   No   
systemd-nspawn Linux GNU LGPLv2.1+ 2010         [82][83]   [82][83]   [82][83]   [82][83]    ? ?   
VMware ThinApp Windows Propietaria 2008         No   No   No   No      No   No   

Véase también Editar

Notas Editar

Referencias Editar

  1. Virtualización basada en contenedores y SD-WAN. Guillermo Lopez. teldat.com. 3 octubre 2018
  2. La contenerización de aplicaciones. Hector Gil. plotandesign.com. 28 de marzo de 2019
  3. . 2002. Archivado desde el original el 22 de septiembre de 2013. Consultado el 7 de mayo de 2013. 
  4. Building Systems to be Shared Securely. POUL-HENNING KAMP y ROBERT WATSON. ACM QUEUE Julio/Agost de 2004
  5. Capítulo 15. Jaulas. Manual de FreeBSD. 1995-2010
  6. Virtualización ligera usando contenedores: Introducción. Material docente para la asignatura Infraestructura Virtual. JJ Merelo. Universidad de Granada.
  7. Personalización de entorno de desarrollo y despliegue sobre contenedores. Carlos Rodríguez Hernández. Trabajo Fin de Grado en Ingeniería de las Tecnologías de Telecomunicación. Universidad de Sevilla 2019
  8. LXD vs Docker. Ranvir Singh. 2017
  9. ¿Qué es Docker?. Víctor Cuervo. 26 de noviembre de 2019.
  10. Trabajando con imágenes en Docker. Marcos Saiz. 2019
  11. LXD 2.0: Introduction to LXD 1/12. Stéphane Graber. 11 de marzo de 2016
  12. Volúmenes y datos persistentes en Docker. Pablo. 2 de enero de 2019
  13. LXC vs. libcontainer. Anusheh Zohair Mustafeez
  14. runC: The little container engine that could. Phil Estes. 15 de agosto de 2016
  15. What’s Running My Containers? A review of runtimes & standards. Phil Estes
  16. Una guía no tan rápida de Docker y Kubernetes. Mauricio Collazos. 19 de junio de 2018
  17. Virtualización con contenedores Docker: alternativas. ionos.es. 9 de julio de 2019
  18. 5 Container Alternatives to Docker. Bill Doerrfeld. 22 de enero de 2019
  19. A Comprehensive Container Runtime Comparison. Evan Baker. 10 de junio de 2020
  20. Apache Mesos. Viviana. 23 de julio de 2018
  21. Containers con Windows Server 2016. Josep Ma Solanes. 5 de abril de 2016
  22. Open Container Initiative. searchitoperations.techtarget.com. Noviembre de 2015
  23. ¿Psicosociales en el mundo de los contenedores? Kubernetes depreca a Docker. ecardenas. 3 de diciembre de 2020
  24. Kubernetes ha deprecado Docker. Iñigo Telleria 4 de diciembre de 2020
  25. An introduction to crun, a fast and low-memory footprint container runtime. Dan Walsh et ali. 3 de agosto de 2020
  26. «System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 16: Introduction to Solaris Zones». Oracle Corporation. 2010. Consultado el 2 de septiembre de 2014. 
  27. «System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones, Chapter 31: About Branded Zones and the Linux Branded Zone». Oracle Corporation. 2010. Consultado el 2 de septiembre de 2014. 
  28. Bryan Cantrill (28 de septiembre de 2014). «The dream is alive! Running Linux containers on an illumos kernel». slideshare.net. Consultado el 10 de octubre de 2014. 
  29. Introducción a contenedores Docker. José David. 28 de septiembre de 2016
  30. Bubblewrap.
  31. Firejail: Putting a program in its own little container. Eli Billauer.11 de junio de 2020
  32. nsroot: Minimalist Process Isolation Tool Implemented With Linux Namespaces. Inge Alexander Raknes, Bjørn Fjukstad y Lars Ailo Bongo. University of Tromsø]
  33. Sandbox. cortafuegos.net
  34. Sandbox your applications with Firejail. nachoparker. 29 de octubre de 2017
  35. Virtualización de servidores de telefonía IP en GNU/LINUX. Introducción a la virtualización. Eugenio Villar y Julio Gómez. Universidad de Almería. Junio de 2010
  36. Cómo desarrollar con Docker en Linux dentro de Windows sin arranque dual – WSL 2. Henrique Marques Fernandes. 18 de junio de 2020
  37. Comparativa de orquestadores: Docker Swarm vs Kubernetes vs Apache Mesos. Carlos Iván Morales Terrer. 21 de marzo de 2019
  38. «3.5. Limiting your program's environment». freebsd.org. 
  39. Root user can easily escape from chroot. Chroot was never supposed to be used as a security mechanism.[38]
  40. «Docker drops LXC as default execution environment». InfoQ. 
  41. Utilizing the CFQ scheduler, there is a separate queue per guest.
  42. Networking is based on isolation, not virtualization.
  43. Linux-VServer Paper, Secure Capabilities
  44. A total of 14 user capabilities are considered safe within a container. The rest may cannot be granted to processes within that container without allowing that process to potentially interfere with things outside that container.[43]
  45. Graber, Stéphane (1 de enero de 2014). «LXC 1.0: Security features [6/10]». Consultado el 12 de febrero de 2014. «LXC now has support for user namespaces. [...] LXC is no longer running as root so even if an attacker manages to escape the container, he’d find himself having the privileges of a regular user on the host ». 
  46. I/O rate limiting is supported when using Btrfs.
  47. Kouka, Abdelmonam (2015). Ubuntu Server Essentials. Packt Publishing Ltd. p. 124. ISBN 9781785282768. Consultado el 31 de marzo de 2016. «Also known as the Linux container hypervisor, LXD is the next-generation hypervisor provided by Canonical. It combines the density of containers with the manageability of virtual machines. » 
  48. «Live Migration in LXD». Ubuntu Insights Web site. 
  49. In progress: Works on non-systemd OS[48]
  50. «I/O priorities for containers». OpenVZ Virtuozzo Containers Wiki. 
  51. Available since Linux kernel 2.6.18-028stable021. Implementation is based on CFQ disk I/O scheduler, but it is a two-level schema, so I/O priority is not per-process, but rather per-container.[50]
  52. Each container can have its own IP addresses, firewall rules, routing tables and so on. Three different networking schemes are possible: route-based, bridge-based, and assigning a real network device (NIC) to a container.
  53. «Docker inside CT». 
  54. Docker containers can run inside OpenVZ containers.[53]
  55. «Container». OpenVZ Virtuozzo Containers Wiki. 
  56. Each container may have root access without possibly affecting other containers.[55]
  57. «Initial public prerelease of Virtuozzo (named ASPcomplete at that time)». 
  58. Available since version 4.0, January 2008.
  59. «Parallels Virtuozzo Now Provides Native Support for Docker». 
  60. Docker containers can run inside Virtuozzo containers.[59]
  61. Pijewski, Bill. «Our ZFS I/O Throttle». 
  62. Yes with illumos[61]
  63. See OpenSolaris Network Virtualization and Resource Control for more details.
  64. Network Virtualization and Resource Control (Crossbow) FAQ el 1 de junio de 2008 en Wayback Machine.
  65. «Managing Network Virtualization and Network Resources in Oracle® Solaris 11.2». 
  66. Only when top level is a KVM zone (illumos) or a kz zone (Oracle).
  67. Starting in Solaris 11.3 Beta, Solaris Kernel Zones may use live migration.
  68. Cold migration (shutdown-move-restart) is implemented.
  69. Oracle Solaris 11.1 Administration, Oracle Solaris Zones, Oracle Solaris 10 Zones and Resource Management E29024.pdf, pp. 356–360. Available within an archive.
  70. Non-global zones are restricted so they may not affect other zones via a capability-limiting approach. The global zone may administer the non-global zones.[69]
  71. «Contain your enthusiasm - Part Two: Jails, Zones, OpenVZ, and LXC». «Jails were first introduced in FreeBSD 4.0 in 2000 ». 
  72. Check the "allow.quotas" option and the "Jails and File Systems" section on the FreeBSD jail man page for details.
  73. «Hierarchical_Resource_Limits - FreeBSD Wiki». Wiki.freebsd.org. 27 de octubre de 2012. Consultado el 15 de enero de 2014. 
  74. «Implementing a Clonable Network Stack in the FreeBSD Kernel». usenix.org. 13 de junio de 2003. 
  75. «VPS for FreeBSD». Consultado el 20 de febrero de 2016. 
  76. «[Announcement] VPS // OS Virtualization // alpha release». Consultado el 20 de febrero de 2016. 
  77. «3.5. Limiting your program's environment». Freebsd.org. Consultado el 15 de enero de 2014. 
  78. «IBM Fix pack information for: WPAR Network Isolation - United States». ibm.com. 
  79. Available since TL 02.[78]
  80. Live Application Mobility in AIX 6.1
  81. Yes with logical volumes.
  82. https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--property=
  83. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups
  •   Datos: Q2079320

virtualización, nivel, sistema, operativo, virtualización, nivel, sistema, operativo, también, llamada, virtualización, basada, contenedores, contenerización, contenedorización, método, virtualización, sobre, núcleo, sistema, operativo, ejecuta, capa, virtuali. La virtualizacion a nivel de sistema operativo tambien llamada virtualizacion basada en contenedores contenerizacion 1 o contenedorizacion 2 es un metodo de virtualizacion en el que sobre el nucleo del sistema operativo se ejecuta una capa de virtualizacion que permite que existan multiples instancias aisladas de espacios de usuario en lugar de solo uno Tales instancias las cuales son llamadas contenedores contenedores de software jaulas o prisiones pueden verse y sentirse como un servidor real desde el punto de vista de sus duenos y usuarios Al software que permite el alojamiento de distintos contenedores se le llama motor de contenedores Ademas de mecanismos de aislamiento el kernel a menudo proporciona mecanismos de administracion de recursos para limitar el impacto de las actividades de un contenedor sobre otros contenedores Indice 1 Historia 2 Usos 3 Caracteristicas 3 1 Sobrecarga 3 2 Flexibilidad 3 3 Almacenamiento 4 Tipos 5 Comparacion con la virtualizacion de plataforma 6 Orquestadores de contenedores 7 Contenedores y sistemas distribuidos 8 Cual es la relacion que docker y kubernetes tienen con los contenedores 9 Implementaciones 10 Vease tambien 11 Notas 12 ReferenciasHistoria EditarComo origen de la virtualizacion a nivel de sistema operativo podemos senalar 1982 con la creacion de chroot por parte de Bill Joy A chroot se le pasan dos parametros uno que indica un directorio y el otro el comando a ejecutar Lo que hace chroot es ejecutar el comando pasado como parametro impidiendo que el y sus procesos hijos accedan a cualquier ruta fuera del directorio pasado tambien como parametro Se establece lo que se llama jaula chroot Estas restricciones son relativamente faciles de superar 3 Lo que se persigue es crear una zona con algo mas de seguridad donde poder ejecutar un programa del cual se desconfia y que puede presentar un comportamiento peligroso para la integridad del sistema En los anos 90 Poul Henning Kamp introduce las llamadas jaulas FreeBSD 4 a veces simplemente llamadas jaulas BSD Son el primer ejemplo de virtualizacion a nivel de sistema operativo Su objetivo es solventar la limitacion de chroot de que solo limita la parte del sistema de ficheros a la que pueden acceder los procesos dentro de la jaula El resto de recursos del sistema conjunto de usuarios del sistema los procesos en ejecucion el subsistema de red estan compartidos entre el sistema alojado y el servidor Las jaulas BSD extienden este modelo virtualizando no solamente el acceso al sistema de ficheros sino al conjunto de usuarios al subsistema de red del kernel de FreeBSD y unas cuantas cosas mas 5 Para ello elimina todos los privilegios de superusuario que podria afectar a objetos que no estan enteramente dentro de la jaula 4 Ademas cada jaula puede tener su propio conjunto de usuarios e incluso su propio usuario root limitado al entorno de la jaula no pudiendo realizar operaciones fuera del mismo 5 Es un sistema mas avanzado que crea un entorno virtual practicamente indistinguible de una maquina real o maquina virtual real 6 Tienen como limitacion sin embargo la obligacion de ejecutar la misma version del nucleo del sistema 6 De manera practicamente paralela a las jaulas FreeBSD aparece Linux VServer un sistema de virtualizacion para plataformas Linux que tambien permite aislar los recursos sistemas de archivos direcciones de red memoria 7 Este sistema fue anadido directamente al kernel de Linux en el ano 2001 7 Posteriormente tambien para Linux se lanzo OpenVZ y su version comercial Virtuozzo 7 Dentro de la familia de sistemas operativos Solaris aparece una tecnologia equivalente a las jaulas BSD llamada zonas Solaris La principal diferencia con las jaulas BSD es la baja sobrecarga que le anaden al sistema operativo y el hecho de que se les puedan asignar recursos especificos 6 En 2002 se introducen en el kernel de linux los namespaces Estos namespaces permiten particionar los recursos del kernel de modo que un grupo de procesos vea un conjunto de recursos y otro conjunto de procesos vea otro conjunto diferente de recursos La implementacion de namespaces fue mejorandose y ampliandose en versiones sucesivas del kernel En el ano 2006 Google lanza para plataformas Linux su herramienta Process Containers que fue disenada para limitar y aislar los accesos a recursos de la maquina como CPU memoria I O de disco red etc por parte de un grupo de procesos Este proyecto fue renombrado posteriormente al nombre Grupos de control o simplemente cgroups en 2007 y finalmente se fusiono con el kernel de Linux 7 Unos anos mas tarde nace para plataformas Linux el sistema LinuX Containers LXC 7 Este sistema apoyandose sobre namespaces y cgroups que ofrece el kernel de Linux consiguio la primera implementacion estable de un gestor de contenedores sobre Linux 7 Sobre LXC se ha construido LXD un administrador de contenedores del sistema que proporciona una mejor experiencia de usuario LXD ofrece un servicio similar a una maquina virtual en el sentido de que ofrece al usuario un sistema operativo completo con interfaces de red y almacenamiento pero en este caso con ciertas restricciones de acceso 8 Entre 2011 y 2013 surgen diversas tecnologias de gestion de contenedores como Warden LMCTFY siglas de Let Me Contain That For You y Docker 7 Warden desarrollo el primer modelo cliente servidor para administrar contenedores distribuidos en diferentes equipos 7 LMCTFY permitia que las aplicaciones propiamente dichas tuvieran capacidad para controlar el contenedor administrando sus propios subcontenedores o contenedores hijos 7 En 2013 surge Docker el cual permite gestionar el ciclo de vida de los contenedores de forma sencilla en comparacion con la herramientas anteriores 9 Esto provoca que Docker y por tanto los contenedores se empiecen a usar de forma masiva 7 La gran ventaja de Docker es que esta orientado a empaquetar dentro de los contenedores aplicaciones aisladas entre si 8 con todas las funcionalidades que necesitan para ser ejecutadas permitiendo integrarlas en los flujos de integracion distribucion continua 9 De esta forma obtiene una cadena unificada desde el desarrollo de aplicaciones hasta su puesta en produccion Teniendo un modelo de unico despliegue de las aplicaciones consigue reducir los tiempos de configuracion los tiempos de despliegue y mejorando en ese sentido el tiempo de puesta en produccion de las aplicaciones 9 De esta manera independientemente del entorno en el que ejecutemos el contenedor local desarrollo o entornos productivos siempre nos vamos a asegurar que se ejecuta de la misma manera 9 Para ello usa instantaneas de un contenedor a las que llama imagenes 10 que se ejecutan instanciandolas en lo que ya seria el contenedor 9 Podremos crear tantas instancias de una imagen como queramos y en los entornos que queramos 9 Tipicamente se tienen contenedores minimos efimeros sin estado que normalmente no se actualizan o reconfiguran sino que simplemente se reemplazan por completo 11 Si queremos datos persistentes se montan rutas del sistema subyacente en los contenedores por ejemplo usando los llamados volumenes 12 Inicialmente Docker uso como entorno de ejecucion por defecto LXC sin embargo mas tarde fue reemplazado por libcontainer 7 13 De esta forma consiguio poder ser usado con otras tecnologias de aislamiento distintas a LXC y poder acceder directamente a las APIs del kernel del sistema operativo y asi poder reducir las dependencias de librerias y aumentar la eficiencia del sistema 13 Sobre libcontainer Docker creo runC un motor de contenedores ligero de linea de comandos 14 15 Aunque Docker sigue siendo con diferencia la solucion mas usada durante estos ultimos anos han surgido otras alternativas como 7 16 17 18 rkt antes llamado Rocket Creado por Container Linux para proporcionar mas seguridad e interoperabilidad No obligaba a ejecutar todo como root no tenia demonios estaba controlado por linea de comandos CLI y tenia comodidades como verificacion criptografica y compatibilidad completa con imagenes de Docker 19 Docker fue ganando popularidad y rkt finalmente fue abandonado 19 Apache Mesos Permite ejecutar frameworks sobre los cuales se ejecuta la aplicacion y esta especialmente orientado a entornos de Big Data 20 Windows Server Container Las instancias de los contenedores se ejecutan a la vez sobre el mismo nucleo del anfitrion 21 Hyper V Container Los contenedores no comparten el mismo nucleo sino que se aisla entre cada uno utilizando la tecnologia de virtualizacion Hyper V 21 En 2015 se funda la Open Container Initiative OCI una asociacion de instituciones y empresas asociadas para disenar estandares abiertos sobre virtualizacion a nivel de sistema operativo para de esta forma asegurar que las plataformas de contenedores no esten vinculadas a ninguna empresa o proyecto concreto 22 En 2016 el mas importante orquestador de contenedores Kubernetes propuso Container Runtime Interface como la interfaz API para los motores de ejecucion de contenedores para de esta manera proponer una forma de conectarse a otros motores de ejecucion distintos de Docker 23 24 De esta forma podia integrarse con multiples motores de ejecucion de manera transparente 24 Poco a poco empezaron a salir motores de ejecucion que cumplian la especificacion de forma nativa y que a la vez soportaban las imagenes Docker 24 23 Por ejemplo cri o por debajo utiliza tipicamente runC o crun como motor de contenedores de bajo nivel ambas implementaciones OCI 19 siendo crun mas ligera 25 y cri containerd plugin anadido a containerd el motor de ejecucion de alto nivel de Docker y que por debajo utiliza tipicamente runC 19 24 23 Sin embargo Docker no cumplia CRI aunque desde la version uliliza ContainerD de forma interna y por eso se desarrollo el componente docker shim que hacia de interlocutor entre las dos partes para que sea posible utilizar Docker dentro de Kubernetes 24 En diciembre de 2020 Kubernetes anuncio que deprecaba el soporte a Docker en la proxima version y que en futuras versiones solo estarian disponibles los motores de ejecucion de contenedores que cumplieran CRI de manera nativa 24 23 Usos EditarEscenarios tipicos de uso de la virtualizacion a nivel de sistema operativo son En ambientes de alojamiento virtual permiten distribuir recursos de hardware finitos de forma segura entre un numero grande de usuarios mutuamente desconfiados Administradores de sistema lo usan para ahorrar hardware moviendo servicios que se encuentran en servidores distintos hacia un mismo servidor Permiten la separacion de varias aplicaciones en contenedores distintos para mejorar la seguridad independencia de hardware y brindar mecanismos de administracion de recurso adicionales La mejora de seguridad proporcionada aun asi no es de ninguna forma infalible Las implementaciones de virtualizacion a nivel de sistema operativo capaces de hacer migraciones en vivo pueden ser utilizadas para realizar balanceo de carga dinamico de contenedores entre nodos en un grupo Caracteristicas EditarSobrecarga Editar La virtualizacion a nivel de sistema operativo normalmente impone poca o ninguna sobrecarga porque los programas en particiones virtuales utilizan la interfaz de llamada de sistema normal del sistema operativo y no necesitan de emulacion o ser ejecutados en una maquina virtual intermedia como es el caso con virtualizadores a sistema completo como VMware ESXi QEMU o Hyper V y paravirtualizadores como Xen o UML Esta forma de virtualizacion ademas no requiere soporte en hardware para actuar eficientemente Flexibilidad Editar La virtualizacion a nivel de sistema operativo no es tan flexible como otros enfoques de virtualizacion porque no puede hospedar un sistema operativo diferente del anfitrion o un kernel distinto Por ejemplo con Linux no hay problemas con las distribuciones diferentes pero otros sistemas operativos como Windows no puede ser virtualizados Solaris vence parcialmente la limitacion descrita anteriormente con su caracteristica de zonas marcadas la cual proporciona la capacidad de ejecutar un entorno dentro de un contenedor que emula un Solaris version 8 o 9 en un Solaris 10 anfitrion Las zonas marcadas de Linux tambien estan disponibles en sistemas Solaris basados en x86 proporcionando un espacio de usuario de Linux completo y soporte para la ejecucion de aplicaciones de Linux ademas Solaris proporciona las herramientas necesarias para instalar otras distribuciones de Linux como Red Hat Enterprise Linux 3 x o CentOS 3 x dentro de zonas marcadas de Linux 26 27 Sin embargo en 2010 las zonas marcadas de Linux fueron eliminadas de Solaris en 2014 eran reintroducidas en Illumos la rama de codigo abierto de Solaris brindando soporte a los kernels de Linux de 32 bits 28 Almacenamiento Editar Algunas implementaciones de virtualizacion a nivel de sistema operativo proporcionan mecanismos copy on write a nivel de archivos En la mayoria de los casos un sistema de ficheros estandar es compartido entre particiones y aquellas particiones que cambian los archivos automaticamente crean sus propias copias Con este sistema es mas sencillo realizar copias de seguridad ademas hace un uso mas eficiente del espacio en disco y resulta mas sencillo de guardar en cache que los esquemas copy on write a nivel de bloque comunes en virtualizadores a sistema completo Los virtualizadores a sistema completo sin embargo pueden trabajar con sistemas de archivos no nativos y crear y restaurar copias del estado actual completo del sistema Tipos EditarPodemos clasificar los sistemas de virtualizacion de sistemas operativos segun el tipo de servicios que ofrecen en 29 11 30 Contenedores de infraestructura o sistema de contenedores Ofrecen un servicio que permite ejecutar multiples instancias de sistemas operativos de manera aislada Ofrece todo lo necesario para que el sistema contenido pueda trabajar tales como CPU network I O Es similar a una maquina virtual pero mas rapido y ligero Ejemplos de estos sistemas son LXC y LXD Contenedores de procesos o Contenedores de aplicaciones Ofrecen un sistema para empaquetar aplicaciones y todas sus dependencias y por tanto son muy utiles para el desarrollo y distribucion de aplicaciones Por ejemplo en integracion continua es habitual desarrollar con contenedores para eliminar las diferencias de entorno entre produccion y desarrollo y facilitar la migracion del entorno Este tipo de contenedores son muy usados en la computacion en la nube para distribuir las aplicaciones Ejemplos de estos sistemas son Docker y systemd nspawn Tipicamente se tienen contenedores minimos efimeros sin estado que normalmente no se actualizan o reconfiguran sino que simplemente se reemplazan por completo 11 Contenedores sandbox Enfocados en proveer aislamiento mediante un entorno que permita ejecutar contenedores en un espacio escapsulado donde tiene acceso restringido a recursos del sistema operativo o datos del usuario sandbox Ejemplos de estos sistemas son Firejail 31 nsroot 32 nsjail 32 FreeBSD jail sandboxie 33 y Bubblewrap El que un sistema este mas enfocado en proveer un tipo de servicio no quiere decir que no pueda proveer el otro Por ejemplo Docker es un contenedor de aplicaciones pero permite proporcionar espacio aislado Sin embargo al ser un software bastante grande y con muchas funciones expande la superficie de ataque innecesariamente y por tanto no es la mejor forma para proporcionar espacio aislado 34 Ademas se pueden combinar por ejemplo se puede usar LXD para proporcionar sistemas Linux completos a sus usuarios que luego pueden instalar Docker dentro de su contenedor LXD para ejecutar el software que desean 11 Comparacion con la virtualizacion de plataforma EditarComparado con la virtualizacion de plataforma la virtualizacion a nivel de sistema operativo 6 35 Es mucho mas ligera Puede llegar a tener un rendimiento en la ejecucion muy proximo al nativo reduciendo por ejemplo el consumo de memoria por servidor virtual u optimizando su entrada y salida debido a que un solo kernel controla el acceso a los dispositivos y recursos Esta ligereza permite un tiempo de arranque mas reducido y que la misma maquina permita admitir mas contenedores que maquinas virtuales No requiere un hipervisor para funcionar No requiere ningun mecanismo hardware Permite un mayor control desde fuera desde el anfitrion del que se pueda tener usando maquinas virtuales El soporte de contenedores implica que haya que realizar diversas modificaciones en el kernel del sistema operativo anfitrion sobre todo para hacer creer a los contenedores que son ejecutadas en un entorno exclusivo Al compartir el mismo nucleo con el servidor fisico anfitrion Un fallo en el kernel puede provocar la caida de la totalidad de los contenedores alojados unico punto de fallo Por lo general los contenedores no pueden correr sistemas operativos que difieran del instalado en el sistema anfitrion aunque en algunos casos es posible que ejecuten diferentes versiones de la misma distribucion o incluso distintas distribuciones Linux Por ejemplo FreeBSD jails permite ejecutar diferentes versiones de FreeBSD sobre un unico kernel FreeBSD por lo tanto permitiendo tener diferentes versiones de aplicaciones procesos librerias etc Otro ejemplo Linux V Server FreeVPS y OpenVZ pueden ejecutar diferentes distribuciones Linux en los servidores virtuales aunque siempre compartiendo el mismo kernel Con docker en Windows se pueden ejecutar contenedores Linux gracias a la capa de compatibilidad WSL que permite ejecutar ejecutables de Linux nativamente en Windows 36 Las librerias herramientas utilidades que ejecuten los servidores virtuales deben estar compilados para el mismo juego de instrucciones y hardware que utiliza el sistema operativo anfitrion Mayor portabilidad Las aplicaciones que se ejecutan en contenedores se pueden poner en marcha facilmente en sistemas operativos y plataformas de hardware diferentes Funcionamiento mas constante Los equipos de DevOps saben que las aplicaciones en contenedores van a ejecutarse igual independientemente de donde se pongan en marcha Mayor eficiencia Los contenedores permiten poner en marcha aplicar parches o escalar las aplicaciones con mayor rapidez Mejor desarrollo de aplicaciones Los contenedores respaldan los esfuerzos agiles y de DevOps para acelerar los ciclos de desarrollo prueba y produccion Orquestadores de contenedores EditarLas herramientas que realizan orquestacion de contenedores llamados Orquestadores de contenedores son herramientas que dirigen el comportamiento de los contenedores pudiendo automatizar el despliegue la gestion y el escalado de las aplicaciones basadas en contenedores 7 Estas herramientas son necesarias en entornos en los que tenemos que manejar un sistema con muchos contenedores que dan distintos servicios base de datos servidor web metricas la propia aplicacion y desplegados sobre distintos servidores 7 37 Estos contenedores atienden una demanda determinada que tiene que ser satisfecha por unos recursos los cuales se tienen que escalar actualizar etc sin repercutir en el usuario de la aplicacion 7 Por tanto hay que controlar y dirigir la creacion de contenedores verificar su correcta ejecucion gestionar los errores 37 Ejemplos de orquestadores de contenedores son docker compose Docker Swarm Rancher y Kubernetes 7 Algunos gestores de contenedores como Apache Mesos aportan sus propios mecanismos de orquestacion y no necesitan un herramienta externa para realizar esa tarea Contenedores y sistemas distribuidos EditarUn Sistema distribuido es aquel en el que los componentes localizados en la red se comunican y coordinan sus acciones mediante el envio de mensajes Los Sistemas Distribuidos permiten que los recursos de la red no se encuentren centralizados en una sola maquina pudiendo estar en varias e incluso en lugares diferentes Como se menciono anteriormente los contenedores son una forma de virtualizacion del sistema operativo Estos pueden llegar a utilizarse para ejecutar cualquier cosa desde un micro servicio hasta una aplicacion de mayor nivel La manera mas sencilla de relacionarlos es tomando en cuenta que si el objetivo de los sistemas distribuidos es no centralizar los recursos en una sola maquina los contenedores hacen mas sencilla esta distribucion al requerir menos recursos que un sistema operativo completo facilitar una mayor portabilidad al usuario ya que como se menciono las aplicaciones que se ejecutan en estos se pueden poner en operacion de manera mas sencilla y rapida que en un sistema operativo Otro punto fuerte es que se puede poner a operar en plataformas de hardware diferentes facilitando aun mas lo que se busca con los sistemas distribuidos Cual es la relacion que docker y kubernetes tienen con los contenedores EditarDocker es un popular entorno en tiempo de ejecucion que se usa para crear y construir software dentro de contenedores Usa imagenes de Docker instantaneas de copia en escritura para poner en marcha aplicaciones o software en contenedores en varios entornos desde el desarrollo hasta las pruebas y la produccion Docker se basa en estandares abiertos y funciona en la mayoria de los entornos operativos mas comunes incluidos Linux Microsoft Windows y otras infraestructuras locales o basadas en la nube Sin embargo las aplicaciones en contenedores pueden ser complicadas Durante la produccion muchas pueden requerir cientos o miles de contenedores independientes Es en este punto donde los entornos en tiempo de ejecucion de contenedores como Docker se benefician del uso de otras herramientas para orquestar o gestionar todos los contenedores en funcionamiento Una de las herramientas mas populares para este fin es Kubernetes un orquestador de contenedores que reconoce varios entornos en tiempo de ejecucion de contenedores incluido Docker Kubernetes orquesta el funcionamiento de varios contenedores juntos de forma armonica Gestiona areas como el uso de recursos de infraestructura subyacentes para aplicaciones en contenedores por ejemplo la cantidad de recursos de computacion red y almacenamiento necesarios Las herramientas de orquestacion como Kubernetes facilitan la automatizacion y el escalado de cargas de trabajo basadas en contenedores para entornos de produccion activos Implementaciones EditarA continuacion se muestra tabla con algunas implementaciones de motores de contenedores Mecanismo Sistema operativo Licencia Disponible desde o entre CaracteristicasAislamiento de sistema de ficheros Copy on write Cuotas de disco Limite de entrada salida Limites de memoria Cuotas de CPU Aislamiento de red Virtualizacion anidada Puntos de control de particiones y migraciones en vivo Aislamiento de privilegios de administracionchroot La mayoria de los sistemas operativos estilo Unix Cambia de acuerdo al sistema operativo 1982 nbsp Parcial 39 nbsp No nbsp No nbsp No nbsp No nbsp No nbsp No nbsp Si nbsp No nbsp NoDocker Linux 40 Licencia Apache 2 0 2013 nbsp Si nbsp Si nbsp No directamente nbsp Si desde la version 1 10 nbsp Si nbsp Si nbsp Si nbsp Si nbsp No nbsp Si desde la version 1 10 Linux VServer contexto de seguridad Linux Windows Server 2016 GNU GPLv2 2001 nbsp Si nbsp Si nbsp Si nbsp Si 41 nbsp Si nbsp Si nbsp Parcial 42 nbsp No nbsp Partial 44 lmctfy Linux Licencia Apache 2 0 2013 nbsp Si nbsp Si nbsp Si nbsp Si 41 nbsp Si nbsp Si nbsp Parcial 42 nbsp No nbsp Partial 44 LXC Linux GNU GPLv2 2008 nbsp Si 45 nbsp Si nbsp Parcial nbsp Parcial 46 nbsp Si nbsp Si nbsp Si nbsp Si nbsp No nbsp Si 45 LXD 47 Linux Licencia Apache 2 0 2015 nbsp Si nbsp Si nbsp Parcial ver LXC nbsp Parcial ver LXC nbsp Si nbsp Si nbsp Si nbsp Si nbsp Parcial 49 nbsp SiOpenVZ Linux GNU GPLv2 2005 nbsp Si nbsp Si ZFS nbsp Si nbsp Si 51 nbsp Si nbsp Si nbsp Si 52 nbsp Parcial 54 nbsp Si nbsp Yes 56 Virtuozzo Linux Windows Propietaria 2000 57 nbsp Si nbsp Si nbsp Si nbsp Si 58 nbsp Si nbsp Si nbsp Si 52 nbsp Parcial 60 nbsp Si nbsp SiContenedores Solaris Zones illumos OpenSolaris Solaris CDDL Propietaria 2004 nbsp Si nbsp Si ZFS nbsp Si nbsp Parcial 62 nbsp Si nbsp Si nbsp Si 63 64 65 nbsp Parcial 66 nbsp Parcial 67 68 nbsp Yes 70 Prision FreeBSD FreeBSD Licencia BSD 2000 71 nbsp Si nbsp Si ZFS nbsp Si 72 nbsp Si nbsp Si 73 nbsp Si nbsp Si 74 nbsp Si nbsp Parcial 75 76 nbsp Si 77 sysjail OpenBSD NetBSD Licencia BSD 2006 2009 nbsp Si nbsp No nbsp No nbsp No nbsp No nbsp No nbsp Si nbsp No nbsp No WPARs AIX Propietaria 2007 nbsp Si nbsp No nbsp Si nbsp Si nbsp Si nbsp Si nbsp Si 79 nbsp No nbsp Si 80 HP UX Containers SRP HPUX Propietaria 2007 nbsp Si nbsp No nbsp Parcial 81 nbsp Si nbsp Si nbsp Si nbsp Si nbsp Si Cuentas virtuales de iCore Windows XP Propietaria Freeware 2008 nbsp Si nbsp No nbsp Si nbsp No nbsp No nbsp No nbsp No nbsp No Sandboxie Windows Propietaria Freeware 2004 nbsp Si nbsp Si nbsp Parcial nbsp No nbsp No nbsp No nbsp Parcial nbsp No nbsp No nbsp SiSpoon Windows Propietaria 2012 nbsp Si nbsp Si nbsp No nbsp No nbsp No nbsp No nbsp Si nbsp No nbsp No nbsp Sisystemd nspawn Linux GNU LGPLv2 1 2010 nbsp Si nbsp Si nbsp Si 82 83 nbsp Si 82 83 nbsp Si 82 83 nbsp Si 82 83 nbsp Si nbsp SiVMware ThinApp Windows Propietaria 2008 nbsp Si nbsp Si nbsp No nbsp No nbsp No nbsp No nbsp Si nbsp No nbsp No nbsp SiVease tambien EditarVirtualizacion CoreOS Hypervisor Servidor Virtual Privado VPS Notas EditarReferencias Editar Virtualizacion basada en contenedores y SD WAN Guillermo Lopez teldat com 3 octubre 2018 La contenerizacion de aplicaciones Hector Gil plotandesign com 28 de marzo de 2019 How to break out of a chroot jail 2002 Archivado desde el original el 22 de septiembre de 2013 Consultado el 7 de mayo de 2013 a b Building Systems to be Shared Securely POUL HENNING KAMP y ROBERT WATSON ACM QUEUE Julio Agost de 2004 a b Capitulo 15 Jaulas Manual de FreeBSD 1995 2010 a b c d Virtualizacion ligera usando contenedores Introduccion Material docente para la asignatura Infraestructura Virtual JJ Merelo Universidad de Granada a b c d e f g h i j k l m n n o Personalizacion de entorno de desarrollo y despliegue sobre contenedores Carlos Rodriguez Hernandez Trabajo Fin de Grado en Ingenieria de las Tecnologias de Telecomunicacion Universidad de Sevilla 2019 a b LXD vs Docker Ranvir Singh 2017 a b c d e f Que es Docker Victor Cuervo 26 de noviembre de 2019 Trabajando con imagenes en Docker Marcos Saiz 2019 a b c d LXD 2 0 Introduction to LXD 1 12 Stephane Graber 11 de marzo de 2016 Volumenes y datos persistentes en Docker Pablo 2 de enero de 2019 a b LXC vs libcontainer Anusheh Zohair Mustafeez runC The little container engine that could Phil Estes 15 de agosto de 2016 What s Running My Containers A review of runtimes amp standards Phil Estes Una guia no tan rapida de Docker y Kubernetes Mauricio Collazos 19 de junio de 2018 Virtualizacion con contenedores Docker alternativas ionos es 9 de julio de 2019 5 Container Alternatives to Docker Bill Doerrfeld 22 de enero de 2019 a b c d A Comprehensive Container Runtime Comparison Evan Baker 10 de junio de 2020 Apache Mesos Viviana 23 de julio de 2018 a b Containers con Windows Server 2016 Josep Ma Solanes 5 de abril de 2016 Open Container Initiative searchitoperations techtarget com Noviembre de 2015 a b c d Psicosociales en el mundo de los contenedores Kubernetes depreca a Docker ecardenas 3 de diciembre de 2020 a b c d e f Kubernetes ha deprecado Docker Inigo Telleria 4 de diciembre de 2020 An introduction to crun a fast and low memory footprint container runtime Dan Walsh et ali 3 de agosto de 2020 System Administration Guide Oracle Solaris Containers Resource Management and Oracle Solaris Zones Chapter 16 Introduction to Solaris Zones Oracle Corporation 2010 Consultado el 2 de septiembre de 2014 System Administration Guide Oracle Solaris Containers Resource Management and Oracle Solaris Zones Chapter 31 About Branded Zones and the Linux Branded Zone Oracle Corporation 2010 Consultado el 2 de septiembre de 2014 Bryan Cantrill 28 de septiembre de 2014 The dream is alive Running Linux containers on an illumos kernel slideshare net Consultado el 10 de octubre de 2014 Introduccion a contenedores Docker Jose David 28 de septiembre de 2016 Bubblewrap Firejail Putting a program in its own little container Eli Billauer 11 de junio de 2020 a b nsroot Minimalist Process Isolation Tool Implemented With Linux Namespaces Inge Alexander Raknes Bjorn Fjukstad y Lars Ailo Bongo University of Tromso Sandbox cortafuegos net Sandbox your applications with Firejail nachoparker 29 de octubre de 2017 Virtualizacion de servidores de telefonia IP en GNU LINUX Introduccion a la virtualizacion Eugenio Villar y Julio Gomez Universidad de Almeria Junio de 2010 Como desarrollar con Docker en Linux dentro de Windows sin arranque dual WSL 2 Henrique Marques Fernandes 18 de junio de 2020 a b Comparativa de orquestadores Docker Swarm vs Kubernetes vs Apache Mesos Carlos Ivan Morales Terrer 21 de marzo de 2019 3 5 Limiting your program s environment freebsd org Root user can easily escape from chroot Chroot was never supposed to be used as a security mechanism 38 Docker drops LXC as default execution environment InfoQ a b Utilizing the CFQ scheduler there is a separate queue per guest a b Networking is based on isolation not virtualization Linux VServer Paper Secure Capabilities a b A total of 14 user capabilities are considered safe within a container The rest may cannot be granted to processes within that container without allowing that process to potentially interfere with things outside that container 43 a b Graber Stephane 1 de enero de 2014 LXC 1 0 Security features 6 10 Consultado el 12 de febrero de 2014 LXC now has support for user namespaces LXC is no longer running as root so even if an attacker manages to escape the container he d find himself having the privileges of a regular user on the host I O rate limiting is supported when using Btrfs Kouka Abdelmonam 2015 Ubuntu Server Essentials Packt Publishing Ltd p 124 ISBN 9781785282768 Consultado el 31 de marzo de 2016 Also known as the Linux container hypervisor LXD is the next generation hypervisor provided by Canonical It combines the density of containers with the manageability of virtual machines Live Migration in LXD Ubuntu Insights Web site In progress Works on non systemd OS 48 I O priorities for containers OpenVZ Virtuozzo Containers Wiki Available since Linux kernel 2 6 18 028stable021 Implementation is based on CFQ disk I O scheduler but it is a two level schema so I O priority is not per process but rather per container 50 a b Each container can have its own IP addresses firewall rules routing tables and so on Three different networking schemes are possible route based bridge based and assigning a real network device NIC to a container Docker inside CT Docker containers can run inside OpenVZ containers 53 Container OpenVZ Virtuozzo Containers Wiki Each container may have root access without possibly affecting other containers 55 Initial public prerelease of Virtuozzo named ASPcomplete at that time Available since version 4 0 January 2008 Parallels Virtuozzo Now Provides Native Support for Docker Docker containers can run inside Virtuozzo containers 59 Pijewski Bill Our ZFS I O Throttle Yes with illumos 61 See OpenSolaris Network Virtualization and Resource Control for more details Network Virtualization and Resource Control Crossbow FAQ Archivado el 1 de junio de 2008 en Wayback Machine Managing Network Virtualization and Network Resources in Oracle Solaris 11 2 Only when top level is a KVM zone illumos or a kz zone Oracle Starting in Solaris 11 3 Beta Solaris Kernel Zones may use live migration Cold migration shutdown move restart is implemented Oracle Solaris 11 1 Administration Oracle Solaris Zones Oracle Solaris 10 Zones and Resource Management E29024 pdf pp 356 360 Available within an archive Non global zones are restricted so they may not affect other zones via a capability limiting approach The global zone may administer the non global zones 69 Contain your enthusiasm Part Two Jails Zones OpenVZ and LXC Jails were first introduced in FreeBSD 4 0 in 2000 Check the allow quotas option and the Jails and File Systems section on the FreeBSD jail man page for details Hierarchical Resource Limits FreeBSD Wiki Wiki freebsd org 27 de octubre de 2012 Consultado el 15 de enero de 2014 Implementing a Clonable Network Stack in the FreeBSD Kernel usenix org 13 de junio de 2003 VPS for FreeBSD Consultado el 20 de febrero de 2016 Announcement VPS OS Virtualization alpha release Consultado el 20 de febrero de 2016 3 5 Limiting your program s environment Freebsd org Consultado el 15 de enero de 2014 IBM Fix pack information for WPAR Network Isolation United States ibm com Available since TL 02 78 Live Application Mobility in AIX 6 1 Yes with logical volumes a b c d https www freedesktop org software systemd man systemd nspawn html property a b c d https access redhat com documentation en us red hat enterprise linux 7 html resource management guide sec modifying control groups nbsp Datos Q2079320 Obtenido de https es wikipedia org w index php title Virtualizacion a nivel de sistema operativo amp oldid 149708434, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos