LXD (Español)
LXD es un «hipervisor» de contenedores y máquinas virtuales, además de una nueva experiencia de usuario para los contenedores de Linux.
Preparación
Software requerido
Instale LXC y el paquete lxd, 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>
lxd
es equivalente al superusuario. Más información aquí y aquí.Utilización
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
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.
lxd-agent dentro de una VM
Dentro de las VMs lxd-agent
no está instalado por defecto en el sistema operativo. Este se puede instalar en el equipo montando un recurso de red compartido 9p
. Esto requiere acceso a la consola con un usuario válido.
$ lxc console v1 To detach from the console, press: <ctrl>+a q Ubuntu 18.04.3 LTS v1 ttyS0 v1 login: ubuntu Password: Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-74-generic x86_64) ubuntu@v1:~$ sudo -i root@v1:~# mount -t 9p config /mnt/ root@v1:~# cd /mnt/ root@v1:/mnt# ./install.sh Created symlink /etc/systemd/system/multi-user.target.wants/lxd-agent.service → /lib/systemd/system/lxd-agent.service. Created symlink /etc/systemd/system/multi-user.target.wants/lxd-agent-9p.service → /lib/systemd/system/lxd-agent-9p.service. LXD agent has been installed, reboot to confirm setup. To start it now, unmount this filesystem and run: systemctl start lxd-agent-9p lxd-agent root@v1:/mnt# reboot
Tras esto lxd-agent
estará disponible y lxc exec
funcionará dentro de la VM.
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
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.
Fallo en el inicio de una VM
Arch Linux no distribuye el firmware ovmf firmado para inicio seguro, así que para arrancar máquinas virtuales debe desactivar el arranque seguro por el momento.
$ lxc launch ubuntu:18.04 test-vm --vm -c security.secureboot=false
Esto también se puede añadir al perfil predeterminado.
Sin IPv4 con systemd-networkd
A partir de la versión 244.1, systemd detecta si los contenedores pueden escribir en /sys
. Si es así, udev se inicia automáticamente y rompe IPv4 en contenedores sin privilegios. Véase commit bf331d8 y el debate en linuxcontainers.
En los contenedores creados a partir de 2020, ya debería haber un anulador de systemd.networkd.service
para solucionar este problema, debe crearlo si no es así:
/etc/systemd/system/systemd-networkd.service.d/lxc.conf
[Service] BindReadOnlyPaths=/sys
También podría solucionar este problema estableciendo raw.lxc: lxc.mount.auto = proc:rw sys:ro
en el perfil del contenedor para asegurarse de que /sys
es de solo lectura para todo el contenedor, aunque esto podría ser problemático, según el debate vinculado arriba.
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.