Monitoring von Kubernetes-Clustern mit Prometheus und Grafana auf EO-Lab
Komplexe Systeme, die auf Kubernetes bereitgestellt werden, nutzen unterschiedliche Kubernetes-Ressourcen. Solche Bereitstellungen bestehen oft aus einer Reihe von Namespaces, Pods und vielen anderen Entitäten, die Cluster-Ressourcen verwenden.
Um einen Überblick über die Nutzung der Cluster-Ressourcen zu erhalten und ihre Verwendung zu optimieren, ist eine funktionale Einrichtung zur Beobachtung von Clustern erforderlich.
In diesem Artikel stellen wir die Verwendung eines beliebten Open-Source-Observability-Stacks, bestehend aus Prometheus und Grafana, vor.
Was wir abdecken werden
Prometheus installieren
Grafana installieren
Zugriff auf Prometheus als Datenquelle für Grafana
Hinzufügen des Cluster Observability Dashboards
Voraussetzungen
Nr. 1 Konto
Sie benötigen ein EO-Lab Konto mit Zugriff auf die Horizon-Schnittstelle https://cloud.fra1-1.cloudferro.com/auth/login/?next=/.
Nr. 2 Ein Kubernetes-Cluster auf FRA1-1 cloud
Ein Kubernetes-Cluster muss vorhanden sein. Eine Anleitung zur Erstellung eines Kubernetes-Clusters finden Sie unter Erstellen eines Kubernetes-Clusters mit EO-Lab OpenStack Magnum.
Nr. 3 Kenntnisse über Helm
Weitere Informationen zur Verwendung von Helm und zur Installation von Anwendungen mit Helm auf Kubernetes finden Sie unter Einsatz von Helm Charts auf Magnum Kubernetes-Clustern auf der EO-Lab FRA1-1 Cloud
Nr. 4 Zugang zur kubectl-Kommandozeile
Die Anweisungen zur Aktivierung von kubectl finden Sie in: Zugriff auf Kubernetes-Cluster nach der Bereitstellung mit Kubectl auf EO-Lab OpenStack Magnum
1. Prometheus mit Helm installieren
Prometheus ist ein Open-Source-Überwachungs- und Alarmierungs-Toolkit, das in der Systemadministration und in DevOps-Bereichen weit verbreitet ist. Prometheus verfügt über eine Zeitreihen-Datenbank, in der Metriken gespeichert werden können, die von einer Vielzahl anderer Systeme und Software-Tools erzeugt wurden. Es bietet eine Abfragesprache namens PromQL für den effizienten Zugriff auf diese Daten. In unserem Fall werden wir Prometheus verwenden, um Zugriff auf die von unserem Kubernetes-Cluster generierten Metriken zu erhalten.
Wir werden die Prometheus-Distribution verwenden, die über Bitnami bereitgestellt wird. Der erste Schritt besteht also darin, Bitnami in unseren lokalen Helm-Repository-Cache herunterzuladen. Geben Sie dazu den folgenden Befehl ein:
helm repo add bitnami https://charts.bitnami.com/bitnami
Als Nächstes laden Sie die Prometheus Helm-Chart herunter:
helm install prometheus bitnami/kube-prometheus
Wenn die oben genannten Befehle korrekt angewendet werden, sollte das Ergebnis in etwa wie folgt aussehen:
NAME: prometheus
LAST DEPLOYED: Thu Nov 2 09:22:38 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kube-prometheus
CHART VERSION: 8.21.2
APP VERSION: 0.68.0
Beachten Sie, dass wir das Helm-Diagramm der Einfachheit halber im Standard-Namespace bereitstellen. Für die Produktion sollten Sie einen eigenen Namespace verwenden.
Im Hintergrund werden mehrere Prometheus-Pods durch das Diagramm gestartet, was wie folgt überprüft werden kann:
kubectl get pods
...
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 2m39s
prometheus-kube-prometheus-blackbox-exporter-5cf8597545-22wxc 1/1 Running 0 2m51s
prometheus-kube-prometheus-operator-69584c98f-7wwrg 1/1 Running 0 2m51s
prometheus-kube-state-metrics-db4f67c5c-h77lb 1/1 Running 0 2m51s
prometheus-node-exporter-8twzf 1/1 Running 0 2m51s
prometheus-node-exporter-sc8d7 1/1 Running 0 2m51s
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 2m39s
In ähnlicher Weise werden auch mehrere dedizierte Kubernetes-Dienste implementiert. Der Dienst prometheus-kube-prometheus-prometheus stellt das Prometheus-Dashboard zur Verfügung. Um auf diesen Dienst im Browser über den Standardport 9090 zuzugreifen, geben Sie den folgenden Befehl ein:
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090
Rufen Sie dann Ihren Browser über localhost:9090 auf, um ein Ergebnis ähnlich dem folgenden zu erhalten:

Wenn Sie kube in die Suchergebnisse eingeben, schlägt die Autovervollständigung einige der Metriken vor, die in unserem Kubernetes-Cluster verfügbar sind. Zusammen mit der Helm-Diagramminstallation wurden diese Metriken Prometheus zugänglich gemacht, sodass sie in der Prometheus-Datenbank gespeichert sind und abgefragt werden können.

Sie können eine der Metriken auswählen und auf die Schaltfläche Execute klicken, um die Abfrage für die Statistiken dieser Metrik zu verarbeiten. Fügen Sie zum Beispiel den folgenden Ausdruck ein
kube_pod_info{namespace="default"}
um nach allen Pods im Standard- Namespace zu suchen. (Weitere Ausführungen zu den Möglichkeiten der Prometheus-GUI und der PromQL-Syntax würden den Rahmen dieses Artikels sprengen).

2. Grafana installieren
Der nächste Schritt ist die Installation von Grafana. Wir haben das Bitnami-Repository bereits bei der Installation von Prometheus hinzugefügt. Damit wurde auch das Grafana-Repository zu unserem lokalen Cache hinzugefügt. Wir müssen nur noch Grafana installieren.
Bemerkung
Falls Sie eine aktive Browsersitzung von Prometheus aus dem vorherigen Schritt beibehalten möchten, müssen Sie ein anderes Linux-Terminal starten, um mit der folgenden Installationsanleitung fortzufahren.
Standardmäßig wird Grafana Chart mit einem zufälligen, automatisch generierten Admin-Passwort installiert. Wir können eine der Helm-Einstellungen überschreiben, um unser eigenes Passwort zu definieren, in diesem Fall verwenden wir ownpassword als Passwort für die Demo:
helm install grafana bitnami/grafana --set admin.password=ownpassword
Wenn Sie es vorziehen, die Standardeinstellungen beizubehalten, verwenden Sie anstelle des obigen Befehls die folgenden Befehle, um das Diagramm zu installieren und das automatisch generierte Passwort zu extrahieren:
helm install grafana bitnami/grafana
echo "Password: $(kubectl get secret grafana-admin --namespace default -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"
Bei der Installation des Diagramms wird ein einzelner Pod erzeugt. Warten Sie unbedingt, bis dieser Pod fertig ist, bevor Sie mit den weiteren Schritten fortfahren:
kubectl get pods
NAME READY STATUS RESTARTS AGE
...
grafana-fb6877dbc-5jvjc 1/1 Running 0 65s
...
Ähnlich wie bei Prometheus können wir nun über den Befehl port-forward lokal im Browser auf das Grafana-Dashboard zugreifen:
kubectl port-forward svc/grafana 8080:3000
Dann greifen Sie auf das Grafana-Dashboard zu, indem Sie localhost:8080 in den Browser eingeben:

Geben Sie das Login ein: admin und das Passwort ownpassword (oder das automatisch generierte Passwort, das Sie im vorherigen Schritt extrahiert haben).
3. Prometheus als Datenquelle zu Grafana hinzufügen
In diesem Schritt werden wir Grafana so einrichten, dass es unsere Prometheus-Installation als Datenquelle verwendet.
Um fortzufahren, klicken Sie auf das Menü Home in der linken oberen Ecke der Grafana-Benutzeroberfläche, wählen Sie Connections und dann Data sources:

Wählen Sie dann Add data source und wählen Sie Prometheus als Datenquellentyp. Es erscheint der folgende Bildschirm:

Ändern Sie das Feld „Prometheus-Server-URL“ in http://prometheus-kube-prometheus-prometheus.default.svc.cluster.local:9090, d.h. die Adresse des Prometheus-Kubernetes-Dienstes, der für die Bereitstellung der Metriken zuständig ist.
Klicken Sie auf die Schaltfläche Save and test. Wenn alles gut gegangen ist, wird der folgende Bildschirm angezeigt:

4. Dashboard zur Beobachtbarkeit von Clustern hinzufügen
Wir könnten ein Kubernetes Observability Dashboard von Grund auf neu erstellen, aber wir werden lieber eines der bereits verfügbaren Open-Source-Dashboards verwenden.
Um fortzufahren, wählen Sie den Abschnitt Dashboards aus dem zusammenklappbaren Menü in der oberen linken Ecke und klicken Sie auf Import:

Geben Sie dann in das Feld import via grafana.com 10000 ein, die ID des Kubernetes Observability Dashboards vom grafana.com Marktplatz, wie in: https://grafana.com/grafana/dashboards/10000-kubernetes-cluster-monitoring-via-prometheus/

Dann erscheint ein weiterer Bildschirm wie unten abgebildet. Ändern Sie die Datenquelle in Prometheus und klicken Sie auf die Schaltfläche Import:

Als Ergebnis wird das Grafana Kubernetes Observability Dashboard aufgebaut:

Was als nächstes zu tun ist
Sie finden viele andere Dashboards für die Überwachung von Kubernetes zum Import, auf https://grafana.com/grafana/dashboards/ . Häufig verwendete Beispiele sind Dashboards mit den IDs: 315, 15758, 15761.
Der folgende Artikel zeigt einen anderen Ansatz zur Erstellung eines Kubernetes-Dashboards:
Verwendung des Dashboards für den Zugriff auf Kubernetes-Cluster auf EO-Lab OpenStack Magnum