Virtualización y containers en sistemas GNU/Linux: Estado del arte

Este artículo fue publicado en la revista Espirito Livre edición Paraguay en Febrero 2015.  En el mismo se encuentra una introducción a la virtualización, el uso de containers y la nueva generación de sistemas operativos minimalistas para GNU/Linux.

Que es la virtualización

La virtualización es una tecnología que nos posibilita crear innumerables máquinas virtuales en un único hardware, sea éste un PC o un servidor. Una máquina virtual es una representación lógica de un PC que compartirá los recursos del mismo.

La ventaja de usar esta tecnología se basa en que nos permite optimizar los recursos de hardware mediante la consolidación de servidores y aplicaciones, con el consecuente ahorro de dinero y tiempo en la gestión de los mismos.

Si bien en este artículo hablaremos de virtualización de sistemas operativos y aplicaciones, también podemos virtualizar sistemas de archivos (GSF, HDFS, DSF), almacenamiento (discos duros), bancos de datos, redes definidas por software (SDN) o funciones de red (NFV).

Tipos de virtualización

Tenemos tres tipos de virtualización: total (simulación casi total del hardware en la máquina virtual), parcial (el software a veces se tiene que adaptar) y paravirtualización (el hardware no es simulado).

Las tres técnicas difieren en la complejidad de la implementación, el alcance del soporte al sistema operativo y el nivel de acceso a los recursos comunes. De entre ellas, la virtualización total ofrece el mejor desempeño y escalabilidad comparada con las otras opciones.

Componentes de un entorno virtualizado

Los componentes de un entorno de virtualización son el “hypervisor” (“virtual machine monitor” ó VMM) y la maquina virtual (“virtual machine” ó VM de sus siglas en inglés).

El “hypervisor” es una capa de hardware, firmware o software que funciona como “host”, creando y hospedando las máquinas virtuales. El “hypervisor” puede ser nativo (“bare metal”) funcionando entre la capa de hardware y la del sistema operativo (ejemplos son KMV, Oracle VM Server for x86, Citrix XenServer, VMware ESX/ESXi, Microsoft Hyper-V) ó “hosted” (VirtualBox, VMWare), alojado dentro del sistema operativo de ese PC. (ver diagrama)

virtualización

En GNU/Linux, entre otros, podemos instalar KMV (si nuestro procesador soporta virtualización), la versión open source de VirtualBox  para GNU/Linux o QEMU , entre otros.

Virtualización de aplicaciones

Últimamente han nacido plataformas para la distribución de aplicaciones aisladas del sistema operativo que permiten a éstas ser ejecutadas dentro de un contenedor (“container”).

Docker es una de ellas y lo que hace es crear un contenedor con las bibliotecas y códigos de la aplicación para que ésta pueda ser ejecutada en una máquina virtual o en la nube usando el servico “cloud” Docker Hub.

En nuestro PC podemos instalar LXC (ver tutorial), Docker o Vagrant  para ejecutar sistemas operativos o aplicaciones virtuales en nuestro PC.

Sistemas operativos minimalistas

El éxito de esta tecnología hizo surgir un nuevo mercado, el de los sistemas operativos minimalistas que se ejecutan dentro de containers, ideales para ambientes virtualizados. Entre ellos, Podemos mencionar a Tiny core Linux, RancherOS, y CoreOS .

Referencias:

Dell, Data Center Virtualization. <http://www.dell.com/learn/us/en/555/virtual-data-center> [Consulta: 24 de marzo de 2015]
Wikipedia, Operating-system-level virtualization. <http://en.wikipedia.org/wiki/Operating-system-level_virtualization> [Consulta: 24 de marzo de 2015]
OpenVZ, Introduction to virtualization. <http://wiki.openvz.org/Introduction_to_virtualization> [Consulta: 24 de marzo de 2015]