#4sysadmins

Inicio » GNU/Linux » Virtualización GNU/Linux (I/VIII): Conceptos

Virtualización GNU/Linux (I/VIII): Conceptos

Follow #4sysadmins on WordPress.com

Durante este mes de Noviembre en 4sysadmins vamos a hablar sobre la virtualización en sistemas operativos GNU/Linux, es decir, la base de la virtualización (anfitrión) será Linux, independientemente de que sistema utilicemos luego para el OS invitado (Guest).

En esta primera entrada vamos a repasar algunos conceptos claves de la virtualización como las distintas arquitecturas básicas de virtualización, virtualización completa frente a la paravirtualización, los diferentes tipos de virtualización, casos de uso de la virtualización y las herramientas que podremos utilizar para virtualizar.

 

Algunas preguntas sobre la virtualización

Cuando se nos plantea la necesidad de virtualizar un sistema operativo (sea por el motivo que sea) nos pueden surgir diferentes preguntas que en muchas ocasiones no estamos seguros de sus respuestas, como por ejemplo:

  • ¿Que arquitecturas de virtualización existen?
  • ¿Que tipo de virtualización debo implementar?
  • ¿mmm…. virtualización completa o paravirtualización?
  • ¿Que es un hipervisor?
  • ¿Que herramienta debo utilizar para la virtualización que necesito?

En esta primera entrada vamos a intentar despejar algunas de estas incógnitas.

 

Sobre la virtualización

Podemos definir el concepto virtualizar como la capacidad para crear a través de software/hardware una versión virtual de un recurso tecnológico como un sistema operativo, interfaz de red, dispositivo de almacenamiento o incluso un sistema informático completo. Con la virtualización podremos hacer correr diferentes sistemas operativos, interfaces de red y dispositivos de almacenamiento en una misma máquina física.

La virtualización ofrece grandes ventajas:

  • Ahorro considerable con respecto al coste de la infraestructura a implementar.
  • Nos permitirá probar diferentes sistemas operativos.
  • Crear entornos de pruebas para desplegar nuestras aplicaciones.
  • Aislar determinadas aplicaciones en diferentes servidores reduciendo así los riesgos de seguridad.
  • Pruebas de pentesting en diferentes sistemas y entornos.

En entornos de usuario es común virtualizar por ejemplo un sistema Microsoft si como anfitrión tenemos un GNU/Linux, o incluso otras distribuciones Linux. En cambio cuando virtualizamos en entornos empresariales, aunque no necesariamente (es común tener en casa pequeñas infraestructuras con aplicaciones corriendo), solemos virtualizar para conseguir dividir diferentes aplicaciones en servidores individuales como se muestra en la siguiente imagen:

virtualizaserver

Cuando creamos máquinas virtuales (MV) sobre un sistema físico, estas se comunican con la máquina física (hardware) a través de la capa de virtualización. Esta capa de virtualización aisla las MV del sistema operativo anfitrión (si lo hubiese) y con ello, de las dependencias sobre el hardware.

Nota: Cuando se virtualiza, se crea una capa de virtualización que permite comunicar a las MV con el hardware, en vez de hacerlo mediante el sistema operativo anfitrión.

 

Arquitecturas básicas de virtualización

Virtualización a partir de un sistema operativo anfitrión

En este tipo de arquitectura nos encontramos con una máquina física (hardware), un sistema operativo anfitrión (en nuestro caso un GNU/Linux) y una capa de virtualización creada a través del sistema operativo anfitrión mediante un paquete de software o bien mediante una funcionalidad nativa del propio sistema.

Esta arquitectura es muy flexible y seguramente la mas común de cara al usuario final. Podremos ejecutar aplicaciones en el sistema operativo anfitrión utilizándolo como sistema primario (desarrollar software, navegar, ejecutar juegos, etc…), mientras que en cada una de las MV tendremos otros sistema operativo dedicado a otros fines, no obstante pagaremos esta flexibilidad con una sobrecarga (overhead) en el sistema, tanto en el anfitrión como en los virtuales, debido a las múltiples capas que existen entre las MV y el sistema anfitrión que hacen posible por ejemplo la asignación de recursos hardware en las MV y las propias aplicaciones que ya se están ejecutando en el sistema anfitrión.

virtualizacionsoftware2

Algunas herramientas utilizadas para este tipo de arquitectura son: VirtualBox, VMWare Server/Workstation, KVM/Qemu y Microsoft Hyper-v Server

Nota: Si quieres crear rápidos entornos virtuales prueba a utilizar Vagrant del que ya hemos hablado en 4sysadmins.

 

Virtualización con hipervisor

Este tipo de arquitectura de virtualización se consigue instando sobre el hardware un sistema operativo anfitrión modificado o firmware que realiza las funciones de hipervisor, comunicando los recursos hardware de la máquina y las MV.

Un Hipervisor o Monitor de máquina virtual ( VMM, Virtual Machine Monitor) es una capa creada sobre el hardware de la máquina física sobre la que se van creando MV cada una de las cuales puede contener distintos OS y aplicaciones. El hipervisor es el encargado de gestionar la plataforma de hardware, haciendo que las máquinas virtuales estén completamente aisladas.

hipervisor

El inconveniente de este tipo de arquitecturas es que normalmente son mas «complicadas» de implementar y además no nos permite ejecutar aplicaciones en el anfitrión, ya que en este caso solo hace de hipervisor y no de un sistema operativo como tal (por ejemplo para usarlo como sistema primario como vimos en la arquitectura anterior).

La principal ventaja de esta arquitectura de virtualización es que al no tener que utilizar un OS como anfitrión, la cantidad de overhead (sobrecarga) es mucho menor por lo que que conseguiremos mejores resultados de rendimiento en cada una de las MV.

Algunas herramientas a utilizar en este tipo de arquitecturas de virtualización son Xen, OVM (Oracle Virtual Machine), VMWare ESXi o vPars (Virtual Partitions) / IVM (Integrity Virtual Machine) desarrolladas por HP.

 

Virtualización a nivel de librería

En este tipo de arquitectura tenemos un hardware y un sistema operativo anfitrión, solo que a diferencia de la virtualización a partir de un sistema operativo, no utilizaremos el sistema anfitrión para crear máquinas virtuales, sino que virtualizaremos una porción de este sistema directamente a través de una serie de librerías. Un claro ejemplo de esta arquitectura es Wine. A través de Wine podremos ejecutar aplicaciones por ejemplo de Windows sobre un sistema operativo anfitrión GNU/Linux.

 

Virtualización por emulación

Solución con la que podremos emular partes o dispositivos completos. Un claro ejemplo es Cygwin para emular entornos Linux en Windows, formado por dos elementos principales, por una parte cygwin1.dll que actúa como una capa de emulación de las API de Linux y por otra parte un conjunto de herramientas que proporcionan el look de Linux.

Una alternativa a Cygwin es Cooperative Linux la cual admite la ejecución de diferentes distribuciones GNU/Linux sobre Microsoft Windows 2000/XP/Vista/7/8

Qemu es otro ejemplo claro de virtualización por emulación, el cual puede trabajar en dos modos distintos:

  • Full System Emulation donde se emula un sistema completo (procesador y periféricos) sobre el que lanzar diferentes OS
  • User Mode con el que podremos ejecutar binarios compilado para una determinada arquitectura, por ejemplo SPARC, en un entorno GNU/Linux x86

 

Tipos de virtualización

Para no liarnos debemos de dejar claro que una cosa son las diferentes arquitecturas de virtualización, y otra los tipos de virtualización.

Importante: Cuando implantemos una solución de virtualización en nuestro entorno, esta podrá contar con la «unión» de varias arquitecturas y tipos de virtualización diferentes. Un caso puede ser la virtualización con KVM/QEMU donde estaremos virtualizando mediante un paquete de software instalado en un OS anfitrión (arquitectura de virtualización por OS anfitrión) que convertirá el kernel de Linux en un hipervisor (tipo de virtualización por hipervisor) para comunicar el hardware con las MV, además aprovechando (si nuestro kernel nos lo permite) el módulo del kernel AMD-V o Intel VT, estaremos virtualizando a nivel de hardware (arquitectura de virtualización por hardware, en este caso los procesadores) y a la vez emulando el resto de dispositivos (arquitectura de virtualización por emulación) con QEMU. Esto es una solución de virtualización completa (full virtualization). Recordar que esta tiene peor rendimiento que la paravirtualización, algo que veremos en la siguiente sección.

 

Virtualización por hardware

Particionamiento físico

Este tipo de virtualización es aquel en el que a partir de un mismo chasis de componentes hardware (placa base, RAM, HDD, dispositivos de red, etc…) se crean varias «máquinas independientes» que estarían compuestas por diferentes partes o dispositivos de manera que sea posible tener sistemas aislados con distintos OS.

Virtualización de procesadores

Tanto AMD como Intel han diseñado y desarrollado extensiones de virtualización para sus procesadores que permiten ejecutar en un hipervisor máquinas virtuales sin penalizar el rendimiento, puesto que el propio procesador se encargar de reducir el overhead que puede producirse en un entorno virtualizado solamente por software.

Nota: AMD-V solamente se integra en tecnología de 64bits, mientras que Intel VT acepta varias familias de procesadores de 32 y 64 bits.

Virtualización por hipervisor

Este tipo de virtualización se consigue cuando el software instalado sobre el sistema operativo anfitrión (en el caso de una arquitectura de virtualización basada en sistema operativo anfitrión) como por ejemplo KVM, crea un hipervisor para comunicar las MV con el hardware del equipo (caso de una virtualización completa o convencional) o el sistema operativo hace directamente de hipervisor, como por ejemplo cuando virtualizamos con Xen, el cual necesita de un sistema operativo modificado (paravirtualización).

 

Virtualización por sistema operativo

En este tipo de virtualización se crean a partir de un sistema operativo una serie de «compartimentos estancos» o entornos virtuales, también conocidos como Servidores Virtuales Privados (VPS).

La virtualización viene de la posibilidad de crear una capa que separa las aplicaciones ejecutadas en el sistema anfitrión de la máquina física.

Virtuozzo es una herramienta para implementar este tipo de soluciones, la cual genera una capa de virtualización común que asigna recursos del sistema entre todos los servidores virtuales (VPS) también denominados contenedores.

Este tipo de solución posee alrededor del 2% de sobrecarga  por lo que su rendimiento es casi nativo, además de poseer otras ventajas como la reasignación dinámica de recursos.

Nota: Un tipo de «virtualización» que podríamos encajar aquí (aunque no es puramente una virtualización) y que ahora está muy de moda es Docker del que hablaremos próximamente.

 

Virtualización completa vs paravirtualización

Full Virtualization HVM (Hosted)

La virtualización completa es el tipo de virtualización convencional, y se logra al crear máquinas virtuales con distintos sistemas operativos a partir de un sistema operativo corriente (no necesita ser modificado, basta con instalar un paquete software) sobre el cual hemos creado una capa de virtualización o hipervisor (por ejemplo con VirtualBox, VMWare o KVM/Qemu) encargada de emular todas y cada una de las instrucciones y accesos a los dispositivos de hardware por parte de las MV. Como ya vimos antes esto trae una pérdida en el rendimiento de los sistemas.

 

Paravirtualización PV (Bare Metal)

En este caso se necesita instalar sobre el hardware un sistema operativo modificado para que la máquina anfitriona arranque directamente como un hipervisor y no como un sistema operativo convencional, es decir no ejecutará sus propias aplicaciones, si no que solo servirá para crear, destruir, modificar y en definitiva administrar únicamente máquinas virtuales.

La paravirtualización está muy extendida en entornos empresariales ya que se consigue mejor rendimiento que con la virtualización completa y al fin y al cabo lo que se necesitan son un mayor número de servidores virtualizados para ahorrar costes y espacio principalmente.

En este caso las máquinas virtuales son conscientes de que existe una capa de virtualización entre ellas y el hardware por lo que esta capa (hipervisor) permite que las MV realicen modificaciones en llamadas y drivers de dispositivos. Como ya sabemos, en la paravirtualización no existe tanta carga y por lo tanto pérdida en el rendimiento.

Algunas herramientas para paravirtualizar son Xen, VMWare ESXi y Microsft Hyper-V.

Importante: Existe otra virtualización formada por «lo mejor» de estás dos últimas llamada PVHVM (ParaVirtualizatión y Hardware Virtual Machine) que aunque bien es cierto que se logran mejoras en el rendimiento de una arquitectura completa virtualizada (redes, almacenamientos, sistemas…) deberemos de tener en cuenta algunos aspectos importantes, pues quizás para nuestro caso no sea la mejor elección.

 

Conclusiones

Bueno después de este pequeño repaso sobre virtualización, si aún no hemos sacado nuestras propias conclusiones o seguimos sin verlo muy claro, voy a comentar algunos consejos o ayudas para que podamos comenzar con algo en mente y estemos seguro de lo que queremos lograr.

Antes de nada ¿Que solución vamos a elegir? ¿libre o propietario?, evidentemente aquí y en las siguientes entradas solo veremos herramientas libres.

Vale, ¿Cual?

  • Si queremos algo rápido, simplemente para probar una imagen o tener un sistema Linux para cualquier propósito básico, es decir probar algo en un servidor web, modificar ciertos parámetros en la configuración de una aplicación o por el estilo yo probaría con Vagrant. Si el sistema anfitrión es Linux y queremos ejecutar sobre este algunas aplicaciones de Microsoft quizás lo mas rápido sea instalar y trabajar con Wine o al revés, si el anfitrión es Windows y queremos emular un Linux pues usamos Cygwin.
  • Si estamos pensando mas en un uso medio-largo plazo, deberemos de elegir una virtualización por sistema operativo anfitrión y crear a través de un paquete de software una capa de virtualización o hipervisor que nos cree una virtualización completa de sistema operativo y hardware emulado. Esto lo conseguiremos con herramientas como VirtualBox, VMWare Server/Workstation/player o KVM/Qemu. Importante es comprobar si nuestro sistema operativo permite cargar los módulos de AMD o Intel para virtualizar los procesadores y conseguir con ello mejor rendimiento. Esto es especialmente importante si nos decidimos por KVM (es mi opción preferida) aunque igualmente podremos activar esta característica en VirtualBox y VMWare.
  • Quizás mas que crear máquinas virtuales, estemos pensando en ejecutar una serie de aplicaciones/servicios en nuestra máquina de forma aislada (conocido como virtualización por sistema operativo o a nivel de sistema operativo), es decir, lanzar una aplicación en una instancia aislada a la que se le asigne una serie de recursos hardware (aunque se permite la asignación dinámica) sin que interfiera en la ejecución de otras aplicaciones del sistema o viceversa. En este caso una solución puede pasar por utilizar OpenVZ, LXC (Linux container) o Docker.
  • Para terminar, si lo que estamos buscando es una virtualización a nivel profesional me decantaría sin duda por Xen. Una virtualización profesional puede ir desde por ejemplo tener comprado un servidor de gama media sobre el que queremos crear varias máquinas virtuales caseras para por ejemplo tener en una un cortafuegos, en otra un media center, otra  máquina con DHCP/DNS y VPN, servidor de correos, LAMP y recursos compartidos, hasta por ejemplo una infraestructura de servidores de BBDD, servidores de aplicaciones, etc… Ya sabemos que si nos decantamos por esta opción algo muy importante a tener en cuenta es la elección de un sistema operativo modificado para arrancar desde este y haga únicamente de hipervisor.

Bueno y ya con esto mas o menos podremos decidirnos a dar el paso para virtualizar.

En las siguientes entradas relacionadas con la virtualización aprenderemos a instalar y utilizar algunas de las herramientas destinadas a tal fin, como por ejemplo:

 

Nota: Mas adelante hablaremos de OpenVZ, LXC y Docker

 


6 comentarios

  1. wuil dice:

    si tengo un windows como anfitrion y quiero un centos como huesped que software de virtualizacion me recomiendas

    Me gusta

  2. jathan dice:

    Muy buena introducción y explicación de los conceptos. A mi lo que más me gusta usar es KVM y QEMU. Espero en una oportunidad usar paravirtualización con Xen. Gracias y felicidades por tu blog.

    Me gusta

    • nebul4ck dice:

      A nivel personal también utilizo KVM. Con respecto a lo laboral, se suele utilizar mucho VMWare y Xen, no obstante también se utiliza mucho KVM/QEMU. Salu2!!

      Me gusta

      • jathan dice:

        Hola nebul4ck. Buen inicio de año y próspero 2017. Sí, KVM es de lo más disfrutable con Software Libre para virtualizar y hacer implementaciones tanto locales para pruebas como en algunos casos en infraestructura mediana. Mi favorito junto con QEMU :) Sabes, ahora en la empresa que trabajo estoy haciendo una sustitición de VMware vSphere por PROXMOX y migrando las máquinas virtuales de aquél. Me fascina PROXMOX por usar Linux Containers, KVM, estar basado en Debian, su interfaz web, línea de comandos y que sea muy óptimo siendo paravirtualización y vritualización basado en sistema operativo. De lo mejor de Software Libre con sus principios de desarrollo y comunidad por encima de que es gratuito para virtualizar de manera inteligente en medianos y grandes ambientes de producción :) Sería muy agradable contar una entrada de la configuración de las redes en PROXMOX en tu blog. Saludos.

        Me gusta

      • nebul4ck dice:

        Muchas gracias Jathan por la aportación, vere si le puedo «meter mano» a PROXMOX, sinceramente no lo conocía, últimamente estoy encasillado en VMware por el trabajo, pero sin duda se le dará un vistazo pues el aporta de LXC y HA es una gran ventaja, además de su GUI. Gracias y feliz año!!!

        Me gusta

Deja un comentario, Gracias!