1. Introducción

En este artículo, crearemos las imágenes que contendrán el MQTT broker, los frontales que atenderán las peticiones de nuestros usuarios, y el backend que se encargará de almacenar datos y conectarse con la base de datos de RDS. Todo esto lo haremos usando docker para constuir las imagenes i subirlas a un repositorio versionado.

Antes de nada pero, puede que alguna de las piezas de sonfware mencionados anteriormente no te suene, te dejo por aqui una brebe explicaciópn de que hace cada pieza.

¿Qué es un MQTT Broker?

MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería que se utiliza para la comunicación entre dispositivos IoT. Un MQTT Broker es una pieza clave en la comunicación MQTT, ya que és responsable de gestionar las conexiones de los clientes, recibir y procesar los mensajes publicados por los clientes, y entregar estos mensajes a los suscriptores que se suscriben a los temas (conocidos como topics) correspondientes.

La arquitectura de MQTT se compone de tres elementos principales:

  • Cliente MQTT: Puede ser un dispositivo IoT, un servidor o una aplicación.
  • Broker MQTT: Actúa como intermediario entre los clientes y gestiona la distribución de mensajes.
  • Topics: Son los canales de comunicación a los que los clientes pueden suscribirse o publicar mensajes.

Un ejemplo de un broker MQTT es Mosquitto MQTT, un servidor de mensajes MQTT de código abierto que se utiliza para implementar el protocolo MQTT en aplicaciones IoT. A pesar de que AWS tiene si propio MQTT broker llamado AWS IoT Core, usaremos mosquito con tal de crear una PoC con comunicación entre pods.

¿Que es RDS?

¿Que es docker?

Docker es una plataforma que permite a los desarrolladores construir, empaquetar y distribuir aplicaciones en contenedores.

Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable de un entorno informático a otro. Es decir, nos da igual que por debajo se este ejecutando en Windows, Ubuntu, AMazon Linux 2023 o cualquier otra distribución de sistema operativo entre otros.

En nuestro caso lo usaremos para empaquetar nuestro codigo (mqtt broker, frontend y backend) para que luego pueda ser usado en EKS.

2. Generemos las imágenes personalizadas para nuestro EKS

Para “compilar” las imágenes tendremos que realizar un par de acciones.

Pagina de inicio de Docker desktop
ERRORES COMUNES

Si nos aparece un error como el de la imagen inferior, significa que tenemos que iniciar docker. Asegurate de que esta corriendo.

3. Como subir las imágenes personalizadas a ECR

3.1 Creando los repositorios en ECR

A pesar de que podemos usar otros repos para las imágenes como DOCKER HUB, en este caso almacenaremos las imagenes en AWS Elastic Container Repository.

3.2 Compilando y subiendo las imágenes a ECR

4. Creando los node groups/fargate groups en EKS

Importante: Esto solo lo tienes que hacer si has creado el clúster a través de la consola de AWS, de lo contrario ya estaran creados!

Los Node Groups o Fargate groups de EKS són los grupos de recursos (CPU y RAM) donde se van a ejecutar nuestros pods, es decir, nuestro código. Más abajo explicaremos las diferencias entre estos dos grupos/modalidades de obtener los recursos para nuestra ejecución.

4.1 Asignar IAM Principal

Para poder ver todo lo que pasa dentro de nuestro clúster de EKS, deberemos asignar un IAM Principal, que nos permitirá ver desde la consola de EKS de AWS toda la información.

Para ello haremos lo siguiente:

4.2 Modalidad EC2 vs Fargate en EKS

Antes de poder poner en marcha nuestro clúster de EKS, deberemos decidir que modelo de aprovisionamiento de recursos utilizaremos entre las opciones que nos ofrece AWS.

Si nos vamos al apartado de “Compute” veremos que hay 2 principales apartados, “Node groups” y “Fargate profiles”. Un “Node Group” utilizará el servicio EC2 para aportar potencia computacional al clúster, y, por el contrario, “Fargate profiles” utilizará el servicio AWS Fargate para aportar esa potencia computacional.

EKS terminal del cluster

Como decidir cuál es mejor:

Por lo tanto, todos los modos tienen sus ventajas y sus inconvenientes, por lo que dependerá de tu aplicación final como lo quieras hacer. Para ello AWS ha puesto a disposición un listado de las diferencias entre modalidades Amazon EKS nodes.

En esta PoC vamos a usar los Node Groups (EC2) pero, si en un futuro estás creando un clúster de Kubernetes y no sabes que escoger, te recomendamos que le eches un vistazo a AWS Pricing Calculator donde podrás realizar un cálculo bastante exacto del coste que va a suponer cada opción.

4.3 Creado un node group en EKS

Para desplegar nuestra aplicación, vamos a crear un Node Group por micro-servicio, es decir, uno por el broker, otro para la API, y un último para el backend. A pesar de que no tendremos tráfico suficiente para hacer que la máquina consuma todos los recursos, lo vamos a hacer así para probar también que la comunicación interna entre máquinas funciona y que no nos tenemos que preocupar por el cambio de ips de nodos, etc, sino que iremos por url interna.

Vamos a ello:

ServicioKeyValue
MQTT-BROKERServiceMQTT
FRONTENDServiceFrontend
BACKENDServiceBackend

5. Conclusión

En este articulo, hemos visto como generar imagenes con docker, subir esas imagenes a ECR para que luego puedan ser usadas por los Node Groups de EKS.

También hemos creado nuestros Node Groups, aprendiendo sobre las opciones de las que disponemos para dar potencia computacional a nuestro clúster y las principales diferencias que lleva un modelo sobre el otro.

En el siguiente artículo ya vamos a crear la Base de Datos y probaremos que nuestra aplicación que se ejecuta en este clúster funciona.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *