En esta serie de artículos sobre Contenedores Linux vamos a ver cómo podemos instalar el software LXD y su funcionamiento básico. Las pruebas las he realizado en Ubuntu, pero deberían funcionar sin problemas en cualquier otra distro.
-- Este artículo es un extracto de un capitulo de mi libro Servicios de red en Linux, que se encuentra a la venta en Amazon --
-- Este artículo es un extracto de un capitulo de mi libro Servicios de red en Linux, que se encuentra a la venta en Amazon --
1. Instalando el Software
Actualmente se recomienda la instalación utilizando el gestor de paquetes Snap. Aunque Snap fue desarrollado por Canonical, está pensado para poder usarse en todas las distros. En mi caso, como estoy usando Ubuntu no necesito instalarlo pero si usas otra distro como Mint, tendrás que instalar primero el paquete snapd desde los repositorios:
$ sudo apt install snapd
Una vez instalado snapd, ya se puede instalar LXD. Para el funcionamiento de LXD, los usuarios que lo vayan a utilizar tienen que pertenecer al grupo lxd. De modo que vamos a crear primero este grupo y nos vamos a incluir en él.
$ sudo groupadd --system lxd
Con este comando creamos un grupo nuevo cuyo GID pertenece al sistema. A continuación nos vamos a incluir en el grupo con:
$ sudo usermod -G lxd -a usuario
Donde usuario es el usuario con el que trabajamos en el sistema. El lector tendrá que reemplazarlo por el suyo propio. Ahora cerramos la sesión y volvemos a abrirla de nuevo para que el sistema se entere que estamos en el grupo nuevo.
A continuación ya podremos instalar LXD. Para ello, utilizando el gestor de paquetes Snap, introducimos el siguiente comando:
$ sudo snap install lxd
Y tras finalizar la ejecución de este comando, el sistema LXD estará listo para ser inicializado, es decir, establecerle la configuración inicial.
Hay que tener en cuenta que si se usa snap para la instalación, el directorio /var/lib/lxd al que hace referencia la documentación, se encontrará en /var/snap/lxd.
Hay que tener en cuenta que si se usa snap para la instalación, el directorio /var/lib/lxd al que hace referencia la documentación, se encontrará en /var/snap/lxd.
2. Inicializándolo
La primera vez que se va a utilizar LXD hay que inicializarlo, en este proceso se configurarán los parámetros iniciales del sistema. Para ello, introducimos el siguiente comando:
$ lxd init
Este comando nos preguntará una serie de parámetros que tendremos que ir contestando de forma interactiva. Si pulsamos Intro, tomará la respuesta que nos indica por defecto.
La primera pregunta que nos hace es si queremos usar un cluster LXD, aquí he aceptado la respuesta por defecto que es que no:
Would you like to use LXD clustering? (yes/no) [default=no]:
La segunda pregunta es si queremos configurar un nuevo sistema de almacenamiento (pool), de nuevo optamos por la respuesta por defecto que es sí:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Ahora nos pide que le pongamos un nombre a este pool. Una vez más aceptamos el que nos propone por defecto, default, que significa por defecto en inglés ;-)
Name of the new storage pool [default=default]:
En la siguiente pregunta tenemos que indicar el tipo de pool que deseamos. Si disponemos de un disco libre o una partición para almacenar los contenedores podemos utilizar aquí el sistema de ficheros que nos interese, ZFS es una buena opción, ya que LXD utiliza las capacidades avanzadas de este sistema. Pero para esta prueba, como no dispongo de un disco extra, le digo que voy a utilizar un directorio de mi sistema de ficheros, dir:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: dir
Ahora nos pregunta si queremos utilizar un servidor MAAS, Metal As A Service, tomamos la respuesta por defecto, ya que no dispongo de ningún servidor de este tipo:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Ahora le toca el turno a la red, aquí le decimos que sí queremos utilizar un Bridge para que nuestros contenedores se puedan comunicar con el mundo exterior:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
¿Cómo queremos llamar a nuestro Bridge? El valor que trae por defecto está bien:
What should the new bridge be called? [default=lxdbr0]:
En la siguiente pregunta debemos ser cuidadosos ya que tenemos que elegir el rango de direcciones IP que vamos a utilizar con nuestros contenedores. Pero en vez de introducir una dirección de red, lo que tendremos que introducir es la dirección IP y la máscara del Bridge. A partir de la misma, los contenedores recibirán una dirección dentro de la misma red ya que internamente dispone de un servidor DHCP que se encarga de esta tarea. Es conveniente utilizar un rango de direcciones privadas. En mi caso he elegido 192.168.101.1/24:
What IPv4 address should be used? (CIDR subnet notation, "auto" or "none")[default=auto]: 192.168.101.1/24
En la siguiente pregunta elegimos de nuevo el valor por defecto, sí, para que LXD nos redirija mediante NAT el tráfico del bridge, traduciendo las direcciones internas y externas. Más o menos como en los routers SOHO que solemos tener en casa:
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]:
Como no voy a utilizar IPv6 contesto a la siguiente pregunta con none:
What IPv6 address should be used? (CIDR subnet notation, "auto" or "none") [default=auto]: none
Si quisiéramos conectarnos a LXD por la red, contestaríamos yes a la siguiente pregunta. Hay que recordar que LXD cuenta con una API REST para manipular los contenedores y puede ser que nos interese acceder a este sistema desde otro equipo. En mi caso, voy a elegir que no. ¡Ojo! no confundir manipular los contenedores con acceder a ellos y utilizar sus servicios. En el caso de elegir que no, sólo estamos limitando el acceso a la API REST desde la red y no el acceso a los contenedores en sí:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Como quiero que las imágenes almacenadas localmente estén al día, escojo que sí a la siguiente pregunta; que es el valor por defecto:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Y ahora contesto que no a la última pregunta. El fichero YAML al que hace referencia contiene toda la configuración que hemos seleccionado para poder reutilizarla de nuevo:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Y esto es todo por ahora. En un siguiente artículo veremos como utilizar LXD ya que ahora lo tenemos instalado.
Would you like to use LXD clustering? (yes/no) [default=no]:
La segunda pregunta es si queremos configurar un nuevo sistema de almacenamiento (pool), de nuevo optamos por la respuesta por defecto que es sí:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Ahora nos pide que le pongamos un nombre a este pool. Una vez más aceptamos el que nos propone por defecto, default, que significa por defecto en inglés ;-)
Name of the new storage pool [default=default]:
En la siguiente pregunta tenemos que indicar el tipo de pool que deseamos. Si disponemos de un disco libre o una partición para almacenar los contenedores podemos utilizar aquí el sistema de ficheros que nos interese, ZFS es una buena opción, ya que LXD utiliza las capacidades avanzadas de este sistema. Pero para esta prueba, como no dispongo de un disco extra, le digo que voy a utilizar un directorio de mi sistema de ficheros, dir:
Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: dir
Ahora nos pregunta si queremos utilizar un servidor MAAS, Metal As A Service, tomamos la respuesta por defecto, ya que no dispongo de ningún servidor de este tipo:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Ahora le toca el turno a la red, aquí le decimos que sí queremos utilizar un Bridge para que nuestros contenedores se puedan comunicar con el mundo exterior:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
¿Cómo queremos llamar a nuestro Bridge? El valor que trae por defecto está bien:
What should the new bridge be called? [default=lxdbr0]:
En la siguiente pregunta debemos ser cuidadosos ya que tenemos que elegir el rango de direcciones IP que vamos a utilizar con nuestros contenedores. Pero en vez de introducir una dirección de red, lo que tendremos que introducir es la dirección IP y la máscara del Bridge. A partir de la misma, los contenedores recibirán una dirección dentro de la misma red ya que internamente dispone de un servidor DHCP que se encarga de esta tarea. Es conveniente utilizar un rango de direcciones privadas. En mi caso he elegido 192.168.101.1/24:
What IPv4 address should be used? (CIDR subnet notation, "auto" or "none")[default=auto]: 192.168.101.1/24
En la siguiente pregunta elegimos de nuevo el valor por defecto, sí, para que LXD nos redirija mediante NAT el tráfico del bridge, traduciendo las direcciones internas y externas. Más o menos como en los routers SOHO que solemos tener en casa:
Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]:
Como no voy a utilizar IPv6 contesto a la siguiente pregunta con none:
What IPv6 address should be used? (CIDR subnet notation, "auto" or "none") [default=auto]: none
Si quisiéramos conectarnos a LXD por la red, contestaríamos yes a la siguiente pregunta. Hay que recordar que LXD cuenta con una API REST para manipular los contenedores y puede ser que nos interese acceder a este sistema desde otro equipo. En mi caso, voy a elegir que no. ¡Ojo! no confundir manipular los contenedores con acceder a ellos y utilizar sus servicios. En el caso de elegir que no, sólo estamos limitando el acceso a la API REST desde la red y no el acceso a los contenedores en sí:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Como quiero que las imágenes almacenadas localmente estén al día, escojo que sí a la siguiente pregunta; que es el valor por defecto:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Y ahora contesto que no a la última pregunta. El fichero YAML al que hace referencia contiene toda la configuración que hemos seleccionado para poder reutilizarla de nuevo:
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Y esto es todo por ahora. En un siguiente artículo veremos como utilizar LXD ya que ahora lo tenemos instalado.
Comentarios
Publicar un comentario