¿Qué es LXD? Gestiona contenedores con Linux Container Daemon

LXD, forma abreviada de Linux Container Daemon, es una herramienta de gestión de los contenedores del sistema operativo Linux. Ha sido desarrollado por Canonical, que también produce Ubuntu. Actualmente la compañía continúa desarrollando LXD y guía la dirección del proyecto.

LXD es una tecnología hermana de LXC, forma abreviada de Linux Containers. LXC es una tecnología de virtualización a nivel de sistema operativo basada en contenedores. LXC combina espacios de nombres aislados y los “cgroups” del kernel de Linux para crear entornos aislados para ejecutar código. Históricamente, LXC también fue el origen de la popular tecnología de virtualización Docker.

Uno de los objetivos básicos que había detrás el desarrollo de LXD era hacer la gestión de contenedores LXC lo más cómoda posible, como es habitual en el caso de las máquinas virtuales. Sin embargo, el enfoque basado en contenedores ofrece un rendimiento superior al de las máquinas virtuales.

Utilizando LXD, los contenedores del sistema operativo Linux pueden ser configurados y controlados con un conjunto de comandos predefinidos. Por lo tanto, es muy adecuado para automatizar la gestión de contenedores y, a menudo, es utilizado para soluciones cloud y data centers.

¿Cuáles son las características de LXD?

  • Seguridad: los contenedores se ejecutan en espacios de nombres aislados y solo pueden acceder a determinados recursos predefinidos.
  • Escalabilidad: con LXD, puedes gestionar contenedores individuales en tu propio ordenador o miles de contenedores repartidos en distintos entornos.
  • Usabilidad intuitiva: LXD proporciona una API clara y sencilla y un cliente con línea de comandos.
  • Basado en imágenes de Linux: LXD funciona con todas las imágenes de Linux y, por lo tanto, se beneficia de la gran cantidad de instalaciones de Linux existentes.
  • Control de recursos sofisticado: se establecen límites para la CPU, la memoria principal, el uso de la red, el almacenamiento masivo y los recursos del kernel.
  • Acceso al hardware del sistema: si la configuración lo permite, los contenedores pueden acceder a dispositivos USB, GPU y medios de almacenamiento masivo.
  • Gestión de red: la configuración permite crear puentes y túneles de red.
  • Gestión de almacenamiento masivo: LXD admite varios backends de almacenamiento, grupos de almacenamiento y volúmenes de almacenamiento.

¿Cuáles son los pros y los contras de LXD?

La principal ventaja de LXD es que permite la virtualización basada en contenedores de un sistema operativo Linux completo. De esta manera, une la comodidad de las máquinas virtuales con el rendimiento de los contenedores.

A diferencia de la mayoría de los casos de uso basados en Docker, el enfoque no está en virtualizar una sola aplicación (virtualización de aplicaciones). Por contra, la imagen del sistema Linux sirve de base para cada contenedor LXD (virtualización del sistema). Esto es una gran ventaja para el administrador, ya que le da acceso a una gran cantidad de distribuciones de Linux disponibles de forma gratuita y le permite el uso de una gran variedad de herramientas ya existentes.

LXD tiene una desventaja en comparación con otras tecnologías de virtualización: dado que todos los contenedores que se ejecutan en un host tienen acceso al mismo núcleo de Linux, el daemon LXD solo está disponible con Linux. Además, Linux es el único sistema operativo que se puede virtualizar como sistema operativo invitado. Sin embargo, la línea de comandos continúa funcionando en otros sistemas operativos que no son Linux.

Se puede acceder a la REST API del daemonLXD a través de la red, lo que significa que los contenedores se pueden copiar o mover entre dos ordenadores. Y lo que es más importante, LXD admite la creación de ecosistemas de ordenadores que agrupan todas las unidades y las convierten en un súper ordenador virtual.

¿Cómo funciona LXD?

El componente clave de LXD es el daemon con privilegios que se ejecuta en el sistema anfitrión Linux (también sistema host). El daemon de LXD proporciona una REST API a través de un socket Linux local. A través de los ajustes de configuración, también se puede acceder al daemon usando la red. LXD usa LXC como backend a través de la librería liblxc y de sus Go bindings.

Los clientes interactúan con el daemon utilizando la REST API. La API define un lenguaje que se puede utilizar para crear, controlar y cambiar contenedores. El cliente más simple es la herramienta de línea de comandos oficiales. El cliente de línea de comando proporciona comandos para operaciones habituales y accede a la REST API internamente.

A continuación, hemos agrupado algunos comandos básicos LXD. Presta atención a que el nombre de los comandos LXD es lxc, no lxd. Puedes probar los comandos sin instalar el cliente de línea de comandos en tu sistema. Simplemente utiliza la interfaz basada en la Web del proyecto linuxcontainers.org.

# mostrar los comandos LXD y las opciones
lxc
# mostrar las imágenes existentes de Ubuntu 
lxc image list ubuntu: | less
# iniciar una instancia Ubuntu 18.04 como contenedor con el nombre “Ubuntu”
lxc launch images:ubuntu /18.04 ubuntu
# listar contenedores
lxc list
# mostrar la configuración del contenedor llamado “Ubuntu”
lxc config show ubuntu 
# mostrar información del contenedor llamado “Ubuntu”
lxc info ubuntu

¿Dónde y cuándo se usa LXD?

LXD generalmente se puede instalar en cualquier sistema Linux moderno. Se utiliza en ordenadores privados, así como en plataformas de computación cloud y data centers. El objetivo principal es, a largo plazo, virtualizar todo un sistema operativo Linux. Por lo tanto, LXD contrasta con Docker, donde el enfoque está más en contenedores de corta duración que contienen una sola aplicación. Según Stéphane Graber, desarrollador de LXD ,:

Cita

“Those containers will typically be long running and based on a clean distribution image. Traditional configuration management tools and deployment tools can be used with LXD containers exactly as you would use them for a VM, cloud instance or physical machine.

In contrast, Docker focuses on ephemeral, stateless, minimal containers that won’t typically get upgraded or re-configured but instead just be replaced entirely. That makes Docker and similar projects much closer to a software distribution mechanism than a machine management tool.” – Stéphane Graber, Fuente: https://stgraber.org/2016/03/11/lxd-2-0-introduction-to-lxd-112/

Traducción:

“Por lo general, esos contenedores serán de larga duración y se basarán en una imagen de distribución limpia. Las herramientas de configuración y de implementación tradicionales se pueden usar con contenedores LXD exactamente igual que se usarían para una máquina virtual, solución cloud o máquina física.

Por el contrario, Docker se centra en contenedores mínimos, efímeros, sin estado, que normalmente no se actualizan o reconfiguran, sino que simplemente se reemplazan por completo. Eso hace que Docker y otros proyectos similares estén mucho más cerca de un mecanismo de distribución de software que de una herramienta de gestión de máquinas.” (Traducido por IONOS)

El cliente de línea de comandos incluido sirve para administrar un pequeño número de contenedores. No obstante, no está diseñado para gestionar una gran cantidad de contenedores en numerosos hosts distribuidos. En este caso, recomendamos recurrir a conexiones en las plataformasOpenStack y OpenNebula.

¿Cuáles son los componentes de LXD?

Las partes principales de LXD son el ya mencionado daemon, la REST API proporcionada, y la línea de comandos. A continuación, veremos los principales elementos que se utilizan con LXD.

Contenedores

El contenedor es la principal abstracción que aporta LXD. Un contenedor LXD incluye las siguientes propiedades:

  • Un sistema de archivos de Linux
  • Ajustes de configuración como límites de recursos, variables de entorno, opciones de seguridad, etc.
  • Dispositivos de red y de almacenamiento masivo
  • Perfil de configuración, del cual el contenedor hereda los ajustes
  • Propiedades generales como la arquitectura del contenedor, el nombre y la indicación de si el contenedor es de corta o larga duración
  • Estado de funcionamiento, como rendimiento de la red, uso de memoria, etc.

Capturas

Como es habitual con otras tecnologías de virtualización, las capturas se pueden crear desde un contenedor. Una captura es idéntica al contenedor subyacente. Son inmutables, lo que significa que no se pueden cambiar. Solo se pueden cambiar de nombre y eliminar. Un contenedor se puede restaurar de forma idéntica en función de una captura.

Imágenes

Aunque LXD es una tecnología basada en contenedores, la imagen del sistema Linux está involucrada en la creación de contenedores. Cada contenedor LXD deriva, por definición, de una imagen.

Las imágenes normalmente son distribuciones de Linux sin modificar, como es el caso de las máquinas virtuales o las instancias cloud. Una imagen puede identificarse por su hash SHA256 único. Para facilitar las cosas a los usuarios humanos, a las imágenes se les pueden asignar nombres de alias.

Las imágenes de Linux se pueden extraer de varias fuentes para su uso con LXD. Los siguientes servidores de imágenes están predefinidos en LXD:

  • ubuntu: proporciona imágenes estables de Ubuntu
  • ubuntu-daily: proporciona compilaciones diarias de imágenes de Ubuntu
  • images: proporciona una variedad de imágenes de otras distribuciones de Linux y es administrado por la comunidad

Las imágenes descargadas por el daemon se guardan automáticamente en una caché, de modo que en casos de uso repetido están disponibles inmediatamente. Si no está configurado con otros parámetros, LXD verificará la versión de las imágenes descargadas y cargará nuevas versiones si es necesario. Similar al concepto de Vagrant box, un contenedor existente se puede publicar como una nueva imagen con LXD.

Perfiles

Un perfil LXD agrupa varias opciones de configuración de contenedores. Se puede aplicar un perfil a varios contenedores; además, se pueden aplicar varios perfiles sucesivamente a un solo contenedor. En el transcurso de este proceso, se pueden sobrescribir los valores de configuración definidos. Así es como se pueden crear fácilmente familias de contenedores. LXD está disponible con dos perfiles:

  • El perfil default se aplica automáticamente a los contenedores si no se ha establecido un perfil alternativo. Este perfil contiene ajustes de configuración básicos, como el dispositivo de red eth0 del contenedor.
  • El perfil docker sirve para configurar un contenedor LXD destinado a alojar un contenedor Docker. El perfil solicita al contenedor LXD que cargue los módulos del kernel necesarios y establezca la configuración del dispositivo. También activa el anidamiento de contenedores.

Remotos

LXD es una red daemon, lo que significa que el cliente de línea de comandos puede comunicarse con varios servidores LXD remotos y servidores de imágenes. Se pueden configurar varios servidores como remotos. Así es como los contenedores existentes se pueden copiar y mover entre servidores LXD; y es a través de controles remotos que se habilita el acceso al servidor de imágenes. Además de los servidores de imágenes mencionados anteriormente, el cliente de línea de comandos también conoce el control remoto local. Esto facilita la comunicación con el daemon local LXD utilizando un socket UNIX.

¿Cuáles son las alternativas a LXD?

Hoy existe un amplio espectro de tecnologías de virtualización que, en teoría, podrían usarse como alternativas a LXD. Se diferencian en función de varios criterios y se pueden dividir en dos grupos principales: herramientas de virtualización tradicionales basadas en máquinas virtuales y tecnologías basadas en contenedores. LXD es una excepción a esta segmentación, ya que es un enfoque híbrido que virtualiza todo un sistema operativo Linux mediante contenedores.

Algunas herramientas de virtualización requieren que Linux se utilice como sistema anfitrión (host); otros pueden ejecutarse en cualquier sistema operativo. Algunos solo admiten Linux como sistema invitado, mientras que otros admiten varios sistemas. Muchas tecnologías basadas en contenedores se centran principalmente en la virtualización de aplicaciones, mientras que las máquinas virtuales siempre involucran un sistema operativo completo.

Dado que LXD se basa en LXC, es posible utilizar una instalación LXC “desnuda” como alternativa a LXD. Sin embargo, es probable que la experiencia sea menos cómoda. Al no existir un daemon sin LXD, la virtualización no se puede controlar en la red. Y tampoco habrá una REST API que sirva como interfaz uniforme.

Entre las herramientas de virtualización más conocidas, containerd es más comparable a LXD. También funciona como un daemon que proporciona una API. Esto hace posible administrar contenedores en la red, igual que con LXD. La tecnología está integrada en Docker y se utiliza habitualmente.

En general, deberías elegir la tecnología adecuada en función de tus necesidades específicas. A continuación, ofrecemos una descripción general de las tecnologías de virtualización más utilizadas.

Virtualizador Tipo Sistema anfitrión (host) Sistema invitado
LXD Contenedor Solo Linux Solo Linux
LXC Contenedor Solo Linux Solo Linux
containerd Contenedor Linux, Windows Varios / App
Docker Contenedor Linux, macOS, Windows Varios / App
Kubernetes Contenedor Linux, macOS, Windows Varios / App
KVM Máquina virtual Solo Linux Linux, Windows
VirtualBox / VMware Máquina virtual Linux, macOS, Windows Varios