Canonical MAAS, Metal-As-A-Service, y provisiona tus nodos bare metal de forma elegante
Tags: linux, cloud, server, spanish
Published: 2021-10-01 07:26:48

*__AVISO__: las imágenes de este post pertenecen a __Canonical__ la cual tiene __todos los derechos reservados__ de las mismas.*

---
## Introducción
Por razones de **rendimiento** y/o **costes** no todas las aplicaciones **Cloud Native** están alojadas en los grandes proveedores de nube global al estilo de **Amazon AWS**, **Google Cloud** o **Microsoft Azure**.

También ocurre con muchos otros servicios que no están pensados para la nube y continúan ejecutándose en servidores **bare metal** dentro de los distintos [**centros de datos**](https://nixval.com/) que no pertenecen a estos operadores globales.

Para estos casos **Canonical**, la empresa detrás de **Ubuntu Linux**, tiene disponible una potente herramienta **libre** de lo más interesante a la vez que desconocida para muchos administradores de sistemas.

Me refiero a [**MAAS**](https://maas.io/) con la que podrás gestionar todos tus servidores de forma desatendida pudiendo elegir entre **VMWare ESXi**, **Windows**, **CentOS**, **RHEL** y, como no, **Ubuntu**.

**MAAS** tiene dos entidades para poder gestionar la infraestructura **TIC** de una empresa siendo la entidad principal el **controlador de región**.

Este controlador ofrece la **interfaz Web** y una **API REST** y los servicios globales para gestionar nuestra infraestructura privada (**DNS, NTP, Syslog, Squid Proxy**).

Mi consejo es que esté alojado en tu proveedor de nube de confianza por ser una infraestructura de **Alta Disponibilidad (HA)** u opcionalmente puedes alojarla en tu infraestructura [siguiendo estas indicaciones](https://maas.io/docs/snap/3.0/ui/high-availability#heading--region-controller-ha). En ambos casos la base de datos **Postgres** tiene que ser **externa** y en configuración **HA**.

Por otro lado, en cada **rack**, debemos instalar el **controlador de rack**, la otra entidad de **MAAS**, que provee de los servicios locales necesarios para gestionar nuestros nodos (**PXE, IPMI, DHCP, TFTP, ISCSI, NTP**).

*__NOTA:__ El __controlador de rack__ estará alojado en la propia infraestructura del rack y podemos optar por una instalación con soporte [__HA__](https://maas.io/docs/snap/3.0/ui/high-availability#heading--rack-controller-ha).*

![maasHowItWorks](https://assets.ubuntu.com/v1/b03d95a1-maas.io-how-it-works.svg)
<center><sup>* Sólo visible correctamente con el tema oscuro</sub></center>

---
**MAAS** nos permite definir distintas **zonas de disponibilidad** que reflejarán zonas separadas físicamente bien sea por **rack**, **sala** o **centro de datos**. Estas zonas nos permiten declarar **zonas de fallo aisladas**, al estilo de los grandes proveedores de nube, para darnos una idea de cómo distribuir mejor las aplicaciones de **HA**.

![physical availability zones](https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_573,h_258/https://assets.ubuntu.com/v1/d1dc00ae-maas.io-physical-availability-zones.svg)

---
## Servidores
Cada servidor físico controlado por **MAAS** estará configurado para que pueda ser apagado, reseteado o encendido a través de su **BMC** (**IPMI**, **iLO**, etc.) y para arrancar desde la red por **PXE-boot**.

*__NOTA:__ en __MAAS__ a los servidores se les llama __máquina/machine__ y a al resto de dispositivos, routers, switch, etc., __dispositivos/devices__.*

Para **MAAS** cada nodo está en un punto de su **ciclo de vida**:

![node life cycle](https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_353,h_662/https://assets.ubuntu.com/v1/b2cec06d-maas.io-node-lifecycle.svg)

* __Nuevo/New__: Podemos dar de alta manualmente una nueva máquina o puede ser detectada cuando arranque por **PXE-boot** si se detectan automaticamente los parametros para acceder a su **BMC**.

* __Puesta en servicio/Commissioning__: **MAAS** arranca la máquina desde una imagen de **Ubuntu** para recopilar el listado del hardware y añadirlo a su inventario.

* __Lista/Ready__: el administrador puede pasar a configurar los interfaces de red, particiones de disco, etc.

* __Asignada/Allocated__: el administrador ya ha definido su configuración de disco y de red asignando sus **IPs** que pasan a ser **reservadas** para esta máquina.

* __Desplegada/Deploying__: **MAAS** instala el **OS** y configura automáticamente los interfaces de red y las particiones de disco.

* __Liberada/Releasing__: el administrador puede dar de baja una máquina liberándola, **MAAS** iniciará un proceso para borrar el disco de la máquina y dejará de estar disponible para albergar servicios.

Sin entrar en profundidad vamos a ver algunos ejemplos del inventario de un servidor en **MAAS**:

<sup>Resumen:</sub>
![machine summary](https://discourse.maas.io/uploads/default/original/1X/7b47235ff57a570ccba6a6ed09186a3d7483f5a4.png)

<sup>Configuración de red:</sub>
![machine network](https://discourse.maas.io/uploads/default/original/2X/c/c5316db130ae05a9cdabcd49ffaa69f0bb405d1d.png)

<sup>Configuración de almacenamiento:</sub>
![machine storage](https://discourse.maas.io/uploads/default/original/2X/6/658f4814716a1347fda62ab799ba0d72506c128e.png)

---
## Networking
Es una de las partes más potentes ya que nos permite dar de alta todos los recursos relacionados con nuestra **red IP**.

### Fábrica
Es la principal **forma de agrupar a los recursos de red**.

Una **fábrica** la forman **todos los recursos que tienen como finalidad atender a un servicio concreto** sin relación con otros. Por ejemplo, podemos tener 3 servidores sobre los que trabaja nuestro cluster de **Kubernetes** con rangos de red y **VLANs** distintas a otros 2 servidores que dan soporte a un cluster **Proxmox VE**.

En esta línea, podemos ver en la imagen inferior que hay dos **fábricas** con distintas **subredes** y **VLANs** dentro de ellas.

![subnets](https://assets.ubuntu.com/v1/657bb332-installconfig-networking__2.4_subnets.png)

<sup>Detalle de una subred:</sub>
![subnet summary](https://assets.ubuntu.com/v1/17617b35-installconfig-networking__2.4_subnets-summary.png)

*__NOTA:__ __la primera VLAN__ de una fábrica __no está marcada/untagged__ ya que es la utilizada para arrancar los nodos por __PXE-boot__ y es __obligatorio que tenga el servicio DHCP__ activado para asignar al menos una __IP__ al servidor.*

Otra forma de entender el concepto de **fábrica** es que se recomienda configurar nuestros **switches** y **trunks** para permitir conectividad directa a nivel de **capa 2** dentro de la misma mientras que la comunicación entre distintas **fábricas** necesariamente pase por un **router capa 3**.

![MAAS Region scheme](https://discourse.maas.io/uploads/default/original/1X/46177305128bf7f3190f8a7bbd037c33e96f6a9e.png)

### Espacio
Es la otra **forma de agrupar a los recursos de red**, por ejemplo, podemos tener un espacio **WAN** y otro **LAN** o **DRBD** o cualquier concepto que represente una distinción importante **común** dentro de las distintas **Fábricas**.

## Máquinas Virtuales
Otra característica que nos ofrece **MAAS** es la posibilidad de dar de alta a nuestros servidores como **servidores de VM** para crear sobre ellos nuevas **máquinas** que a efectos prácticos son idénticas a las físicas pudiendo desplegar los servicios en cualquiera de ellas.

**Canonical** ha elegido **LXD** como soporte para crear las **VM** lo cual es bastante interesante ya que es una implementación nueva de **LXC** que entra dentro de la **virtualización ligera** por lo que podemos esperar que se aprovechen al máximo los recursos de nuestro hardware.

![LXD VM Project](https://discourse.maas.io/uploads/default/original/2X/e/e0cc264a17d67f9530ff8c2ef2bb9522fed0749a.png)

## Imágenes
Para poder trabajar con los distintos sistemas operativos, **MAAS**, nos ofrece el apartado para gestionar las imágenes de los mismos.

Por defecto trabaja con **Ubuntu** y **CentOS** pero se pueden **cocinar imágenes personalizadas** o añadir otros sistemas incluido **Windows** y sus **licencias** para poder realizar también instalaciones desatendidas.

Otra detalle importante es que podemos trabajar con otras arquitecturas, como por ejemplo **arm64**, de forma que también es una herramienta útil para gestionar infraestructuras de **IoT** o **Edge computing**.

![Ubuntu images](https://discourse.maas.io/uploads/default/original/1X/d208922f1126ec92f6ef06cfaa5e16dbbfc613d0.png)

![CentOS images](https://discourse.maas.io/uploads/default/original/1X/198aa78b2dd3a650f1b3909ae2c9269e159ca1dc.png)

Hasta aquí hemos visto los conceptos más importantes ya que este post sólo pretende ser una **introducción conceptual** a esta herramienta tan interesante. La [**documentación oficial**](https://maas.io/docs) es muy buena y el resto es cuestión de probarla y adquirir **experiencia** :wink:.