Aller au contenu

Monitoring de k8s avec prometheus et grafana

logo prometheus

Sans monitoring difficile de comprendre ce qui se passe sur notre cluster kubernetes k3s. Parfois il peut arriver que certains de vos pods ne répondent plus ou votre cluster n’accepte plus aucune commande kubectl, mais comment comprendre ce qu’il s’est passé si vous n’avez de système de monitoring à part fouiller dans les events.

Pour vous superviser mon cluster Kubernetes k3s j’ai fait le choix d’utiliser Prometheus et Grafana :

  • Prometheus est un outil open source de monitoring qui s’installe très facilement sur un cluster k3s. * C’est lui qui va se charger de collecter les métriques de Kubernetes et de les stocker dans sa base de données.
  • Grafana est un logiciel open source, qui permet la visualisation et la mise en forme de données métriques stockées entre autre dans Prometheus.

Installation de la stack Prometheus/Grafana

Nous allons utiliser un helm chart permettant d’installer toute la stack promotheus/grafana. Cette stack contient tout ce qu’il faut pour monitorer un cluster kubernetes, même les dashboards s’y trouvent.

Terminal window
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

Pour personnaliser l’installation générée le fichier de valeurs et faites-y vos modifications.

Terminal window
helm show values prometheus-community/kube-prometheus-stack >>my-values.yml

Maintenant lançons le provisionnement de notre stack:

Terminal window
kubectl create ns monitoring
kubectl config set-context --current --namespace=monitoring

Au bout de quelques minutes vous devriez avoir ceci dans votre namespace monitoring :

Terminal window
kubectl get pod -o wide -n monitoring
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
prometheus-prometheus-node-exporter-wm88p 1/1 Running 0 17h 192.168.1.101 devbox1 <none> <none>
prometheus-kube-prometheus-operator-54bf65d8fc-jwxct 1/1 Running 0 17h 10.42.0.232 devbox1 <none> <none>
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 17h 10.42.0.234 devbox1 <none> <none>
prometheus-kube-state-metrics-77698656df-c8lxk 1/1 Running 0 17h 10.42.0.231 devbox1 <none> <none>
prometheus-grafana-7c7dcd556b-mnhwr 3/3 Running 0 17h 10.42.0.233 devbox1 <none> <none>
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 17h 10.42.0.235 devbox1 <none> <none>

Création de l’ingress Grafana

Je crée mon propre ingress comme pour celui d’Ansible AWX avec un certificat auto-signé avec mkcert. Il suffit de créer un fichier (n’oubliez pas de modifier le domain avec le vôtre) :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/frontend-entry-points: http,https
traefik.ingress.kubernetes.io/redirect-entry-point: https
traefik.ingress.kubernetes.io/redirect-permanent: "true"
name: grafana-ingress
namespace: prometheus
spec:
rules:
- host: grafana.robert.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-grafana
port:
number: 80
tls:
- hosts:
- grafana.robert.local
secretName: wildcard-tls-cert

Maintenant allez sur l’url de grafana (n’oubliez pas de l’ajouter à votre fichier hosts ou à votre serveur DNS.)

homelab devops grafana login

Ah oui !!! Le user c’est admin et mot de passe il faut le récupérer :

Terminal window
kubectl get secret --namespace prometheus prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

Maintenant vous pouvez comment à regarder tous les dashboards qui sont à votre disposition.

homelab devops grafana dashboard

Je vous propose maintenant de voir comment installer loki, un outil de centralisation de logs s’appuyant sur prometheus.