VMs vs Containers
¿Qué son las Máquinas Virtuales?
Una máquina virtual (VM) es un entorno que funciona como un sistema informático virtual con su propia CPU, memoria, interfaz de red y almacenamiento, pero el cual se crea en un sistema de hardware físico.
Las VM se encuentran aisladas del resto del sistema, pero puede haber varias VM en una sola pieza de hardware, como un servidor. Además, pueden trasladarse entre los servidores host en función de la demanda, o para utilizar los recursos de forma más eficiente.
Las VM permiten que se ejecuten varios sistemas operativos diferentes a la vez en un mismo dispositivo (en este caso un mismo servidor).
¿Qué son los contenedores?
Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de forma rápida y confiable de un entorno informático a otro. Una imagen de contenedor de Docker es un paquete de software ligero, independiente y ejecutable que incluye todo lo necesario para ejecutar una aplicación: código, tiempo de ejecución, herramientas del sistema, bibliotecas del sistema y configuraciones.
Se pueden ejecutar varios contenedores en la misma máquina y compartir el kernel del sistema operativo con otros contenedores, cada uno ejecutándose como procesos aislados en el espacio del usuario. Los contenedores ocupan menos espacio que las VM (las imágenes de contenedor suelen tener un tamaño de decenas de MB), pueden manejar más aplicaciones.
Su limitación principal es que no se puede emular un sistema Windows si el host es Linux, por ejemplo, usando containers. Es decir que los containers son dependientes del sistema operativo del host, a diferencia de las máquinas virtuales.
Comparación
- Precio: usando containers, un solo sistema operativo puede admitir múltiples contenedores, cada uno de los cuales se ejecuta dentro de su propio entorno de ejecución separado. Al ejecutar múltiples componentes en un solo sistema operativo, se reduce el dinero invertido en licencias. En cambio, si hacemos uso de VMs, necesitaríamos una licencia para cada uno de los sistemas operativos de las VMs (más el del host).
- Eficiencia: los containers son más eficientes que las máquinas virtuales, ya que los recursos que estos consumen van directamente al proceso de la aplicación que se está ejecutando. Las máquinas virtuales, en cambio, requieren de más recursos, muchos de los cuales van destinados al sistema operativo y no a la aplicación en si.
- Tamaño: un contenedor suele ser tan pequeño como 10 MB, mientras que una máquina virtual ocupa al menos unos pocos GB de espacio de almacenamiento. Así pues, en un servidor caben muchos más contenedores que máquinas virtuales, convirtiendo a estos en la opción preferida en muchos casos.
- Velocidad de ejecución: las máquinas virtuales son creadas por un hipervisor que necesita muchas decisiones de configuración al inicio. Por otro lado, los contenedores se crean más rápido que las máquinas virtuales debido a la ausencia de un hipervisor. Por lo tanto, el tiempo de inicio para los contenedores Docker varía de unos pocos milisegundos a un par de segundos, lo que lo hace mucho más rápido que una VM (que puede llegar a tardar minutos).
Bonus: una solución para la gestión multi-cloud
Kubernetes es una plataforma open-source que automatiza las operaciones de los contenedores de Linux. Así pues, elimina muchos de los procesos manuales involucrados en la implementación y escalabilidad de las aplicaciones en contenedores.
En otras palabras, puede crear un clúster de grupos de hosts que ejecutan contenedores de Linux, y Kubernetes lo ayuda a administrar con facilidad y eficacia esos clústeres.
Estos clústeres pueden abarcar hosts en nubes públicas, privadas o híbridas. Por este motivo, Kubernetes es la plataforma ideal para alojar aplicaciones que requieren una expansión rápida.
Kubernetes se suele usar en soluciones multi-cloud ya que permite automatizar y gestionar los contenedores de la forma más sencilla y eficiente posible.
Autores
Joan Farràs
Ferran Montoliu