Una vez que dominas la creación básica de contenedores LXC con LXD, el siguiente paso es explorar las capacidades avanzadas de redes, almacenamiento, snapshots y perfiles. Estas características son esenciales para entornos de producción y administración eficiente.
Redes en LXD: bridges, attach e IP estática
LXD utiliza bridges de red para conectar los contenedores al mundo exterior. Por defecto, lxd init crea un bridge llamado lxdbr0 con DHCP interno y NAT. Sin embargo, puedes crear bridges adicionales con configuraciones específicas.
# Crear un bridge de red personalizado
lxc network create mibridge --type=bridge ipv4.address=192.168.100.1/24 ipv4.nat=true ipv6.address=none
# Listar redes disponibles
lxc network list
# Ver detalles de un bridge
lxc network show lxdbr0
Una vez creado el bridge, puedes asignar contenedores a esa red y configurarles IP estática mediante dispositivos de red.
# Lanzar contenedor conectado a un bridge específico
lxc launch ubuntu:24.04 web-server --network mibridge
# Adjuntar un contenedor existente a otra red
lxc network attach mibridge web-server eth1
# Asignar IP estática a un contenedor
lxc config device add web-server eth0 nic nictype=bridged parent=mibridge ipv4.address=192.168.100.10
Almacenamiento: pools y backends
LXD soporta múltiples backends de almacenamiento: ZFS, btrfs, LVM, Ceph y dir. Cada uno ofrece diferentes propiedades de rendimiento, snapshots y cuotas. Los pools de almacenamiento agrupan el espacio disponible para los contenedores e imágenes.
# Crear un pool de almacenamiento con ZFS en un disco dedicado
lxc storage create pool-zfs zfs source=/dev/sdb
# Crear un pool con btrfs en un directorio
lxc storage create pool-btrfs btrfs source=/var/lib/lxd/extra
# Listar pools existentes
lxc storage list
# Mostrar información detallada de un pool
lxc storage show pool-zfs
# Lanzar un contenedor en un pool específico
lxc launch ubuntu:24.04 mi-container --storage pool-zfs
Los pools de almacenamiento pueden asignarse por contenedor, lo que permite mezclar backends según las necesidades de cada workload (ZFS para snapshots rápidos, dir para simplicidad, Ceph para clustering).
Snapshots: instantáneas de contenedores
Los snapshots capturan el estado completo de un contenedor en un momento dado. Son ideales para backups rápidos, rollbacks después de actualizaciones o antes de cambios riesgosos. LXD soporta snapshots de forma nativa, especialmente eficientes con ZFS o btrfs como backend.
# Crear un snapshot antes de hacer cambios importantes
lxc snapshot mi-container pre-update
# Listar snapshots de un contenedor
lxc list snapshots mi-container
# Restaurar un snapshot (detiene el contenedor primero)
lxc restore mi-container pre-update
# Eliminar un snapshot antiguo
lxc delete mi-container/pre-update
# Crear snapshot con nombre descriptivo y expiración
lxc snapshot mi-container backup-$(date +%Y%m%d) --expiry 7d
Profiles: plantillas reutilizables
Los profiles en LXD son plantillas que agrupan configuraciones de red, almacenamiento, recursos y dispositivos. Permiten aplicar configuraciones consistentes a múltiples contenedores sin repetir comandos. Cada contenedor puede heredar de uno o varios perfiles.
# Crear un perfil con límites de recursos y red
lxc profile create desarrollo
# Editar el perfil con configuración YAML
lxc profile edit desarrollo
# Agrega:
# config:
# limits.memory: 512MB
# limits.cpu: 1
# devices:
# eth0:
# nictype: bridged
# parent: mibridge
# type: nic
# root:
# path: /
# pool: pool-zfs
# type: disk
# Asignar perfil a un nuevo contenedor
lxc launch ubuntu:24.04 app-dev --profile desarrollo
# Agregar perfil a un contenedor existente
lxc profile assign app-dev default,desarrollo
# Listar y ver perfiles
lxc profile list
lxc profile show default
Los perfiles pueden combinarse en orden de precedencia. Las configuraciones del último perfil en la lista sobreescriben a los anteriores. Esto permite tener un perfil base con la red y storage, y perfiles específicos por tipo de workload (web, base de datos, desarrollo).
Dominar redes, almacenamiento, snapshots y perfiles te permitirá administrar flotas de contenedores LXC con la misma eficiencia que un hipervisor de máquinas virtuales, pero con la ligereza de los contenedores del sistema.