Nutzung des Prometheus One-Click Features
NETWAYS Managed Kubernetes bietet eine One-Click Integration von Prometheus. Voraussetzung hierfür ist der Prometheus Managed Service, der ebenfalls in MyNWS gestartet werden kann.
Installation
Um die Prometheus-Integration zu aktivieren, navigiert man in MyNWS im Kubernetes-Menü in die Cluster-Übersicht und wählt im Kontextmenü des jeweiligen Clusters Enable Prometheus-Agent.
Daraufhin werden im Cluster im Namespace saas-prometheus-agent mehrere Workloads, Services und Konfigurationsobjekte
angelegt:
kubectl get all -n saas-prometheus-agent
NAME READY STATUS RESTARTS AGE
pod/prom-agent-saas-prometheus-agent-prometheus-0 2/2 Running 0 45m
pod/saas-prometheus-agent-operator-74cd9cd878-987bb 1/1 Running 0 45m
pod/saas-prometheus-agent-prometheus-node-exporter-6z4lp 1/1 Running 0 45m
pod/saas-prometheus-agent-prometheus-node-exporter-q88qf 1/1 Running 0 45m
pod/saas-prometheus-agent-prometheus-node-exporter-wtmb6 1/1 Running 0 45m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/prometheus-agent-operated ClusterIP None <none> 9090/TCP 45m
service/saas-prometheus-agent-operator ClusterIP 10.254.186.253 <none> 443/TCP 45m
service/saas-prometheus-agent-prometheus ClusterIP 10.254.209.115 <none> 9090/TCP,8080/TCP 45m
service/saas-prometheus-agent-prometheus-node-exporter ClusterIP 10.254.166.186 <none> 9100/TCP 45m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/saas-prometheus-agent-prometheus-node-exporter 3 3 3 3 3 kubernetes.io/os=linux 45m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/saas-prometheus-agent-operator 1/1 1 1 45m
NAME DESIRED CURRENT READY AGE
replicaset.apps/saas-prometheus-agent-operator-74cd9cd878 1 1 1 45m
NAME READY AGE
statefulset.apps/prom-agent-saas-prometheus-agent-prometheus 1/1 45m
Der Prometheus-Agent sammelt nach der Installation automatisch Daten:
- von der Kubernetes-API
- von den Cluster-Nodes
Via Remote Write ist er außerdem automatisch an den Prometheus Managed Service angebunden.
Unterscheidung mehrerer Cluster
Zur Unterscheidung von Metriken aus verschiedenen Clustern labelt die Prometheus-Integration die gesammelten
Daten mit einem eindeutigen Label in der Form nws_cluster=<cluster-name>
Visualisierung
Die gesammelten Daten werden via Remote Write automatisch an den bestehenden Prometheus Managed Service propagiert und sind in dessen Grafana-Instanz abrufbar.
Für eine direkte Nutzung der gesammelten Metriken stehen einige fertige Dashboards im Dashboard-Ordner provisioned
zur Verfügung:
Generelle Kubernetes Dashboards
- API Server
- Kubelet
- Persistent Volumes
Compute Resources Dashboards
- Multi-Cluster
- Cluster
- Namespace (Pods)
- Namespace (Workloads)
- Node (Pods)
- Pod
- Workload
Networking Dashboards
- Cluster
- Namespace (Pods)
- Namespace (Workload)
- Pod
- Workload

Einrichtung weiterer Endpunkte
Möchte man über das vorkonfigurierte Monitoring hinaus weitere Endpunkte in seinen Clustern monitoren,
können sogenannte Monitore für Pods und Services eingerichtet werden. Hierfür sind im Cluster die
Custom Resource Definitions PodMonitor bzw. ServiceMonitor installiert.
Der im Cluster installierte Prometheus Operator reagiert auf die Erstellung dieser Custom Resources in Echtzeit und aktualisiert die Prometheus-Konfiguration entsprechend.
Ein exemplarischer Servicemonitor könnte folgendermaßen aussehen:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
namespace: webapp-prod
name: webapp-prod-monitor
spec:
endpoints:
- port: http
scheme: http
selector:
matchLabels:
app: webapp
Dieser ServiceMonitor resultiert in Monitoring aller Services im Namespace webapp-prod, die mit app: webapp
gelabelt sind. Als Endpoint wird der http benannte Port an den gefundenen Services genutzt.
Services in verschiedenen Namespaces
Per Default matcht ein ServiceMonitor ausschließlich Services in dem Namespace, in dem er definiert ist.
Dieses Verhalten kann man durch einen namespaceSelector anpassen:
Ein ServiceMonitor mit dieser Konfiguration würde alle Services in den Namespaces webapp-prod bzw.
webapp-staging mit den entsprechenden im selector definierten Labeln monitoren.