2.- Tipos de virtualización

En el campo de la computación en la nube, la virtualización desempeña un papel fundamental al permitir la creación de entornos virtuales que aprovechan eficientemente los recursos de hardware. Existen diferentes tipos de virtualización, y en esta sección vamos a explorar tres de ellos: Emulación, virtualización y paravirtualización. A continuación, exploraremos estos tipos de virtualización y proporcionaremos ejemplos de cada uno:


2.1.- Contenedores de sistemas (LXC)

La virtualización ligera a nivel de hardware, también conocida como contenedores hardware, es una tecnología que permite ejecutar múltiples instancias aisladas de sistemas operativos en un único servidor físico pero aprovechando el sistema operativo anfitrión para acceder al hardware. Un ejemplo común de esta tecnología es LinuX Containers (LXC) que aprovecha el núcleo de Linux del SO del servidor anfitrión (o host).

Evidentemente, no podemos crear un contenedor hardware LXC con un núcleo del SO diferente al de Linux.

Los contenedores a nivel de hardware ofrecen una gran flexibilidad y agilidad, ya que se pueden iniciar y detener rápidamente, y ocupan menos recursos en comparación con las máquinas virtuales convencionales. Esto los hace ideales para implementar aplicaciones aisladas en entornos de desarrollo, pruebas o producción. Permite una mayor densidad de utilización de recursos, al compartir eficientemente el hardware del sistema, lo que resulta en un menor consumo energético y reserva de recursos en comparación con la virtualización completa. Además, los contenedores LXC son rápidos de crear, clonar y desplegar, lo que facilita la escalabilidad y la replicación de distintos escenarios.

Son una opción más interesante que los contenedores de aplicaciones, como por ejemplo Docker, cuando tenemos la necesidad de emular un hardware específico pero sin sobrecargar al servidor con la virtualización completa de las tradicionales máquinas virtuales (un ejemplo de máquina virtual tradicional son las creadas con VirtualBox) 

La virtualización LXC se basa en la creación de contenedores ligeros y aislados de los errores producidos en otros LXC. Estos contenedores permiten ejecutar múltiples instancias de sistemas operativos Linux de forma eficiente y compartiendo los recursos del sistema anfitrión, como CPU, memoria y almacenamiento.

Cada contenedor LXC incluye su propio entorno de usuario y su espacio de archivos aislado, lo que permite la ejecución de aplicaciones y servicios de manera independiente dentro del contenedor. Los contenedores pueden comunicarse entre sí y con el sistema operativo anfitrión mediante mecanismos de comunicación definidos, como sockets UNIX o redes virtuales utilizando la pila del protocolo TCP/IP.

El hardware de los contenedores LXC puede ser configurado, cómo ejemplo podemos reservar memoria máxima de RAM para utilizar, número de núcleos o hilos del procesador a utilizar, etc... Es decir, podemos hacer lo mismo que podías hasta ahora hacer con las máquinas virtuales pero sin tener que emular el hardware por completo.

En resumen, los contenedores de sistema LXC es una tecnología que permite la virtualización a nivel de sistema operativo en entornos Linux, a través de paravirtualización ligera para compartir los recursos del sistema anfitrión. Esta tecnología ofrece beneficios en términos de eficiencia de recursos y escalabilidad en el desarrollo, pruebas y despliegue continuo de aplicaciones.


2.2.- Contenedores de aplicación (Docker)

La virtualización a nivel de aplicación se basa en el uso de contenedores para encapsular una aplicación y sus dependencias en un entorno aislado. Docker es una de las tecnologías más populares que se utiliza en este enfoque pero no la única.

Un contenedor Docker permite empaquetar una aplicación junto con todas las bibliotecas y archivos necesarios para su ejecución en un entorno aislado. Los contenedores Docker son livianos, portátiles y se pueden ejecutar en cualquier sistema operativo compatible con Docker (Linux, Windows sobre emulación del kernel de Linux, Mac, etc).

La virtualización a nivel de aplicación ofrece ventajas en términos de portabilidad, eficiencia y escalabilidad. Permite a los desarrolladores crear, probar y desplegar aplicaciones de manera más rápida y sencilla, asegurando que la aplicación se ejecute de la misma manera en diferentes entornos sin la necesidad de preocuparse del hardware concreto subyacente.

Tanto los contenedores sistemas como los contenedores de aplicación son tecnologías importantes en el campo de la computación en la nube. Cada una tiene sus propias características y casos de uso, y es importante comprender sus diferencias y ventajas para tomar decisiones informadas al diseñar y administrar infraestructuras en la nube.

Con Docker, puedes agrupar una aplicación en una especie de "paquete" estándar que se utiliza para el desarrollo y despliegue de software. Este paquete enjaula la aplicación y sus dependencias (librerías) necesarias para que la aplicación funcione sin problemas en cualquier entorno informático.

Antes de Docker, las empresas solían usar máquinas virtuales (VM) para ejecutar aplicaciones aisladas. Estas máquinas virtuales permiten a los desarrolladores dividir un servidor físico en varios. Sin embargo, este enfoque tiene algunas desventajas:

Cada máquina virtual contiene una copia completa del sistema operativo y de la aplicación, así como otros archivos necesarios para su funcionamiento. Estos archivos pueden ocupar mucho espacio en el disco duro, a veces decenas de gigabytes. Además, la virtualización del hardware para cada máquina virtual puede requerir muchos recursos y ralentizar el rendimiento.

El arranque de las máquinas virtuales tradicionales suele ser incluso más lento que el arranque del SO de la máquina anfitriona.

Cuando cae un contenedor por un fallo del software de la propia aplicación o de alguna de sus dependencias, puede volverse a inicializar el contenedor completo en segundos, sin producirse apenas corte en el servicio.

Sin embargo, los contenedores de aplicaciones no nos sirven para emular escenarios concretos con hardware concretos, ya que la filosofía es la abstracción completa del hardware de la máquina anfitriona. No están diseñados, por tanto, para configurar o limitar el tipo de hardware del contenedor, al contrario de los contenedores LXC, aunque se podrían hacer utilizando comandos especiales.

Los contenedores Docker, originalmente, son un derivado de los contenedores LXC pero pensados para ser utilizados por desarrolladores software y usuarios, utilizando en principio, todos los recursos disponibles por el sistema operativo del host anfitrión.

Es muy común utilizar contenedores Docker sobre un contenedor LXC para limitar el hardware que pueda utilizar las aplicaciones ejecutadas en Docker. 

En resumen, los contenedores de aplicaciones (Docker) encapsulan aplicaciones y sus dependencias, abstrayéndose por completo del hardware del servidor real sin perder la velocidad nativa de una instalación tradicional y optimizando los recursos, pudiendo ser compartidos por otros contenedores o procesos. Las ventajas en la seguridad, escalabilidad, velocidad de cómputo y economía de recursos hacen que esta tecnología sea la base del éxito de la computación en la nube.


Revisión #11
Creado 30 abril 2024 14:33:19 por Daniel Cano Verdú
Actualizado 30 abril 2024 16:54:56 por Daniel Cano Verdú