Virtualización

¿Qué es LXC?

También conocido como: Linux Containers
Definición

LXC is Linux-native containerisation that isolates processes with namespaces and cgroups while sharing the host kernel. LXC is excellent inside a trust boundary you already own and weak as a multi-tenant boundary, because a kernel escape affects every container on the host.

Por qué es importante LXC

LXC es excelente dentro de un límite de confianza que ya posees y débil como límite multi-inquilino, porque un escape del kernel afecta a todos los contenedores del host.

LXC en la práctica

Con LXC obtienes un contenedor ligero que comparte el kernel del host. Lo gestionas mediante el conjunto de comandos lxc o la API, observando las estadísticas de cgroup para la presión de CPU y memoria. El ajuste consiste principalmente en límites de namespaces y cgroups: fijar procesos, establecer topes de memoria. El coste de equivocarse es la exposición: un escape del kernel compromete todos los contenedores del host, por lo que tratas el host como un único dominio de confianza y planificas la conmutación por error a nivel de host, no por contenedor.

Lo que se suele malinterpretar sobre LXC

La gente trata LXC como un límite de seguridad equivalente a KVM. No lo es: los contenedores comparten kernel, por lo que una falla en ese kernel puede salir de cualquier contenedor. La corrección es que LXC sirve para aislamiento dentro de un dominio de confianza que tú posees, no para hosting multiinquilino donde los inquilinos pueden ser hostiles.

LXC — preguntas frecuentes

¿Es LXC lo mismo que Docker?

No. Docker se basa en primitivas de contenedores como LXC, pero añade gestión de imágenes, capas y orquestación. LXC es más parecido a una VM ligera: ejecutas una distribución completa en él y lo gestionas directamente con systemd o init. Docker se centra en empaquetar aplicaciones; LXC se centra en virtualizar sistemas.

¿Puedo ejecutar LXC con un kernel personalizado?

Eso depende del host. Algunos proveedores, como OnionVPS, dan acceso root completo y permiten kernels personalizados, pero con LXC compartes el kernel del host, por lo que un kernel personalizado no es para el contenedor en sí. Para eso usarías KVM. LXC está ligado a la versión y configuración del kernel que proporcione el host.

Más de virtualización

KVM
KVM es virtualización completa por hardware integrada en el kernel de Linux, lo que da a cada invitado su propio kernel y un aislamiento reforzado por hardware de otros inquilinos.
OpenVZ
OpenVZ es virtualización por contenedores en la que cada instancia comparte el kernel del host, por lo que los invitados no pueden cargar módulos del kernel ni ejecutar un sistema operativo diferente.
Hipervisor
Un hipervisor es la capa de software que crea y ejecuta máquinas virtuales, asignando CPU física, memoria y E/S entre ellas.
Virtualización anidada
La virtualización anidada permite que una máquina virtual ejecute a su vez máquinas virtuales, exponiendo las extensiones de virtualización del procesador al invitado.
vCPU
Una vCPU es un procesador virtual presentado a un invitado, respaldado por tiempo de planificación en un núcleo o hilo físico.
cloud-init
cloud-init es el mecanismo estándar para configurar una máquina virtual en el primer arranque, usando metadatos proporcionados por la plataforma.