Contenedor o máquina virtual: la diferencia en una frase y sus cuatro consecuencias
La elección suele hacerse por costumbre de recursos. Sin embargo la diferencia cabe en una sola frase, y todo lo demás se deriva de ella.
AtlasPVE ·
Esta entrada responde a
- proxmox lxc o vm
- proxmox contenedor o máquina virtual
- proxmox ventajas lxc
- proxmox cuál elegir
- proxmox lxc es seguro
Vas a poner en marcha algo nuevo en Proxmox y hay dos opciones. Las dos ejecutan un Linux, las dos aparecen juntas en el panel, las dos parecen hacer el mismo trabajo.
La elección suele hacerse por costumbre de recursos: "un contenedor es más ligero". Es cierto, pero no es eso lo que debe decidir.
La diferencia cabe en una frase: una máquina virtual trae su propio núcleo, un contenedor usa el del servidor. Todo lo que hace falta saber se deriva de esa frase.
Primera consecuencia: por dónde pasa la frontera
La frontera de la máquina virtual la traza el hardware. La del contenedor la traza el núcleo del servidor.
Eso no significa que un contenedor sea "débil"; significa por dónde pasa la frontera. Si un fallo del software dentro de un contenedor quiere alcanzar el servidor, lo que debe atravesar es el propio núcleo del servidor. En una máquina virtual, lo que debe atravesar es un muro a nivel de hardware.
La pregunta práctica es esta: cuánto confías en lo que vas a ejecutar? Para un servicio que escribiste tú o que llevas años usando, un contenedor va perfecto. Para algo descargado que no dominas del todo, una máquina virtual es mejor sitio.
Segunda consecuencia: no todo corre en un contenedor
Nada que necesite su propio núcleo corre en un contenedor. Un software que quiere otra versión de núcleo, una herramienta que carga módulos del núcleo, un sistema operativo que no es Linux: todos exigen una máquina virtual.
No es cuestión de preferencia, es consecuencia directa de la frase anterior. Si un contenedor usa el núcleo del servidor, no puedes pedirle que cambie ese núcleo.
Tercera consecuencia: el mantenimiento los toca de forma distinta
Esta es la menos conocida y la que más probablemente duela.
Cuando actualizas el motor de máquinas virtuales, las máquinas en marcha no se ven afectadas. El motor nuevo se aplica a las máquinas arrancadas después de esa actualización. Así que una noche de mantenimiento puede pasar en silencio por encima de tus máquinas en marcha.
Cuando actualizas la capa de ejecución de contenedores, los contenedores en marcha sí pueden verse afectados, porque todos comparten esa capa. Durante la actualización la capa de archivos compartida puede volver a montarse y dentro de los contenedores pueden aparecer errores de acceso pasajeros.
No es una opinión del producto, es la consecuencia directa de la misma frase: si actualizas algo compartido, lo notan todos los que lo comparten.
Cuarta consecuencia: la libertad de movimiento
Una máquina virtual se puede mover a otro nodo en marcha. Un contenedor no: se apaga, se mueve y se vuelve a arrancar.
Así que si un trabajo que no tolera interrupciones está en un contenedor, ese trabajo se parará en las noches de mantenimiento. Esto hay que ponerlo en la balanza al decidir la colocación.
La regla práctica
Elige un contenedor cuando lo que vas a ejecutar es un servicio Linux corriente que podrías correr también en el servidor, cuando confías en él y cuando aguanta una interrupción breve.
Elige una máquina virtual cuando hace falta un núcleo propio, cuando no debe interrumpirse durante el mantenimiento, o cuando no confías del todo en lo que ejecutas.
La diferencia de recursos viene después de esas tres pruebas. Que un contenedor gaste menos memoria es verdad, pero el coste de un contenedor mal colocado supera con creces ese ahorro.
Qué hace Atlas
Atlas lleva esta distinción no como un lema sino como comportamiento.
En la valoración de actualizaciones, el motor de máquinas virtuales y la capa de ejecución de contenedores se tratan por separado. Cuando se actualiza el motor de máquinas, la respuesta para las que están en marcha es de nivel informativo: no se ven afectadas, el motor nuevo vale para las arrancadas después. Cuando se actualiza la capa de contenedores, el nivel sube a aviso y se escribe el motivo: la capa compartida puede volver a montarse, plantéate parar brevemente los contenedores críticos.
La misma distinción aparece en la planificación de traslados: para los contenedores no se ofrece el traslado en marcha como opción, se indica la cadena apagar, mover, arrancar.
Es decir, el producto no presenta a los dos como "dos variantes de lo mismo". Se comportan distinto, por eso se describen distinto.
Fuentes
La documentación oficial de Proxmox. En inglés, y en este asunto es ella la que tiene la última palabra.