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
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.
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.
Comparativas de almacenamiento:
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.
La herramienta sera desplegada con un total de 3 alertas definidas como plantilla que indicaran los siguientes estados:
ConnectionValidate --> Por default que solo indica que la conexion con el correo donde se recepcionaran las alertas esta funcionando.
Para instalar el stack completo de la herramienta es necesario contar con los siguientes:
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.
Mediante Jenkins, es posible indicar si el cluster de AKS que se desplegará ya contará con la herramienta o no.
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.