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:
- Emulación: La emulación es un enfoque de virtualización que permite ejecutar un sistema operativo o una aplicación en un entorno que simula el hardware original. En este caso, el hardware virtualizado es diferente al hardware físico subyacente. Un ejemplo común de emulación es el software de emulación de videojuegos arcade antiguos, donde se recrean las características de una consola de juegos con hardware de los año 80.
La emulación proporciona una gran flexibilidad, ya que permite ejecutar sistemas operativos y aplicaciones diseñadas para un hardware específico en un hardware diferente. Sin embargo, debido a la naturaleza de la emulación, es menos eficiente en términos de rendimiento que otros enfoques de virtualización, ya que hay que virtualizar por completo el hardware emulado.
- Virtualización tradicional: La virtualización tradicional, también conocida como virtualización completa, se basa en la creación de máquinas virtuales (VM) que ejecutan sistemas operativos y aplicaciones en un hardware virtualizado e independiente unas de otras. En este caso, cada máquina virtual tiene que tener su propio sistema operativo independiente del SO anfitrión. Ejemplos populares de software de virtualización tradicional son VMware, Microsoft Hyper-V, VirtualBox, etc. Las máquinas virtuales creadas necesitan ser ejecutadas sobre un software especial que las interprete y gestione, llamado hipervisor, también conocido como VMM (Virtual Machine Monitor), que es el que se encarga de realizar las peticiones hardware al sistema operativo anfitrión o emular el hardware que no esté disponible en la máquina real. Su función principal es dividir los recursos físicos de la máquina anfitrión en múltiples entornos virtuales.
La virtualización tradicional permite ejecutar múltiples sistemas operativos en un único servidor físico y proporciona un alto nivel de aislamiento entre las máquinas virtuales. Cada máquina virtual se comporta como si estuviera ejecutándose en su propio hardware dedicado. Esto facilita la consolidación de servidores y la gestión de infraestructuras complejas.
Existen dos tipos principales de hipervisores (gestores e interpretes de VM):
- Hipervisor de tipo 1 (o "bare metal"): Este tipo de hipervisor se ejecuta directamente sobre el hardware físico del servidor. No requiere de un sistema operativo anfitrión adicional. Los hipervisores de tipo 1 ofrecen un mayor rendimiento y eficiencia, ya que pueden acceder directamente a los recursos del hardware. Algunos ejemplos populares de hipervisores de tipo 1 son VMware ESXi, Microsoft Hyper-V y Xen.
- Hipervisor de tipo 2 (o "hosted"): Este tipo de hipervisor se ejecuta como un software dentro de un sistema operativo anfitrión. El sistema operativo anfitrión proporciona los controladores de dispositivo y los servicios básicos, mientras que el hipervisor se ejecuta como una aplicación dentro de él. Los hipervisores de tipo 2 son más fáciles de instalar y configurar, pero pueden tener un rendimiento ligeramente inferior debido a la capa adicional del sistema operativo anfitrión. Algunos ejemplos de hipervisores de tipo 2 son VMware Workstation, VirtualBox, QEMU y Parallels Desktop.
- Hipervisor híbrido: Además de estos dos tipos principales, también existe una variante llamada "hipervisor híbrido", que combina características de los hipervisores de tipo 1 y tipo 2. Estos hipervisores se ejecutan directamente sobre el hardware pero también requieren de un sistema operativo anfitrión mínimo para proporcionar servicios adicionales. Un ejemplo de este tipo híbrido puede ser Proxmox, que necesita de una distribución Debian con el kernel de Linux y el hipervisor de tipo 2 de código abierto QEMU, como base para la gestión de las máquinas virtuales, y KVM (Kernel-based Virtual Machine) para la gestión de contenedores LXC.
- Paravirtualización: La paravirtualización es un enfoque de virtualización en el que el sistema operativo invitado se modifica para ser consciente de que se está ejecutando en un entorno virtualizado. A diferencia de la virtualización tradicional, donde se emula el hardware, en la paravirtualización se utilizan interfaces especiales para acceder al hardware subyacente de manera más eficiente.
En la paravirtualización, el sistema operativo invitado y el sistema operativo anfitrión colaboran para mejorar el rendimiento y la eficiencia general. Esto permite una comunicación más rápida y directa entre el sistema operativo invitado y el hardware real, lo que resulta en un mejor rendimiento en comparación con la virtualización tradicional. Las máquinas paravirtualizadas comparten el kernel del SO anfitrión y por tanto, no se puede virtualizar máquinas con sistemas operativos incompatibles.
El hipervisor ofrece un interfaz especial para acceder a los recursos. En ocasiones, es necesario la adaptación del sistema operativo de la máquina virtual. Ofrecen el máximo rendimiento, pero no se pueden usar sistemas operativos sin modificaciones o hardware especifico.
- Paravirtualización ligera: También llamada virtualización a nivel de sistema operativo, o virtualización basada en contenedores. 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. A cada espacio de usuario aislado lo llamamos contenedor. Por lo tanto, un contenedor es un conjunto de procesos aislado, que se ejecuta en un servidor, y que accede a un sistema de ficheros propio, tiene una configuración red propio y accede a los recursos del host (memoria y CPU).
Podemos hacer la siguiente clasificación de contenedores:
- Los contenedores hardware o de sistema.
- Los contenedores software o de aplicación.