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 va a ser la parte 2.
- Se automatizará el despliegue a Azure Kubernetes Service usando Azure Devops. Esta es la parte 3.
Conectarse a su cuenta de Azure
El Azure CLI nos ayudará en esta tarea, con este simple comando y usando nuestro email y contraseña con la cual sacamos la cuenta.
az login
Deberías obtener información de los tenants donde tienes acceso.
Crear un Azure Container Registry y Azure Kubernetes Service
En la parte 1 ya dejamos listo el MongoDB y RabbitMQ. Ahora vamos a crear el Registro de Contenedores (ACR) y el Kubernetes en Azure (AKS). El Azure Container Registry nos va a permitir guardar las imágenes de nuestros micro servicios y en el AKS vamos a desplegar los contenedores que se crean a partir de dichas imágenes.
Crear un Azure Container Registry
source .scripts/setup-env-variables-azure.sh
# Create a Resource Group, if you have not created oneaz group create --name ${RESOURCE_GROUP} \--location ${REGION}# Create Azure Container Registryaz acr create --name ${CONTAINER_REGISTRY} \--resource-group ${RESOURCE_GROUP} \--sku basic --location ${REGION}# Log into Azure Container Registryaz acr login -n ${CONTAINER_REGISTRY}
Crear el Azure Kubernetes Service
az aks create --name ${AKS_CLUSTER} \--resource-group ${RESOURCE_GROUP} \--location ${REGION} \--attach-acr ${CONTAINER_REGISTRY} \--node-vm-size Standard_DS3_v2 \--node-count 5
az aks get-credentials --name ${AKS_CLUSTER} \--resource-group ${RESOURCE_GROUP}
Desplegar Piggymetrics a Azure Kubernetes Service
cd configmvn compile jib:build \-Djib.container.environment=CONFIG_SERVICE_PASSWORD=${CONFIG_SERVICE_PASSWORD}cd ../registrymvn compile jib:buildcd ../gatewaymvn compile jib:buildcd ../auth-servicemvn compile jib:buildcd ../account-servicemvn compile jib:build \-Djib.container.environment=ACCOUNT_SERVICE_PASSWORD=${ACCOUNT_SERVICE_PASSWORD}cd ../statistics-servicemvn compile jib:build \-Djib.container.environment=STATISTICS_SERVICE_PASSWORD=${STATISTICS_SERVICE_PASSWORD}cd ../notification-servicemvn compile jib:build \-Djib.container.environment=NOTIFICATION_SERVICE_PASSWORD=${NOTIFICATION_SERVICE_PASSWORD}
<plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>1.8.0</version><configuration><from><!-- production-ready distribution of Java --><image>mcr.microsoft.com/java/jre-headless:8u232-zulu-alpine</image></from><to><image>${CONTAINER_REGISTRY}.azurecr.io/${parent.artifactId}-${project.name}</image></to><container><jvmFlags><jvmFlag>-Xms2048m</jvmFlag><jvmFlag>-Xmx2048m</jvmFlag></jvmFlags><ports><port>${CONFIG_PORT}</port></ports><labels><key1>${project.version}</key1></labels></container></configuration></plugin>
Preparar los archivos manifiesto para Kubernetes
# cd to kubernetes foldercd ../kubernetessource ../.scripts/prepare-kubernetes-manifest-files.sh
Crear los Secretos en Kubernetes
kubectl apply -f deploy/0-secrets.yaml# you can view Secrets in Kubernetes using:kubectl get secret piggymetrics -o yaml
Desplegar Spring Cloud Config Server
kubectl apply -f deploy/1-config.yaml
Desplegar Spring Cloud Service Registry
kubectl apply -f deploy/2-registry.yaml
open http://<EXTERNAL-IP-of-config>:8888/gateway/profileopen http://<EXTERNAL-IP-of-config>:8888/account-service/profileopen http://<EXTERNAL-IP-of-config>:8888/statistics-service/profileopen http://<EXTERNAL-IP-of-config>:8888/notification-service/profile...open http://<EXTERNAL-IP-of-config>:8888/notification-service/profile/development...
Desplegar Spring Cloud Gateway
kubectl apply -f deploy/3-gateway.yaml
Desplegar los 4 Spring Cloud micro servicios
kubectl apply -f deploy/4-auth-service.yamlkubectl apply -f deploy/5-account-service.yamlkubectl apply -f deploy/6-statistics-service.yamlkubectl apply -f deploy/7-notification-service.yaml
Abre el PiggyMetrics publicado en Kubernetes
Monitorear los micro servicios en Azure Kubernetes Service
Con el soporte fuera de la caja para agregar logs, métricas, y trazas de aplicaciones distribuidas que brinda Azure Monitor, tu puedes fácilmente visualizar como tus aplicaciones se ejecutan, detectar y diagnosticar issues en tus micro servicios y dependencias, revisar a profundidad la data que tiene problemas y tener un mejor entendimiento de que están haciendo los usuarios en tus aplicaciones.
Revisar los logs de los micro servicios en cloud
# Stream logs from Spring Cloud Config Serverkubectl logs -f --timestamps=true -l app=config# Stream logs from Spring Cloud Service Registrykubectl logs -f --timestamps=true -l app=registry# Stream logs from Spring Cloud Gatewaykubectl logs -f --timestamps=true -l app=gateway# Stream logs from Spring Cloud micro service appskubectl logs -f --timestamps=true -l app=auth-servicekubectl logs -f --timestamps=true -l app=account-servicekubectl logs -f --timestamps=true -l app=statistics-servicekubectl logs -f --timestamps=true -l app=notification-service
Usar los logs agregados y métricas en Azure Log Analytics
//Logs for Spring Cloud Gatewaylet ContainerIdList = KubePodInventory| where ContainerName contains 'auth-service'| where ClusterId contains "aks-workshop-demo"| distinct ContainerID;ContainerLog| where ContainerID in (ContainerIdList)| where LogEntry !contains "AI:"| project LogEntrySource, LogEntry, TimeGenerated, Computer, Image, Name, ContainerID| order by TimeGenerated desc| render table
Video
He grabado también este vídeo para que puedas seguir el artículo sin problemas.
Gracias doc.
ResponderBorrar