Diferencias entre KVM y LXC

«LXC (Linux Containers) es una tecnología de virtualización en el nivel de sistema operativo (SO) para Linux. LXC permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados, conocidos como Servidores Privados Virtuales (SPV o VPS en inglés) o Entornos Virtuales (EV). LXC no provee de una máquina virtual, más bien provee un entorno virtual que tiene su propio espacio de procesos y redes.»

Como definición introductoria está muy bien, pero como muchas de las definiciones que podemos encontrar la Wikipedia precisarían ampliarse si queremos profundizar un poco.

Como LXC provee de un entorno virtual no necesitamos emular hardware, esto es muy importante porque no vamos a tener una penalización por emulación de hardware, es decir, nuestro sistema va a ser muy rápido, por ejemplo no tendremos penalización en escritura en disco.

Por desgracia también tenemos desventajas. Como LXC provee de un entorno virtual el kernel es fijo, no podemos ni modificarlo ni tocarlo de ninguna manera, principalmente porque el kernel está corriendo en el sistema anfitrión.

Otra de las desventajas es que sólo y exclusivamente podemos instalar máquinas Linux, esto no funciona con otros sistemas operativos como Windows, BSD o Solaris.

KVM sin embargo virutaliza todo, hasta el hardware, realiza una virtualización a nivel de Kernel.

Al instalar una máquina virtual sobre KVM el resultado será el mismo que si se hubiera instalado en un hardware físico, y no tendremos las limitaciones que tenemos en una virtualización más ligera como es la de LXC.

El hipervisor KVM será el encargado de proporcionar a las máquinas virtuales las extensiones KVM del kernel, de emular el hardware de la máquina y de asignar los recursos para cada máquina virtual. Esto es memoria, CPU, disco, IOPs, en fin, todo lo que se os pueda ocurrir.

Obviamente en KVM no tenemos ninguna atadura con el sistema operativo anfitrión, con lo que sería posible instalar máquinas virtuales Windows o BSD sin problemas.

Sin embargo instalar máquinas virtuales MacosX no se puede, pero no es un problema técnico, es porque en la licencia de uso de Apple especifíca claramente que no se puede hacer, así que donde hay patrón no manda marinero.

En máquinas virtualizadas sobre KVM podríamos levantar interfaces TUN o TAP sin problemas, cosa que en LXC por ejemplo no se podría hacer.

Hay una diferencia que es fundamental en cuanto a la reserva de recursos, en KVM la reserva de recursos se hace en el momento en el que arranca la máquina virtual mientras que en LXC la reserva se va haciendo según va siendo necesaria. Esto significa que en un hipervisor siempre vamos a poder meter más máquinas LXC que KVM, y esto es muy importante.

Ya os he comentado que la virtualización es completa con KVM, esto significa que el acceso a disco, a memoria o a cualquier otro hardware precisará de una emulación de hardware, lo que hará un poco más pesado a nuestro sistema, pero es un peaje justo por tener una virtualización completa.

Ahora lo que tenemos que decidir es qué tecnología es para nosotros, cual nos interesa más KVM o LXC.

Primero de todo asumo que estamos en el lado que necesita una máquina virtual, y no en el lado que tiene los hipervisores.

Si queremos un VPS para funcionar con webs y no tenemos requisitos especiales un LXC será más que suficiente y como se pueden provisionar más servidores con LXC por hipervisor siempre va a repercutir en el precio un poco porque lo normal es que sean un poco más baratos, eso sí, es posbile que en un hipervisor se haya aprovisionado más memoria de lo existente, realmente esto es lo normal y es algo que deberiáis de preguntar siempre, qué política de asignación de memoria hay.

Si queréis asegurar recursos lo ideal será una máquina virtual sobre KVM, pero también os recomiendo que os informéis sobre esto porque si contratáis una máquina KVM en un hipervisor con 128G de RAM y hay 64 máquinas de 2G de RAM cada una en cuanto alguna empiece a paginar se puede liar parda, es importante tener claras estas cosas, hay que tener un cálculo sobre este tipo de cosas, pero por desgracia en muchos sitios esto no se tiene en cuenta y pasa lo que pasa.

Si necesitáis una máquina virtual con características especiales, como por ejemplo terminar conexiones OpenVPN necesitaréis una máquina KVM por lo que hemos comentado anteriormente de los interfaces TUN y TAP.