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.
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.
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.
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
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/
#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
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
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.
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.