Ir al contenido principal

LXD: Contenedores en Linux I

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 --

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.

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.






Comentarios

Entradas populares de este blog

Instalando Moodle con Docker

En este blog ya hemos hablado en varios artículos sobre la tecnología de contenedores, pero hasta ahora nos habíamos centrado en LXD . En este artículo vamos a explicar cómo podemos instalar Moodle en menos de un minuto (dependiendo de la velocidad de descarga que se tenga, se puede alargar un poco más) usando contenedores. Acerca de Moodle No voy a explicar que es Moodle ni como instalarlo desde cero, para eso existe en Internet multitud de tutoriales. Lo que sí quiero comentar es que para instalar Moodle hace falta un servidor web con PHP . Además requiere que PHP tenga instalado una serie de componentes adicionales. Por otro lado, necesitamos tener instalado en el servidor un sistema de gestión de bases de datos relacional, ya que Moodle almacena la información en él. Normalmente se utiliza MySQL , MariaDB o PostgreSQL . También debemos crear una base de datos específica para Moodle con su respectivo usuario. Durante la instalación Moodle creará las tablas necesari

Analizando el protocolo HTTP

El objetivo de este artículo es el de explicar de forma práctica el funcionamiento del protocolo HTTP y entender el intercambio de datos que se realiza entre los servidores y los clientes web. Por otro lado, cubre la necesidad de tener un texto en español que sirva de referencia a mis alumnos de Servicios en Red  a la hora de realizar la práctica de clase  HTTP-1 . La idea es ver de forma práctica el funcionamiento interno del protocolo HTTP . Para ello, vamos a utilizar un par de herramientas de la línea de comandos de Linux ( telnet y netcat ), con las que vamos a simular el comportamiento tanto del navegador como del servidor web. HTTP es un protocolo de la capa de aplicación, y como muchos otros protocolos de esta capa, está basado en texto. De hecho, los comandos que envía el navegador al servidor y sus respuestas se pueden leer perfectamente en inglés. Por defecto, HTTP utiliza el puerto 80 TCP y HTTPS  el puerto 443 TCP. Los ejemplos que vamos a ilustrar serán

ZFS, Primera parte

Cuando el año pasado instalé LXD y lo configuré por primera vez, me encontré que podía utilizar, de hecho se recomienda, el sistema de ficheros ZFS para albergar los contenedores. Posteriormente, cuando instalé Proxmox en el servidor de mi departamento, me encontré de nuevo con  ZFS . Anteriormente no le había prestado mucha atención a  ZF S , normalmente utilizo EXT4 o XFS , pero estaba claro que había una estrecha relación entre  ZFS  y los sistemas de virtualización. ZFS  es un sistema de ficheros desarrollado por Sun Microsystems  (creadores también del lenguaje de programación Java ), posteriormente la empresa fue adquirida por Oracle , actuales propietarios. OpenZFS  es la variante libre y posee una licencia de tipo  CDDL , que aunque es software libre, es incompatible con GPL . Por este motivo, el kernel de Linux no lo incorpora de serie. Sin embargo, los usuarios pueden instalarlo sin problemas ya que se encuentra en los repositorios de la mayoría de las distribucione