In diesem Beitrag unseres Kubernetes-Ratgebers geben wir unseren Lesern einen Überblick und eine Schritt-für-Schritt-Anleitung für die Open-Source Prometheus Operator Software. Der Prometheus Operator wird hierbei bei der Integration des Prometheus-Überwachungssystems in einer Kubernetes-Umgebung eingesetzt.
Beim Operator handelt es sich um eine neue Klasse von Software, die 2016 von CoreOS eingeführt wurde (kürzlich von Red Hat erworben). CoreOS ist das Unternehmen hinter Tectonic, der kommerziellen Kubernetes-Verteilerplattform, die den CoreOS-Stack mit Kubernetes zusammenführt, um Unternehmen eine Google-ähnliche Infrastruktur in jeder Cloud oder On-Premise-/Bare-Metal-Umgebung bereitzustellen.
Beim Operator handelt es sich um eine neue Klasse von Software, die 2016 von CoreOS eingeführt wurde (kürzlich von Red Hat erworben). CoreOS ist das Unternehmen hinter Tectonic, der kommerziellen Kubernetes-Verteilerplattform, die den CoreOS-Stack mit Kubernetes zusammenführt, um Unternehmen eine Google-ähnliche Infrastruktur in jeder Cloud oder On-Premise-/Bare-Metal-Umgebung bereitzustellen.
CoreOS erstellte Operators als eine eigene Software-Kategorie, die in der Lage ist, andere Software-Anwendungen zu bedienen. Hierzu werden betriebliche Fähigkeiten injiziert. Der Prometheus Operator optimiert die Funktionalität von Prometheus auf Kubernetes, während die Kubernetes-nativen Konfigurationsoptionen beibehalten werden können.
Die Operator-Software enthält Wissen über die Anwendungsdomänen, um regelmäßig auftretende Aufgaben zu automatisieren, was auf den Kubernetes Ressourcen- und Controller-Konzepten aufbaut. Das Kernelement der Operator-Software besteht darin, dass manuelle Bereitstellungen sowie Lebenszyklusmanagement entfernt werden, sodass sich DevOps-Ingenieure auf die Konfigurationsoptimierung konzentrieren können.
Prometheus selbst ist eng mit Kubernetes verbunden – beide befinden sich unter der Aufsicht der Cloud Native Computing Foundation (CNCF). Kubernetes entwickelte sich als Open-Source-Erweiterung von Googles Borg Cluster-System und wurde auch ursprünglich von Google veröffentlicht. Prometheus enthält dagegen viele Merkmale vom Borgmon Design-Konzept, dem Monitoring-System, das Google für Borg entwickelt hatte. Diese gemeinsame Abstammung wird deutlich, wenn man hinter die Kulissen von Kubernetes schaut, da die internen Metriken von Borg im gleichen Prometheus-nativen Format exportiert werden.
Wann gelingt IT Outsourcing?
(und wann nicht?)
Die Zweck des Prometheus Operators besteht darin, den Betrieb von Prometheus auf Kubernetes so einfach wie möglich zu gestalten und gleichzeitig die Konfigurationsfähigkeit aufrechtzuerhalten und die Konfiguration Kubernetes-nativ zu erstellen (Quelle).
Der Operator nimmt dem Benutzer (Administrator) die Bearbeitung von Konfigurationsdateien ab und konfiguriert Prometheus automatisch basierend auf YAML-Dateien.
Prometheus Operator Architektur (Quelle)
Die Installation vom Prometheus Operator gestaltet sich so einfach wie das Schreiben einer einzigen Befehlszeile. Das Ergebnis dieser einfachen Befehlszeile besteht darin, dass DevOps-Ingenieure Prometheus-Instanzen mit einer abgespeckten deklarativen Konfiguration verwalten können. Diese Konfiguration führt zur Erstellung, Konfiguration und Verwaltung von Prometheus-Monitoring-Instanzen.
Der Prometheus Operator bietet eine Reihe von Kernfunktionen an:
Eine Prometheus-Instanz kann einfach im Kubernetes namespace, durch ein Team, das den Operator bedient oder mit einer bestimmten Anwendung eingeleitet werden.
Die Grundlagen von Prometheus sind wie die Versionen, Beständigskeits-, Retentionsrichtlinien und Repliken einer nativen Kubernetes-Ressource konfiguriert.
Die Überwachung von Zielkonfigurationen wird automatisch erstellt und basiert auf bekannten Kubernetes-Label-Anfragen. Prometheus benötigt keine Entwickler, die eine eindeutige Konfigurationssprache lernen.
Der Prometheus Operator verwendet CRD (Custom Resource Definitions), um Konfigurationsdateien zu generieren und Prometheus-Ressourcen zu ermitteln.
Der Operator überwacht die Prometheus-Ressourcen und generiert das StatefullSet (Prometheus und Alertmanager) sowie die Konfigurationsdateien (prometheus.yaml, alertmanager.yaml).
Der Operator überwacht ebenfalls Ressourcen von ServiceMonitors, PodMonitors und ConfigMaps und generiert hierauf basierend Prometheus.yaml.
3 Container werden in Prometheus gestartet:
Verarbeitung der Service Monitors:
Wie bei Prometheus laufen 2 containers in einem Pod:
Prometheus wird mithilfe von helm installiert.
Wir klonen das Repository und aktualisieren den Envoy:
cd charts/stable/prometheus-operator helm dependency update
Nun wird Prometheus installiert:
helm install --name prometheus --namespace monitoring prometheus-operator
Jetzt sollten Nutzer Folgendes sehen:
kubectl get pod
NAME READY STATUS RESTARTS AGE alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 0 1m prometheus-grafana-656769c888-445wm 2/2 Running 0 1m prometheus-kube-state-metrics-57f9c94c59-sg5bn 1/1 Running 0 1m prometheus-prometheus-oper-operator-6844ff8f64-rzwlf 2/2 Running 0 1m prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 1 1m
Nachdem alle Pods gestartet sind, können wir uns das Web-UI ansehen:
kubectl port-forward prometheus-prometheus-prometheus-oper-prometheus-0 9090:9090
Öffnen Sie im Browser http: // localhost: 9090. Die Standarddienste sollten unter „Service Discovery“ aufgeführt sein:
Um zu sehen, welche Metriken benötigt werden, sollte folgender Befehl ausgeführt werden:
kubectl get servicemonitors.monitoring.coreos.com
prometheus-prometheus-oper-alertmanager 19d prometheus-prometheus-oper-apiserver 19d prometheus-prometheus-oper-coredns 19d prometheus-prometheus-oper-grafana 19d prometheus-prometheus-oper-kube-controller-manager 19d prometheus-prometheus-oper-kube-etcd 19d prometheus-prometheus-oper-kube-proxy 19d prometheus-prometheus-oper-kube-scheduler 19d prometheus-prometheus-oper-kube-state-metrics 19d prometheus-prometheus-oper-kubelet 19d prometheus-prometheus-oper-operator 19d prometheus-prometheus-oper-prometheus 19d
Wir haben dasselbe im Web-UI gesehen.
Fügen Sie nun unsere eigenen Metriken zu Prometheus hinzu. Als Beispiel verwenden wir traefik. Erstellen Sie die traefik-deployment.yaml-Datei und installieren Sie diese in Kubernetes:
vi traefik-deployment.yaml
kind: Deployment apiVersion: extensions/v1beta1 metadata: name: traefik namespace: ingress labels: app: traefik spec: replicas: 1 selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: containers: - image: traefik:v1.7.11-alpine name: traefik-ingress-lb args: - --api - --api.statistics - --kubernetes - --logLevel=INFO - --configfile=/config/traefik.toml ports: - containerPort: 8080 name: metrics
kubectl apply -f traefik-deployment.yaml
Schauen Sie nach folgenden Metriken:
kubectl port-forward traefik-hjbjk 8080:8080
Öffnen Sie den Browser http: // localhost: 8080 / metrics. Hier sollte Folgendes erscheinen:
Erstellen Sie nun die traefik-metrics-service.yaml Service-Datei für folgende Metriken:
vi traefik-metrics-service.yaml
apiVersion: v1 kind: Service metadata: name: traefik-metrics namespace: ingress labels: app: traefik-metrics release: monitoring spec: selector: app: traefik ports: - name: metrics port: 8080 targetPort: 8080 type: ClusterIP
Stellen Sie diese in unserem Kubernetes bereit:
kubectl apply -f traefik-metrics-service.yaml
Wir prüfen unseren Service:
kubectl port-forward svc/traefik-metrics 8080:8080
Auf http: // localhost: 8080 / metrics sollten Sie dieselben Metriken wie im oben beschriebenen Port-Forward sehen.
Jetzt: deployServiceMonitors. Prometheus entdeckt ServiceMonitors nach Label. Sie sollten wissen, nach welchem ServiceMonitors-Label Ausschau gehalten wird. Hierzu ist folgender Schritt nötig:
kubectl get prometheuses.monitoring.coreos.com -oyaml
Wir schauen uns den serviceMonitorSelector-Block an:
serviceMonitorNamespaceSelector: {} serviceMonitorSelector: matchLabels: release: monitoring
In unserem Fall handelt es sich um release: monitoring. Da wir das Label kennen, können wir den traefik-servicemonitor.yaml-File erstellen:
vi traefik-servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: traefik labels: release: monitoring app: traefik-metrics spec: endpoints: - port: metrics path: '/metrics' namespaceSelector: any: true selector: matchLabels: app: traefik-metrics release: monitoring
Ein neues Target sollte nun in Prometheus erscheinen, schauen Sie hierzu nach:
kubectl port-forward prometheus-prometheus-prometheus-oper-prometheus-0 9090:9090
Öffnen Sie den Browser http: // localhost: 9090:
Wenn die Metriken erfolgreich sind, kann ein Dashboard für Grafana erstellt werden.
Laden Sie das Dashboard hier herunter -. Und ändern Sie es in ConfigMap:
vi traefik-dashboard.yaml
{{- if and .Values.grafana.enabled .Values.grafana.defaultDashboardsEnabled .Values.kubeEtcd.enabled }} apiVersion: v1 kind: ConfigMap metadata: name: {{ printf "%s-%s" (include "prometheus-operator.fullname" $) "traefik" | trunc 63 | trimSuffix "-" }} labels: {{- if $.Values.grafana.sidecar.dashboards.label }} {{ $.Values.grafana.sidecar.dashboards.label }}: "1" {{- end }} app: {{ template "prometheus-operator.name" $ }}-grafana {{ include "prometheus-operator.labels" $ | indent 4 }} data: traefik.json: |- JSON Dashboard starts ...... JSON Dashboard ends {{- end }}
Rücken Sie json unseres Dashboards mit JSON Dashboard starts ……. JSON Dashboard ends ein. In JSON selbst ist es wichtig, Ausdrücken wie {{Instance}} in {{{{Instance}}}} zu entgehen.
Wir fügen jetzt unsere Datei in den Prometheus Operator / Templates / Grafana / Dashboards ein:
helm upgrade prometheus ./
Nun erscheint das Dashboard in Grafana.
Dies sind die Grundprinzipien des Prometheus Operators. Beachten Sie bitte, dass sich der Prometheus Operator noch in der Entwicklungsphase befindet, was bedeutet, dass die Schritt-für-Schritt-Anweisung schnell veralten kann. Wir werden diese Anleitung zeitnahe aktualisieren, verweisen jedoch gleichzeitig auf das CoreOS-Benutzerhandbuch und das Github-Projekt für die neuesten Informationen.
Prometheus Operator Monitoring zur Überwachung der Infrastruktur, um Ausfälle und Fehler vorherzusagen und Sicherheitsbedrohungen bereits im Vorfeld ausfindig zu machen, ist nur ein Teil von
K&C – WIR KREIEREN EINZIGARTIGE TECH-LÖSUNGEN SEIT ÜBER 20 JAHREN. WIR VERSCHAFFEN IHNEN IHREN WETTBEWERBSVORTEIL!
Schreiben Sie uns eine Nachricht, um Ihre individuellen Bedürfnisse oder das nächste Projekt zu besprechen.