Este proyecto tiene por objetivo mostrar cómo se puede tener una arquitectura escalable en HashiCorp Nomad + Consul, y con balanceador Fabio.
La aplicación está hecha en Quarkus y se conectará a una base de datos MariaDB
Tanto MariaDB como la aplicación Quarkus se ejecutarán en una imagen Docker.
Aquí se indicarán los pasos a seguir.
Existe el archivo Dockerfile.jvm para poder construir la imagen. Antes de crear la imagen, debemos construir la aplicación. Debemos hacerlo dentro de la carpeta del proyecto maven:
cd nomad-quarkusLuego:
./mvnw clean package -DskipTestsCon esto creará el archivo UberJar.
docker build -f src/main/docker/Dockerfile.jvm -t quarkus/nomad-quarkus-jvm:0.0.1 .Construimos la imagen, y tendrá por nombre quarkus/nomad-quarkus-jvm:0.0.1 OJO. No usar latest como tag, porque Nomad no reconoce la reconoce.
Existe el archivo setup.sh que tiene todos los pasos para instalar tanto el JDK, Consul y Nomad, en caso no existan.
Necesitamos tres terminales en ejecución, al que llamaremos: "consul", "nomad" y "deploy"
En el primer terminal, ejecutaremos el comando:
consul agent -dev -client 0.0.0.0En el segundo terminal, ejecutaremos el comando:
sudo nomad agent -dev -bind=0.0.0.0 -network-interface=eth0 -log-level=DEBUGY en el tercer terminal, nos ubicaremos en este mismo directorio, donde se encuentra el archivo stack.nomad, y ejecutaremos el comando:
nomad job run stack.nomadPara obtener el estado del despliegue, debemos ejecutar los siguientes comandos
nomad status revuelta-stackEsto nos mostrará el estado del despliegue. En la parte inferior se verán los ID de los allocations creados. Por ejemplo:
Allocations
ID Node ID Task Group Version Desired Status Created Modified
ca6e2bd4 95dbb39f aplicacion 0 run running 27m13s ago 26m50s ago
e4f4429b 95dbb39f loadbalancer 0 run running 27m13s ago 27m2s ago
Si queremos ver el detalle de loadbalancer, porque queremos ver el IP que le fue asignado, usamos el ID de su allocation:
nomad status e4f4429bParte del resultado es como este:
Allocation Addresses:
Label Dynamic Address
*lb yes 172.25.212.178:9999
*ui yes 172.25.212.178:9998
Para ver la aplicación funcionando, tomamos el IP de la etiqueta lb , por ejemplo:
http 172.25.212.178:9999/apiEste debería ser el resultado:
Usaremos k6, para ello instalaremos la aplicación
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6El script con la prueba de stress es stress-load.js.
En la línea 15 se deberá colocar el IP que se obtuvo del allocation del LB que se mencionó en la sección anterior.
Luego, ejecutar el siguiente comando:
k6 run stress-load.jsPara detener y borrar el despliegue, ejecutamos el comando
nomad job stop --purge revuelta-stack