Esta pagina se ve mejor con JavaScript habilitado

Introducción a la virtualización con software libre

 ·  🎃 kr0m

En este artículo vamos a dar una visión general sobre los sistemas de virtualización disponibles actualmente en el mundo del software libre bajo Linux, los principales productos son Xen, Proxmox, OpenStack, Docker.

La virtualización lleva años brindándonos ciertas ventajas respecto a la computación tradicional, pero llegado el momento de dar el paso se nos plantean varios interrogantes, que tecnología debo utilizar? contenedores o virtualización completa? que hipervisor se adapta mejor a mis necesidades? con que solución obtendré un mayor rendimiento? En este artículo daremos una visión general sobre los sistemas de virtualización en el mundo Linux y las principales carterísticas de cada uno de ellos.

Todos los sistemas de virtualización completa precisan de un hipervisor, este se encarga de gestionar todo lo relativo a aislamiento, seguridad y acceso al HW por parte de las máquinas virtuales, los sistemas basados en contenedores es el propio kernel del anfitrión quien gestiona todos estos aspectos.

Hay varios tipos de hipervisores:

  • Tipo1: Se trata de un SO especificamente diseñado para virtualizar, algunos de los mas conocidos son: VMware ESXi Free (gratis), VMware ESX (de pago), Xen (libre), Citrix XenServer (gratis), Microsoft Hyper-V Server (gratis).

  • Tipo2: Se trata de un software instalado sobre un SO genérico: VirtualBox (gratis), VirtualBox OSE (libre), VMware: Workstation (de pago), Server (gratis), Player (gratis), QEMU (libre), Microsoft: Virtual PC, Virtual Server.


Los hipervisores a su vez pueden emplear diferentes técnicas de virtualización

Emulación:
Se ejecuta código de una arquitectura en otra pero precisa de una traducción completa de todas y cada una de las intrucciones.

Full-virtualization:
Todo el hardware es simulado, no es necesario modificar el SO invitado de modo alguno, las intrucciones de nivel privilegiado tienen que ser reescritas por el anfitrión ya que los invitados no tienen ese nivel de privilegios.

HW-virtualization:
El HW del anfitrión tiene registros específicos para agilizar la reescritura de las instrucciones de nivel privilegiado.

Podemos comprobar si disponemos de ellos con:

egrep ‘^flags.*(vmx|svm)’ /proc/cpuinfo

Paravirtualización:
En la virtualización Full o HW se precisa de una constante reescritura de instrucciones, para agilizar esto se pueden realizar una serie de modificaciones en el SO del invitado para que sea capaz de comunicarse con el SO anfitrión y ejecutar instrucciones privilegiadas directamente sin tener que reescribirlas. Estas llamadas son llamadas hypercalls.

System-level virtualization:
El sistema operativo impone limites a los recursos que puede acceder cada uno de los contenedores, normalmente se comparte imagen entre el anfitrión y los invitados, además de precisar de parches en ciertos casos.


En Linux disponemos de varios hipervisores, en el siguiente listado se presentan los mas populares indicando la tecnologia utilizada:

  • Qemu : Emulador, Full-virtualization

  • Xen : HW-Virt, Full-virtualization, Paravirtualization, es el único hipervisor de tipo 1, en realidad es una distro con kernel parcheado para virtualización(dom0), podemos elegir entre los listados en:
    http://wiki.xenproject.org/wiki/Dom0_Kernels_for_Xen

    XCP es una ISO lista para su uso:
    http://wiki.xen.org/wiki/XCP_Overview

  • KVM /Qemu: Emulación, HW-Virt, Full-virtualization, Paravirtualization, KVM utiliza una versión modificada de QEMU como front-end, este ultimo presenta el hw virtual al guest, Qemu utiliza KVM cuando el guest comparte arquitectura con el anfitrión, si no lo emulará.

  • Openvz : System-level, Container, OpenVZ utiliza un kernel parcheado compartido por todos los contenedores.

  • Linux-VServer : System-level, security context, utiliza un kernel parcheado compartido por todos los security contexts.

  • LXC : System-level, container, LXC utiliza cgroups para aislar los contenedores unos de otros, se utiliza el mismo kernel del anfitrión.

  • UML : System-level, Guests, cada sistema operativo corre como una aplicación mas, cada guest posee su propia imagen de kernel ;), suele utilizarse para debugear errores en el desarrollo del kernel.

NOTA: La libreria LibVirt nos permite gestionar las capacidades de los hipervisores, dar ordenes al hipervisor y monitorizar recursos por vm. Es utilizado por software de alto nivel como Proxmox, virsh, oVirt… y es compatible con:

  •     The KVM/QEMU Linux hypervisor
  •     The Xen hypervisor on Linux and Solaris hosts.
  •     The LXC Linux container system
  •     The OpenVZ Linux container system
  •     The User Mode Linux paravirtualized kernel
  •     The VirtualBox hypervisor
  •     The VMware ESX and GSX hypervisors
  •     The VMware Workstation and Player hypervisors
  •     The Microsoft Hyper-V hypervisor
  •     The IBM PowerVM hypervisor
  •     The Parallels hypervisor
  •     The Bhyve hypervisor
  •     Virtual networks using bridging, NAT, VEPA and VN-LINK.
  •     Storage on IDE/SCSI/USB disks, FibreChannel, LVM, iSCSI, NFS and filesystems

Hay algunos hipervisores que se utilizan en proyectos que nos porporcionan una interfaz amigable para su gestión, los mas interesantes se muestran a continuación:

  • Docker : Se apoya en LXC, posee un sistema de versionado parecido a GIT con lo que podremos revertir a versiones anteriores o incluso sincronizar solo los cambios de un container a otro. Además emplea aufs con lo que se consigue una parte común a todos los containers de cierto tipo y una parte dinámica, de este modo el espacio de la parte estática es reutilizado por todos los containers.
  • ShipYard : Interfaz de gestión de contenedores mediante Docker.
  • CoreOS : Utiliza Docker como base, es un sistema minimalista pensado para virtualización, cuando se actualiza el SO no se actualizan paquetes como se haría en una distro tradicional si no que se actualiza el snapshot de la partición pudiendo revertir al estado anterior en caso de ser necesario.
  • QubeOS : Es un sistema operativo que arranca máquinas virtuales basadas en Xen para grupos de aplicaciones, aislando así las unas de las otras.
  • oVirt : Interfaz de gestión de máquinas virtuales basadas en KVM.
  • virsh : Gestión qemu/kvm a través de libvirt.
  • Xen : Es el único hypervisor de tipo 1 bajo software libre.
  • Xen-Orchesta : Es una interfaz gráfica bastante llamativa para Xen.
  • OpenStack : Soporta virtualización mediante KVM, Xen, Hyper-V, LXC, la opción idónea para grandes proyectos de virtualización.
  • Proxmox : Utiliza QemuServer, una interfaz de acceso a Qemu/KVM además de OpenVZ para contenedores, toda la gestión es mediante una interfaz web.
  • Archipel : Soporta KVM, Xen, OpenVZ, VMWare utiliza las librerias libvirt para gestionar las acciones a realizar y un servidor xmpp para comunicarse con los diferentes hipervisores.

En la wikipedia podemos encontrar una interesante tabla donde se comparan la mayoría de sistemas de virtualización:
http://en.wikipedia.org/wiki/Comparison_of_platform_virtualization_software

Si te ha gustado el artículo puedes invitarme a un RedBull aquí