Loading search data...

Monitorer votre cluster kubernetes k3s avec prometheus et grafana

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.

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 “Time Series Databasé”.
  • 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 Prometheus

Récupérons le chart promotheus et surchargeons sur valeurs. Par la même occasion voyons comment se passer de tiller :


helm fetch --untar stable/prometheus
cd prometheus
cp values.yaml my-values.yaml

Éditer le fichier my-values.yaml. Personnellement les seules valeurs que j’ai modifiées sont les StorageClass des composants alertmanager, prometheus-server et pushgateway. En effet j’ai fait le choix de centraliser mes données persistantes via un simple server nfs exposé avec un client provisioner (je vous expliquerai une autre fois comment le mettre en place).

     storageClass: "managed-nfs-storage"

Maintenant générons les manifests et lançons le provisionnement de notre stack:

mkdir manifests
helm template  -f my-values.yaml --output-dir ./manifests --name prometheus --namespace monitoring .
cd manifests/prometheus/templates/
kubectl apply -f .

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

kubectl get pod -o wide -n monitoring
NAME                                             READY   STATUS    RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES
prometheus-node-exporter-lql9k                   1/1     Running   0          5h45m   192.168.1.43   kubi1   <none>           <none>
prometheus-kube-state-metrics-698c5bfbd6-wwm5p   1/1     Running   0          5h45m   10.42.0.52     kubi1   <none>           <none>
prometheus-server-77475f7fb5-dhfqf               2/2     Running   0          5h45m   10.42.0.53     kubi1   <none>           <none>
prometheus-alertmanager-6fcfdfb679-w89rg         2/2     Running   0          5h45m   10.42.0.54     kubi1   <none>           <none>
prometheus-node-exporter-2ttd9                   1/1     Running   0          5h45m   192.168.1.77   tower   <none>           <none>
prometheus-pushgateway-7d85754c5d-v4tk5          1/1     Running   0          5h45m   10.42.2.203    tower   <none>           <none>

Installation de Grafana sur notre cluster kubernetes

On reprend le même principe que pour prometheus :

helm fetch --untar stable/grafana
cd grafana
cp values.yaml my-values.yaml

Éditer le fichier my-values.yaml. comme pour promotheus j’ai changé les storageclass. Je vais déployer dans le namespace default car mon issuer pour cert-manager s’y trouve.

Maintenant générons les manifests et lançons le provisionnement de notre stack:

mkdir manifests
helm template  -f my-values.yaml --output-dir ./manifests --name grafana --namespace default .
cd manifests/grafana/templates/
kubectl apply -f .

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

NAME                                      READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
kubectl get pod -o wide -n default | grep grafana
grafana-97bdbfbb5-ftp5h                   1/1     Running   0          3h48m   10.42.0.75    kubi1   <none>           <none>

Je crée mon propre ingress au moyen de ce fichier (n’oubliez pas de modifier le domain avec le vôtre) :

kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/acme-challenge-type: http01
    certmanager.k8s.io/issuer: letsencrypt-prod
    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: default
spec:
  rules:
  - host: grafana.example.com
    http:
      paths:
      - backend:
          serviceName: grafana
          servicePort: service
        path: /
  tls:
  - hosts:
    - grafana.example.com
    secretName: secret-tls-grafana

Maintenant allez sur l’url de grafana

Ah oui !!! Le user c’est admin et mot de passe :

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

Installation du datasource prometheus et des dashboards

Dans un premier temps créons le datasource prometheus. Allez dans le menu Configurations/Datasource et cliquez sur Add Data Source. Sélectionner Prometheus.

Grafana prometheus dashboard

Il suffit juste de remplir URL avec http://prometheus-server.monitoring.svc.cluster.local

Maintenant installons le dashboard node exporter full. Il suffit de télécharger le json à l’adresse suivante. Puis aller dans le menu Dashboard/Manage et choisir import. Sélectionner le json précédemment téléchargé.

Dans la configuration du dashboard il suffit juste de sélectionner la datasource Prometheus précédemment créée. Au bout de quelques instants :

Grafana prometheus dashboard

Installation de l’application kubernetes dans grafana

Cette fois nous allons installer un plugin kubernetes dans grafana :

kubectl exec -it grafana-97bdbfbb5-ftp5h /bin/bash
grafana-cli plugins install grafana-kubernetes-app

Quittez le pod et détruisez le pod grafana comme suit pour charger le plugin :

kubectl delete pod grafana-97bdbfbb5-d5mvm --grace-period=0 --force

Un petit coup de refresh et hop. Configurer votre cluster avec les infos présentes dans votre fichier ~/.kube/config

Grafana prometheus dashboard kubernetes

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

Mots clés :

k3s kubernetes devops

Autres Articles



Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via ce lien. Je vous remercie de votre soutien


Commentaires: