Introducción
Cuando empecé a experimentar con Spring Boot y Spring Cloud, encontré este gran proyecto en Github denominado PiggyMetrics.
Si bien usa algunos proyectos que desde ya desde la versión Greenwich de Spring Cloud se recomienda reemplazarlos:
- Hystrix por Resilience4j y
- Hystrix Dashboard y Turbine por Micrometer y el sistema de monitoreo
- Zuul por Spring Cloud Gateway
Te muestra como implementar tus micro servicios, el uso de Eureka, Config Server, Ribbon, Hystrix, Feign y el uso del stack ELK y tracing distribuido con Spring Cloud Sleuth para ver las trazas en Zipkin. En resumen tiene de todo. Te invito a probar dicho proyecto usando el url de GitHub que te menciono líneas arriba y experimentar con dicha solución.
Todo el trabajo estará documentado en https://github.com/joedayz/java-on-aks que ha sido actualizado por mi persona para usar Kubernetes 1.16.x.
Objetivo
El objetivo de este artículo no es explicarte como se construyo PiggyMetrics, sino, mostrarte la experiencia de desplegarlo en Azure Kubernetes Service (AKS) y luego automatizar el despliegue con Azure Devops.
- Se creará un MongoDB y RabbitMQ en Azure. Esta va a ser la parte 1.
- Se creará un Azure Kubernetes Service y Azure Container Registry, se desplegará Piggymetrics a Azure Kubernetes Service y se verá cómo resolver problemas de los micro servicios en Azure Kubernetes Service. Esta es la parte 2.
- Se automatizará el despliegue a Azure Kubernetes Service usando Azure Devops. Esta es la parte 3.
Prerequisitos
Para que puedas desplegar esta aplicación Java al cloud, necesitas una subscripción en Azure, sino la tienes, puedes activar una subscribiendote a MSDN o sacandote una cuenta gratuita en Azure.
Luego en tu maquina necesitas:
- Java 8
- Maven 3
- ACR Docker Credential Helper
- Docker
- Kubectl
- Helm
- dos2unix
Inicia - clonando el repositorio
Hay que clonar el repositorio y cambiar a dicho directorio:
git clone https://github.com/joedayz/java-on-aks.git
cd java-on-aks
Crear MongoDB y RabbitMQ
Hay que crear el MongoDB y RabbitMQ en Azure y capturar las coordenadas y credenciales para luego publicarlas en setup-env-variables-azure.sh.
Preparando el entorno de desarrollo
cp .scripts/setup-env-variables-azure-template.sh .scripts/setup-env-variables-azure.sh
# ====== Piggy Metrics Azure Coordinates =====export RESOURCE_GROUP=rg-workshop-demoexport REGION=westus2export AKS_CLUSTER=aks-workshop-demoexport CONTAINER_REGISTRY=acr061174## ===== Mongo DBexport MONGODB_DATABASE=mongodb-workshop-demoexport MONGODB_USER=cosmosdb-user## ===== Rabbit MQexport RABBITMQ_RESOURCE_GROUP=rg-workshop-demoexport RABBITMQ_VM_NAME=rabbitmq-vm-workshop-demoexport RABBITMQ_ADMIN_USERNAME=rabbitmq-admin
pwd/Users/josediaz/Downloads/java-on-akssource .scripts/setup-env-variables-azure.sh
Crear MongoDB
# Change directorycd java-on-aks# Login into Azureaz login# Create a Resource Groupaz group create --name ${RESOURCE_GROUP} \--location ${REGION}# Create a Cosmos DB accountaz cosmosdb create --kind MongoDB \--resource-group ${RESOURCE_GROUP} \--name ${MONGODB_USER}
"id": "/subscriptions/7c947db2-4b57-48ef-a998-d0f495f492fc/resourceGroups/rg-workshop-demo/providers/Microsoft.DocumentDB/databaseAccounts/cosmosdb-user"export MONGODB_RESOURCE_ID="/subscriptions/7c947db2-4b57-48ef-a998-d0f495f492fc/resourceGroups/rg-workshop-demo/providers/Microsoft.DocumentDB/databaseAccounts/cosmosdb-user"
# Get Cosmos DB connection stringsaz cosmosdb list-connection-strings --resource-group ${RESOURCE_GROUP} \--name ${MONGODB_USER}
export MONGODB_URI="mongodb://cosmosdb-user:6Qxfc85NOBVtAbKzKzotTu7pVuG2PTMuCc5m5pcFcsStD3Y5FEqvRlmMkr3cAnjC2EsHzxV5nQBlLPI3x0N0TQ==@cosmosdb-user.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"
Crear RabbitMQ
# https://docs.bitnami.com/azure/infrastructure/rabbitmq/get-started/understand-default-config/az vm open-port --port 5672 --name ${RABBITMQ_VM_NAME} \--resource-group ${RABBITMQ_RESOURCE_GROUP}az vm open-port --port 15672 --name ${RABBITMQ_VM_NAME} \--resource-group ${RABBITMQ_RESOURCE_GROUP} --priority 1100
## ===== Rabbit MQexport RABBITMQ_HOST=52.183.30.245export RABBITMQ_PORT=5672
# Open an SSH connection, say# First, export the environment variablessource .scripts/setup-env-variables-azure.sh
chmod 400 rabbitmq-vm-workshop-demo_key.pem
ssh -i rabbitmq-vm-workshop-demo_key.pem rabbitmq-admin@${RABBITMQ_HOST}
# https://docs.bitnami.com/azure/infrastructure/rabbitmq/administration/control-services/sudo /opt/bitnami/ctlscript.sh status# Stop RabbitMQsudo /opt/bitnami/ctlscript.sh stop# Edit RabbitMQ configurtion file# https://docs.bitnami.com/azure/infrastructure/rabbitmq/administration/connect-remotely/# https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.config.examplesudo nano /opt/bitnami/rabbitmq/etc/rabbitmq/rabbitmq.config# Particularly, change line 4 from{tcp_listeners, [{"127.0.0.1", 5672}, {"::1", 5672}]},# TO{tcp_listeners, [{"0.0.0.0", 5672}, {"::1", 5672}]},# Start RabbitMQsudo /opt/bitnami/ctlscript.sh start
cat ./bitnami_credentials
# Rabbit MQexport RABBITMQ_USERNAME=userexport RABBITMQ_PASSWORD=xxxxxxxxxxxx# export themsource .scripts/setup-env-variables-azure.sh
Excelente post Jose, lo encontre ahora que me tome con el tema de Hystrix y las alternativas ahora que ya esta deprecado, esperamos la parte 2
ResponderBorrar