En el presente documento se proponen herramientas de monitoreo que permiten obtener metricas de nodos y pods de un cluster de AKS. Para esto, se instalará y configurara grafana, prometheus y alertmanager mediante la herramienta de helm.

1. Control de versiones del documento

Autor Christian Vidal
Version 1.0
Fecha 03/08/2022

2. Componentes de la herramienta de monitoreo

Grafana es una herramienta de analisis de logs y metricas en donde es posible visualizar, consultar y mostrar datos en tiempo real en forma de tableros personalizados.
Prometheus es un sistema de monitoreo que recopila eventos en tiempo real, que pueden ser consumo de memoria, uso de red o solicitudes entrantes para una aplicación.
Alertmanager trabaja de forma integrada al Prometheus para realizar la evaluación de las reglas de alertas y hacer el envío de notificaciones por email, Jira, Slack y otros sistemas asistidos

3. Arquitectura de monitoreo de metricas

Resumen

La instalacion del cluster de Azure Kubernetes Services ya contara con la herramienta de monitoreo instalada (Grafana y Prometheus) por mesa de trabajo. Ademas, Grafana tendra un dashboard creado por default el cual mostrara las metricas todos los pods existentes en el cluster AKS organizados por namespace.

Características: 

La exposición web publica se mediante un Ingress teniendo como UI el Dashboard de Grafana. El Loadbalancer cuenta con IP publica que tiene asociada un DNS (La misma asociada al ingress). Certificado generado por ZeroSSL y es leído por el ingress controller para la exposicion de forma segura. Creación por Default de un Dashbord de métricas mediante un configmap en el cluster de AKS. Almacenamiento persistente de metricas recogidas por prometheus.

Almacenamiento

Comparativas de almacenamiento:

Seguridad

El acceso al portal de Grafana esta expuesto al mundo y por tal motivo para mejorar la seguridad y privacidad, se utiliza la autenticacion mediante el oauth de BitBucket.

Caracteristicas:

  • Permite a los usuarios acceder al portal de grafana con las credenciales de BitBucket
  • Permite el acceso limitado.
  • Autenticacion basada en tokens

Alertas

La herramienta sera desplegada con un total de 3 alertas definidas como plantilla que indicaran los siguientes estados:

  • PodDownState --> Aplica para los pods en estado (Failed, Pending, Down)
  • NodeCPUExceded --> Aplica para los nodos que superen el 90% de CPU
  • NodeMemoryExceded --> Aplica para los nodos que superen el 90% de Memory
  • ConnectionValidate --> Por default que solo indica que la conexion con el correo donde se recepcionaran las alertas esta funcionando.

Prerequisitos para la instalacion

Para instalar el stack completo de la herramienta es necesario contar con los siguientes:

  • Helm v3
  • Comando Az cli instalado
  • Crear AppPassword en un correo (Ademas del correo)
  • Definir el tamaño y retencion de metricas
  • Contar un certificado valido para poder registrarlo (ZeroSSL)
  • Crear app Oauth en Bitbucket
  • Crear secretos en Keyvault
  • Revisar parametros de archivo values.yaml (Correo elegido)

Instalacion manual:

Descargando el archivo values.yaml

 git clone https://cvidalch@bitbucket.org/telefonica-peru/genesis-iac.git
Path : aks-deployment/templates/values.yaml

La instalacion la plataforma de monitoreo se da mediante la herramienta de helm usando el repositorio de prometheus-community/kube-prometheus-stack. Ejemplo de comando de instalacion de forma manual con los valores automatizados por reemplazar:

helm install prometheus prometheus-community/kube-prometheus-stack -f aks-deployment/templates/values.yaml --version  \
--namespace monitoring \
--set grafana.defaultDashboardsEnabled=false \
--set grafana.forceDeployDashboards=true \
--set grafana.sidecar.dashboards.enabled=true \
--set grafana."grafana\.ini".server.serve_from_sub_path=true \
--set grafana."grafana\.ini".server.domain="aks-team-ingress-deployment_enviroment.region.name.cloudapp.azure.com" \
--set grafana."grafana\.ini".server.root_url="https://aks-team-ingress-deployment_enviroment.region.name.cloudapp.azure.com/gyp" \
--set grafana.ingress.enabled=true \
--set grafana.ingress.annotations."kubernetes\.io/ingress\.class"="nginx" \
--set grafana.ingress.annotations."cert-manager\.io/cluster-issuer"="letsencrypt-prod" \
--set grafana.ingress.path="/gyp" \
--set grafana.ingress.tls[0].hosts[0]="aks-team-ingress-deployment_enviroment.region.name.cloudapp.azure.com" \
--set grafana.ingress.tls[0].secretName="tls-secret" \ 
--set grafana.ingress.hosts[0]="aks-team-ingress-deployment_enviroment.region.name.cloudapp.azure.com" \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.storageClassName="managed-csi" \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.accessModes[0]="ReadWriteOnce" \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage="8Gi" \
--set prometheus.prometheusSpec.retention="2d" \
--set prometheus.prometheusSpec.retentionSize="8GB" \
--set additionalPrometheusRulesMap.rule-name.groups[0].rules[0].labels.team=" team " \
--set additionalPrometheusRulesMap.rule-name.groups[0].rules[1].labels.team=" team " \
--set additionalPrometheusRulesMap.rule-name.groups[0].rules[2].labels.team=" team " \
--set additionalPrometheusRulesMap.rule-name.groups[0].rules[3].labels.team=" team " \
--set alertmanager.config.receivers[0].email_configs[0].auth_password="lmbqothsdytecvtq" \
--set grafana.adminPassword="dGEpBxUxef" \
--set grafana."grafana\.ini"."auth\.generic_oauth".client_id="ByTkXvDCqUE55hqyuY" \
--set grafana."grafana\.ini"."auth\.generic_oauth".client_secret="sFaDhqhE4yfeXay7JjCFKwjShepkUqVs"

Valores que se deben de cambiar segun el ambiente corresponda.

  • aks-team-ingress-deployment_enviroment.region.name.cloudapp.azure.com
  • ByTkXvDCqUE55hqyuY
  • sFaDhqhE4yfeXay7JjCFKwjShepkUqVs
  • team

Instalacion automatizada desde jenkins:

Mediante Jenkins, es posible indicar si el cluster de AKS que se desplegará ya contará con la herramienta o no.

¿Cuándo se debe utilizar?

Con la presencia de un cluster de AKS, se recomienda tener el stack de la herramienta para mantener monitoreado los niveles de estado de los nodos y pods.

Conclusión

  • Arquitectura adataptable a diferentes mesas de trabajo.
  • Facilita el analisis y deteccion de incidentes en los cluster de AKS

Pros

  • Posibilidad de monitorear metricas que generan los pods y nodos.

Contras

  • No es posible el monitoreo logs que generan los pods y nodos.