Mesures et tableau de bord Kubernetes

Photo by Johannes Plenio from Pexels

TL;DR L'API kubernetes expose des mesures relatives aux consommations des serveurs, des pods et des containers via /api/v1/nodes/{node}/proxy/metrics. Cet article montre comment connecter Prometheus à ces routes et comment utiliser Grafana pour afficher un rapport basé sur ces mesures.

Avant de démarrer, lisez les articles intitulés Les évolutions de la supervision et Kubernetes et Prometheus. Le premier explique comment les infrastructures comme Kubernetes changent les besoins en terme de supervision tandis que le second est une introduction à la supervision de Kubernetes avec Prometheus. En particulier, le dernier article explique comment installer kube-state-metrics et node-exporter; Il présente également leur utilisation à l'aide de Prometheus et Grafana.

Dans les sections ci-dessous détaillent:

  • L'installation de Prometheus et Grafana
  • La connexion de Prometheus à l'API kubernetes
  • Le rapport Grafana

Installation et configuration

Les configurations de Prometheus et Grafana sont disponibles dans le répertoire blog/kubernetes-prometheus du projet easyteam-fr/side-effects

Pour l'installer, il suffit de procédez comme suit:

git clone https://github.com/easyteam-fr/side-effects.git
cd side-effects/blog/kubernetes-prometheus
kubectl create namespace monitoring
kubectl apply -k .

Le projet contient:

  • Un compte de service associé à un rôle pour accéder à l'API Kubernetes.
  • Des configmap générées par Kustomize qui contiennent le paramétrage de Prometheus et Grafana, y compris le rapport Kubernetes
  • Un deployment et un service qui servent Prometheus et Grafana

Configuration Prometheus

Le rôle associé au compte de service utilisé par Prometheus donne accès à à toutes les URL de l'API sous /api/v1/nodes/{node}/proxy/metrics. C'est nécessaire pour collecter les mesures. Les règles qui donnent ces accès sont les suivantes:

rules:
- apiGroups: 
    - ""
  resources:
    - nodes
    - nodes/proxy
  verbs: 
    - get
    - list
    - watch
- nonResourceURLs: 
  - /metrics
  verbs:
    - get

Ci-dessous la section de la configuration de Prometheus qui définit les aux 2 URLs "scrapées":

  - job_name: kubernetes-metrics-server-nodes
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
    - role: node
    relabel_configs:
    - action: labelmap
      regex: __meta_kubernetes_node_label_(.+)
    - target_label: __address__
      replacement: kubernetes.default.svc:443
    - source_labels: [__meta_kubernetes_node_name]
      regex: (.+)
      target_label: __metrics_path__
      replacement: /api/v1/nodes/${1}/proxy/metrics

  - job_name: kubernetes-metrics-server-containers
    scheme: https
    tls_config:
      ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    kubernetes_sd_configs:
    - role: node
    relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

Pour tester la connexion, vous créerez une connection avec le service associé à Prometheus comme ci-dessous et vous lancerez une connexion sur localhost:9090

kubectl port-forward -n monitoring svc/prometheus 9090:9090

Configuration Grafana

La configuration Grafana contient le rapport pour visualiser le fonctionnement de Kubernetes. Il s'agit d'une version modifiée de Cluster Monitoring for Kubernetes. En particulier, le nom des labels pod_name a été remplacé par pod et les mesures s'affichent individuellement sur les graphes.

Pour y accéder connectez vous au service grafana et lancez l'URL localhost:3000 depuis votre navigateur:

kubectl port-forward -n monitoring svc/grafana 3000:3000

Le rapport ci-dessous vous donne une vue rapide du fonctionnement de votre cluster:

kubernetes monitoring

Pour aller plus loin

Les étapes suivantes de votre configuration consisteront sans doute à mettre en place la supervision de vos applications et de certains composants clé tels que le collecteur des logs ou vos passerelles d'accès à Kubernetes. Ensuite, vous voudrez mettre en place des alertes et des notifications. Vous pouvez vous y atteler tout de suite ou attendre les articles à venir...

Easyteam DevOps

Easyteam DevOps