Erfahren Sie, wie Sie Prometheus-Operator für die K8s-Clusterüberwachung verwenden

Dieser Artikel wurde vom Autor aus dem „ Promethues-Operator Getting Started Guide “ der Huawei Cloud Community geteilt: Sie können einen Freund finden.

1. Hintergrund

In der Nicht-Operator-Konfiguration überwachen wir k8s-Cluster, indem wir configmap für die Serviceerkennung und das Ziehen von Indikatoren konfigurieren. Der Wechsel zum Prometheus-Operator führt zwangsläufig zu Nutzungsproblemen. Viele Benutzer haben sich an die automatische Erkennung zugrunde liegender Konfigurationen gewöhnt. Der Übergang zu Servicemonitor oder Podmonitor ist mehr oder weniger gewöhnungsbedürftig. Lassen Sie mich Ihnen Prometheus-Operator und die Verwendung von servicemonitor vorstellen.

2. Einführung in Prometheus-Operator

Prometheus Operator stellt Kubernetes eine lokale Bereitstellungs- und Verwaltungslösung für Prometheus-bezogene Überwachungskomponenten zur Verfügung. Der Zweck dieses Projekts besteht darin, die Konfiguration von Überwachungsstapeln basierend auf Prometheus zu vereinfachen und zu automatisieren. Es umfasst hauptsächlich die folgenden Funktionen:

  • Benutzerdefinierte Kubernetes-Ressourcen: Verwenden Sie Kubernetes CRD, um Prometheus, Alertmanager und verwandte Komponenten bereitzustellen und zu verwalten

  • Vereinfachte Bereitstellungskonfiguration: Konfigurieren Sie Prometheus direkt über die Kubernetes-Ressourcenliste, z. B. Version, Persistenz, Kopie, Aufbewahrungsrichtlinie usw.

  • Prometheus-Überwachungszielkonfiguration: Generieren Sie automatisch eine Überwachungszielkonfiguration basierend auf der bekannten Kubernetes-Tag-Abfrage, ohne dass Sie die Prometheus-spezifische Konfiguration erlernen müssen

2.1 Architektur

Die folgende Abbildung ist das offiziell von Prometheus-Operator bereitgestellte Architekturdiagramm. Jede Komponente wird auf unterschiedliche Weise im Kubernetes-Cluster ausgeführt. Der Operator ist der Kernbestandteil. Als Controller erstellt er CRDs wie Prometheus, ServiceMonitor, AlertManager und PrometheusRule. Ressourcenobjekte und überwachen und pflegen Sie dann weiterhin den Status dieser Ressourcenobjekte.

Bild.png

Die folgenden drei Yaml-Dateien beschreiben sehr gut, wie Prometheus mit Servicemonitor verknüpft wird und wie Servicemonitor mit ausgewählten Zieldiensten verknüpft wird.

Bild.png

Damit Prom Anwendungen in k8s überwachen kann, konfiguriert Prometheus-Operator Servicemonitor so, dass er mit den automatisch vom Serviceobjekt gefüllten Endpunkten übereinstimmt, und konfiguriert Prometheus so, dass die Pods dieser Endpoints-Backends überwacht werden. Der Endpoints-Teil von ServiceMonitor.Spec wird zur Konfiguration verwendet Indikator dafür, welche Ports von Endpunkten gelöscht werden.

Das Servicemonitor-Objekt ist sehr clever. Es entkoppelt „Überwachungsanforderungen“ und „Anforderungsimplementierer“. Servicemonitor muss lediglich den Label-Selektor verwenden, eine einfache und vielseitige Möglichkeit, eine „Überwachungsanforderung“ zu deklarieren, dh welche Endpunkte erfasst werden müssen und wie diese erfasst werden. Lassen Sie die Benutzer sich nur um ihre Bedürfnisse kümmern, was eine sehr gute Trennung der Anliegen darstellt. Natürlich wird Servicemonitor irgendwann vom Betreiber in die ursprüngliche komplexe Scrape-Konfiguration konvertiert, aber diese Komplexität wurde vom Betreiber vollständig blockiert.

Die folgende Abbildung zeigt sehr gut, welche Ressourcen Prometheus für den Betrieb bei der Konfiguration von Alarmen benötigt und welche Rolle jede Ressource spielt.

Bild.png

Erhalten Sie zunächst die Überwachungsindikatoren der Anwendung, indem Sie servicemonitor/podmonitor konfigurieren.

Das Feld Prometheus.spec.alerting entspricht der Konfiguration im Alertmanager und der Alertmanager-Instanz

Konfigurieren Sie dann über prometheusrule Alarmregeln für die überwachten Indikatoren.

Konfigurieren Sie abschließend den Alarmempfänger und konfigurieren Sie Alertmanagerconfig, um zu konfigurieren, wie mit Alarmen umgegangen wird, einschließlich des Empfangens, Weiterleitens, Unterdrückens und Sendens von Alarmen usw.;

2.2 Gemeinsame CRDs

Prometheus definiert die erforderliche Prometheus-Bereitstellung.

ServiceMonitor, der deklarativ angibt, wie eine Kubernetes-Dienstgruppe überwacht werden soll. Der Operator generiert automatisch Prometheus-Abrufkonfigurationen basierend auf dem aktuellen Status der Objekte im API-Server.

PodMonitor, der deklarativ angibt, wie eine Pod-Gruppe überwacht werden soll. Der Operator generiert automatisch Prometheus-Abrufkonfigurationen basierend auf dem aktuellen Status der Objekte im API-Server.

PrometheusRule definiert einen Satz erforderlicher Prometheus-Warnungs- und/oder Protokollierungsregeln. Der Operator generiert eine Regeldatei, die von Prometheus-Instanzen verwendet werden kann.

Alertmanager definiert die erforderliche Alertmanager-Bereitstellung.

AlertmanagerConfig, ein Unterabschnitt der Alertmanager-Konfiguration, der deklarativ angibt, dass Warnungen an benutzerdefinierte Empfänger weitergeleitet und das Festlegen von Regeln unterdrückt werden sollen.

Probe, die deklarativ angibt, wie eine Eintragsgruppe oder ein statisches Ziel überwacht werden soll. Der Bediener generiert automatisch eine Prometheus-Scrape-Konfiguration basierend auf der Definition. Wird mit dem Blackbox-Exporter verwendet.

ThanosRuler definiert die erforderliche Thanos Ruler-Bereitstellung.

3. Prometheus-Operator-Installation

Für Prometheus-Operator gelten Anforderungen für die K8S-Clusterversion. Informationen zur Auswahl der entsprechenden Prometheus-Operator-Versionscodebibliothek finden Sie in der Clusterversion: https://github.com/prometheus-operator/kube-prometheus

Bild.png

Die in diesem Dokument verwendete Umgebung ist der 1.25k8s-Cluster entsprechend Version 0.12.0 https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/release-0.12.zip

3.1 Installation

wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/release-0.12.zip
    entpacken Sie release-0.12.zip
    cd kube-prometheus-release-0.12
    kubectl apply --server-side -f manifests/setup
    kubectl warte \
    --for Bedingung=Festgelegt \
    --all CustomResourceDefinition \
    --namespace=Überwachung
    kubectl apply -f manifests/

Bild.png

#Hinweis: Die Bilder von kube-state-metrics und prometheus-adapter sind die Bilder der offiziellen Google-Bibliothek. Es kann zu Problemen kommen, wenn sie in China nicht abgerufen werden können. Wenn der Pod aussteht, weil das Bild nicht abgerufen werden kann, wenden Sie sich bitte an uns Ersetzen Sie sie durch eine verfügbare Spiegeladresse.

3.2 Deinstallation

Hinweis: Bei diesem Schritt handelt es sich um einen Deinstallationsschritt. Wenn Sie Prometheus-Operator weiterhin behalten möchten, führen Sie diesen Schritt bitte nicht aus.kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

4. Verwenden Sie servicemonitor, um die von der Anwendung bereitgestellten Indikatoren zu überwachen

Erstellen Sie ein Bereitstellungsobjekt und Dienstressourcen. Der Dienstport 8080 stellt seine eigenen Indikatoren bereit.

apiVersion: apps/v1 Art: Bereitstellungsmetadaten: Labels: App: Sample-Metrics-App-Name: Sample-Metrics-App-Spezifikation: Replikate: 2 Selektor: MatchLabels: App: Sample-Metrics-App-Vorlage: Metadaten: Labels: App: sample-metrics-app spec: Toleranzen: – Schlüssel: beta.kubernetes.io/arch Wert: arm Effekt: NoSchedule – Schlüssel: beta.kubernetes.io/arch Wert: arm64 Effekt: NoSchedule – Schlüssel: node.alpha.kubernetes. io/unreachable-Operator: Existiert Effekt: NoExecute tolerationSeconds: 0 – Schlüssel: node.alpha.kubernetes.io/notReady Operator: Existiert Effekt: NoExecute tolerationSeconds: 0 Container: – Bild: luxas/autoscale-demo:v0.1.2 Name: Beispiel -metrics-app ports: - name: web containerPort: 8080 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 3 periodSeconds: 5 --- apiVersion: v1 Art: Dienstmetadaten: Name: Sample-Metrics-App Labels: App: Sample-Metrics-App Spezifikation: Ports: - Name: Web-Port: 80 TargetPort: 8080 Selektor: App: Sample-Metrik-App

Erstellen Sie ein Servicemonitor-Objekt, um Anwendungsindikatoren zu sammeln

API-Version: Monitoring.coreos.com/v1
Art: ServiceMonitor
Metadaten:
  Name: Beispielmetrik-App
  Etiketten:
    Service-Monitor: Sample-Metrics-App
Spezifikation:
  Wähler:
    matchLabels:
      app: sample-metrics-app # Entspricht dem Dienst mit der Bezeichnung app: sample-metrics-app
  Endpunkte:
  - port: web #Der von Promethues zum Sammeln von Indikatoren verwendete Port ist der Port, der im Dienst durch portName dargestellt wird.

Sehen Sie sich den neu erstellten Dienst an und greifen Sie über die Dienst-IP auf dem Knoten im Cluster auf die Anwendung zu.kubectl get service

Bild.png

Sie können die von der Anwendung bereitgestellten Metriken anzeigen, indem Sie auf die Metrikschnittstelle der Dienst-IP zugreifen.curl 10.247.227.116/metrics

Bild.png

Es ist ersichtlich, dass der von der Anwendung bereitgestellte Indikator „http_requests_total“ ist und die durch die Überwachung erfasste Zahl 805 beträgt

Verwenden Sie den Browser, um auf die Prometheus-Benutzeroberfläche zuzugreifen und Indikatoren anzuzeigen. Greifen Sie über IP und Port auf den Prometheus-Server zu, um den Überwachungsstatus des Servermonitors und des Indikators anzuzeigen.

Bild.png

Bild.png

Sie können sehen, dass die von der Anwendung bereitgestellten Indikatoren erfolgreich erfasst wurden. Aufgrund des Zeitintervalls für die Indikatorerfassung beträgt die Anzahl der von Prometheus erfassten Indikatoren 800 und die von der Metrikschnittstelle der Anwendung bereitgestellte Anzahl 805.

 

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

IntelliJ IDEA 2023.3 & JetBrains Family Bucket jährliches Hauptversions-Update neues Konzept „defensive Programmierung“: Machen Sie sich einen stabilen Job GitHub.com betreibt mehr als 1.200 MySQL-Hosts, wie kann man nahtlos auf 8.0 aktualisieren? Das Web3-Team von Stephen Chow wird nächsten Monat eine unabhängige App starten. Wird Firefox eliminiert? Visual Studio Code 1.85 veröffentlicht, schwebendes Fenster Die US-amerikanische CISA empfiehlt den Verzicht auf C/C++, um Schwachstellen in der Speichersicherheit zu beseitigen. Yu Chengdong: Huawei wird nächstes Jahr bahnbrechende Produkte auf den Markt bringen und die Branchengeschichte neu schreiben. TIOBE Dezember: C# wird voraussichtlich die Programmiersprache des Jahres. Ein Artikel geschrieben von Lei Jun vor 30 Jahren: „Prinzip und Design des Expertensystems zur Computervirenbestimmung“
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10321080
Recomendado
Clasificación