LXD (Español)
LXD es un «hipervisor» de contenedores y una nueva experiencia de usuario para los contenedores de Linux.
Contents
Preparación
Software requerido
Instale LXC y el paquete lxdAUR, entonces inicie lxd.service
.
Véase Linux Containers#Enable support to run unprivileged containers (optional) si desea ejecutar contenedores sin privilegios. De lo contrario véase #Lanzar un contenedor sin CONFIG_USER_NS.
Método alternativo de instalación
Un método alternativo de instalación es a través de snapd, instalando el paquete snapdAUR y ejecutando:
# snap install lxd
Configurar LXD
LXD necesita configurar un grupo de almacenamiento y (si desea acceso a Internet) la configuración de red. Para ello, ejecute lo siguiente como superusuario:
# lxd init
Accediendo a LXD como un usuario sin privilegios
Por defecto, el demonio LXD permite el acceso a los usuarios del grupo lxd
, así que añada su usuario al grupo:
# usermod -a -G lxd <usuario>
Utilización básica
Crear contenedor
LXD tiene dos partes, el demonio (el binario lxd) y el cliente (el binario lxc). Ahora que el demonio está configurado y en ejecución, puede crear un contenedor:
$ lxc launch ubuntu:16.04
Alternativamente, también puede usar un host LXD remoto como fuente de imágenes. Viene uno preconfigurado en LXD, llamado "images" (images.linuxcontainers.org)
$ lxc launch images:centos/7/amd64 centos
Para crear un contenedor Arch de amd64:
$ lxc launch images:archlinux/current/amd64 arch
Utilización avanzada
Redes en LXD
LXD utiliza las capacidades de red de LXC. Por defecto, conecta contenedores al dispositivo de red lxcbr0
. Consulte la documentación de LXC en la configuración de la red para configurar un puente (bridge) para sus contenedores.
Si desea utilizar una interfaz diferente a lxcbr0
, edite la predeterminada utilizando la herramienta de línea de órdenes lxc:
$ lxc profile edit default
Se abrirá un editor con un archivo de configuración que, de forma predeterminada, contiene:
name: default config: {} devices: eth0: name: eth0 nictype: bridged parent: lxcbr0 type: nic
Puede establecer el parámetro parent
al puente que desee que LXD conecte los contenedores de forma predeterminada.
Ejemplo de configuración de red
Gracias a @jpic, el paquete LXD proporciona ahora algunos ejemplos de configuración de red en /usr/share/lxd/
. Para utilizar esta configuración ejecute las siguientes órdenes:
$ ln -s /usr/share/lxd/dnsmasq-lxd.conf /etc/dnsmasq-lxd.conf $ ln -s /usr/share/lxd/systemd/system/dnsmasq@lxd.service /etc/systemd/system/dnsmasq@lxd.service $ ln -s /usr/share/lxd/netctl/lxd /etc/netctl/lxd $ ln -s /usr/share/lxd/dbus-1/system.d/dnsmasq-lxd.conf /etc/dbus-1/system.d/dnsmasq-lxd.conf
Si utiliza NetworkManager, haga también un enlace simbólico al siguiente archivo:
$ ln -s /usr/share/lxd/NetworkManager/dnsmasq.d/lxd.conf /etc/NetworkManager/dnsmasq.d/lxd.conf
Cambie parent: lxcbr0
a parent: lxd
:
$ lxc profile edit default
Finalmente, active e inicie dnsmasq@lxd.service
y netctl@lxd.service
.
Si encuentra algún problema con la configuración de ejemplo proporcionada o si tiene sugerencias para mejorarla, deje un comentario en la página lxdAUR.
Modificar procesos y limites de archivos
Es posible que desee aumentar el límite del descriptor de archivo o el límite máximo de procesos de usuario, ya que el límite del descriptor de archivo predeterminado es 1024 en Arch Linux.
Edite lxd.service
:
# systemctl edit lxd.service
[Service] LimitNOFILE=infinity LimitNPROC=infinity TasksMax=infinity
Solución de problemas
Comprobar la configuración del kernel
Por defecto, el kernel de Arch Linux está compilado correctamente para los contenedores de Linux y su interfaz LXD. Sin embargo, si está utilizando un kernel personalizado o con opciones modificadas, el kernel podría estar configurado incorrectamente. Verifique que el kernel en ejecución esté correctamente configurado para ejecutar un contenedor:
$ lxc-checkconfig
Lanzar un contenedor sin CONFIG_USER_NS
Para lanzar imágenes debe proporcionar security.privileged=true
durante la creación de la imagen:
$ lxc launch ubuntu:16.04 ubuntu -c security.privileged=true
O para una imagen ya existente puede editar la configuración:
$ lxc config edit ubuntu
name: ubuntu profiles: - default config: ... security.privileged: "true" ... devices: root: path: / type: disk ephemeral: false
O para activar security.privileged=true
para los nuevos contenedores, edite la configuración para el perfil predeterminado (default):
$ lxc profile edit default
Sin ipv4 en un contenedor Arch no privilegiado
Esto fue probado y validado en LXD v.2.20. El contenedor no puede iniciar el servicio systemd-networkd
por lo que no obtiene una dirección ipv4 válida. Stéphane Graber (Problema en Github) sugirió una solución alternativa, ejecute en el host y reinicie el contenedor:
$ lxc profile set default security.syscalls.blacklist "keyctl errno 38"
- stgraber: "La razón es que la unidad networkd de systemd de alguna manera hace uso del llavero del núcleo, que no funciona dentro de contenedores sin privilegios en este momento. La línea anterior hace que la llamada al sistema devuelva no-implementado, lo cual es una solución suficiente para que las cosas vuelvan a funcionar."
Los límites de recursos no se aplican cuando se ven desde dentro de un contenedor
El servicio lxcfs (encontrado en el repositorio Community) necesita ser instalado e iniciado:
$ systemctl start lxcfs
lxd tendrá que ser reiniciado. Active lxcfs para que el servicio se inicie en el arranque.
Desinstalar
Detenga y desactive lxd.service
y lxd.socket
:
Luego desinstale el paquete a través de pacman:
# pacman -R lxd
Si desinstaló el paquete sin desactivar el servicio, es posible que tenga un enlace simbólico roto en /etc/systemd/system/multi-user.wants/lxd.service
.
Si desea eliminar todos los datos:
# rm -r /var/lib/lxd
Si utilizó alguna de las configuraciones de red de ejemplo, debería eliminarla también.