Monitoring von Kubernetes-Clustern mit Prometheus und Grafana auf CODE-DE

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 CODE-DE 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 CODE-DE 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 CODE-DE 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 CODE-DE 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:

../_images/image2023-11-7_13-17-10.png

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.

../_images/image2023-11-7_13-22-56.png

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).

../_images/image2023-11-7_13-40-1.png

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:

../_images/image2023-11-7_14-24-1.png

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:

../_images/image2023-11-7_14-47-56.png

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

../_images/image2023-11-7_14-54-8.png

Ä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:

../_images/image2023-11-7_15-1-59.png

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:

../_images/image2023-11-7_15-15-23.png

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/

../_images/image2023-11-7_15-16-10.png

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

../_images/importdashboard.png

Als Ergebnis wird das Grafana Kubernetes Observability Dashboard aufgebaut:

../_images/image2023-11-7_15-38-40.png

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 CODE-DE OpenStack Magnum