Diferencia entre virtualización KVM y OpenVz

Publicado el 06 junio 2016 por Drassill
Hoy quiero hablaros sobre una de las mayores modas del presente: La virtualización. En anteriores artículos ya he hablado algo sobre tecnologías de virtualización, tales como Proxmox, pero hasta ahora me he centrado más en la herramienta que en el concepto... Cosa que en general no es malo, pero hoy quiero hablar de la virtualización en un sentido más teórico con el fin de que entendáis qué tipo de virtualización elegir dependiendo de vuestras necesidades.

A lo largo de los años la virtualización ha ido evolucionando y ha ido adaptándose a las necesidades de los usuarios y/o del mercado. Dicha evolución se ha traducido en diferentes tipos de virtualización que van mucho más allá de las herramientas "clásicas", tales como VMware o VirtualBox, otorgándonos un amplio abanico de posibilidades para elegir. Entre dichos tipos, hay dos de ellos que han demostrado ser los más eficientes de todos y los más "innovadores" en el campo de la virtualización. Dichos tipos de virtualización se denominan Virtualización a nivel de sistema operativo y Virtualización a nivel de Kernel; si bien son más conocidos por las herramientas que hacen uso de dichas tecnologías: Openvz y KVM (respectivamente).
Ambas virtualizaciones son muy útiles, pero tienen una serie de diferencias entre sí que, si bien a primera vista no pueden parecer muy significativas, en la práctica pueden ser decisivas a la hora de decantarse por una elección u otra. Para entender la diferencia entre ambas lo mejor sería entender lo que nos ofrece cada tipo de virtualización.
Comencemos por la virtualización a nivel de sistema operativo. Esta tecnología virtualiza los sistemas sobre el propio sistema operativo, es decir que, a diferencia de las virtualización tradicional, no usa ninguna capa intermedia de virtualización. La máquina virtual creada mediante esta tecnología es denominada container, y tiene la gran ventaja de que tiene un gran rendimiento y que permite hacer cambios en el container sin necesidad de apagar/reiniciar dicho container. Dichos cambios pueden ser desde cambiar el tamaño del disco duro hasta aumentar la memoria RAM. El motivo de dicha eficiencia en los containers es que éstos comparten el mismo kernel y los mismos binarios que el sistema operativo original, haciendo que se pierda muy poca eficiencia en el entorno virtualizado... Aún así, dicha compartición  hace que el container solamente pueda tener instalado un sistema operativo que tenga unos binarios parecidos al sistema operativo original. La tecnología de de containers es usada en distribuciones Linux, con lo que es imposible crear un container Windows. Además, si por ejemplo el sistema operativo original fuese Debian; no podríamos instalar un container con un sistema operativo basado en tecnología Red-Hat. Con lo que a modo de resumen se podría decir que los containers:
  • Son muy eficientes a nivel de rendimiento.
  • Ofrecen una gran flexibilidad a la hora de manipular el hardware virtualizado, pues se puede modificar éste sin necesidad de reiniciar, cosa especialmente útil para un servidor web o un servidor ftp.
  • Usa el mismo Kernel y binarios que el sistema operativo original.
  • Tiene ciertas limitaciones con los sistemas a instalar. Solo puede instalar distribuciones "parecidas" a la original y es imposible instalar Windows.

La virtualización a nivel de Kernel, en cambio, es algo más "sutil" que los containers, Esto es debido a que convierte el kernel en hipervisor (capa intermedia de virtualización), y hace que la virtualización se ejecute en el propio núcleo del sistema operativo, logrando una gran eficiencia y estabilidad... Esto no significa que la máquina virtual que instalemos comparta el mismo núcleo que el sistema operativo original (como ocurre con los containers) sino que la capa de virtualización se encuentra en el núcleo en vez de en el sistema operativo (como ocurre habitualmente), quitando capas innecesarias y haciendo que la virtualización sea muy eficiente. Otra de las grandes ventajas que ofrece este tipo de virtualización con respecto a los containers, es que las máquinas virtuales creadas aquí  son completamente independientes del sistema operativo original, haciendo que sea una alternativa mucho más recomendable en términos de seguridad. Resumiendo, esta virtualización ofrecería:
  • Máquinas virtuales que pueden ser tratadas cómo sistemas independientes (a diferencia de los containers). Esto significa que puede instalar sistemas de cualquier tipo, incluido Windows.
  • Máquinas virtuales que ofrecen un gran rendimiento.
  • Máquinas virtuales que se pueden securizar de forma eficiente.

Visto esto, se podría decir que en caso de instalar un sistema operativo Linux, habría que valorar si deseamos una máquina más orientada a la estabilidad/seguridad, para lo cual usaríamos KVM; o una máquina más orientada a la flexibilidad y escalabilidad, para lo cual usaríamos OpenVz. Obviamente habría que tener cuidado con los sistemas que instalaríamos en los containers, pues hemos de tener en cuenta que los binarios tienen que ser compatibles con el sistema operativo original. En caso de optar por un sistema operativo Windows; aquí la única opción posible sería KVM, pues sería el único que ofrecería un entornos virtualizado independiente.
Espero que con este pequeño articulo os hayan quedado más claros los conceptos más importantes de la virtualización y que gracias a esto tengáis una pequeña referencia las ventajas y desventajas que ofrece cada tipo de virtualización.
Saludos.