57 Kubernetes Monitoring

Kubernetes Monitoring überwacht den Zustand und die Leistung eines Clusters, hilft bei der frühzeitigen Problemidentifikation und erleichtert das proaktive Cluster-Management.

Effizientes Kubernetes Monitoring ist für die Betreuung containerisierter Infrastrukturen wesentlich, da es Transparenz schafft, die Zuverlässigkeit erhöht und eine optimierte Ressourcenverwendung ermöglicht.

57.1 Überblick

Monitoring-Tools sammeln Metriken und Logs von verschiedenen Komponenten eines Clusters, darunter Nodes, Pods, Deployments und Services. Diese Informationen helfen bei der Beurteilung der Gesundheit und Performance des Clusters.

57.2 Schlüsselmetriken

57.2.1 Ressourcennutzung

57.2.2 Verfügbarkeit

57.2.3 Performance

57.3 Interaktionen

57.4 Monitoring Layer

57.4.1 Cluster Monitoring

Überwacht den Zustand und die Performance des gesamten Clusters. Dazu gehören Nodes, Cluster-Ressourcen und die Kubernetes Control Plane.

57.4.2 Node Monitoring

Fokussiert sich auf einzelne Nodes im Cluster. Hierzu zählen die Überwachung von Systemmetriken und die Gewährleistung der Node-Gesundheit.

57.4.3 Pod Monitoring

Überwacht die Laufzeitumgebung einzelner Pods, was für die Anwendungsleistung entscheidend ist.

57.4.4 Application Monitoring

Stellt sicher, dass Anwendungen wie erwartet funktionieren und ihre Performance-Ziele erfüllen.

57.4.5 Network Monitoring

Bezieht sich auf die Überwachung der Netzwerkperformance und der Kommunikation zwischen den Komponenten.

57.4.6 Storage Monitoring

Überwacht die Speicherressourcen und deren Performance innerhalb des Kubernetes-Clusters.

Durch die Kombination dieser Monitoring-Level erhält man eine ganzheitliche Sicht auf den Zustand und die Performance eines Kubernetes-Clusters und kann so die Zuverlässigkeit und Effizienz der containerisierten Anwendungen sicherstellen.

57.5 Monitoring tools

Die folgende Tabelle bietet einen Überblick über gängige Monitoring-Tools für Kubernetes, geordnet nach ihrer Bedeutung bzw. Beliebtheit. Diese Tools bieten eine breite Palette von Funktionen zur Überwachung, Verwaltung und Analyse von Kubernetes-Clustern. Die Tabelle enthält außerdem Informationen zum spezifischen Einsatzgebiet jedes Tools sowie weitere relevante Bemerkungen. Die Rangfolge und Details zu den Tools basieren auf der allgemeinen Anerkennung und Nutzung in der Kubernetes-Community.

Rang Tool Einsatzgebiet Bemerkungen
1 Prometheus Metrikensammlung, Alarmierung Open-Source
2 Grafana Visualisierung von Metriken Open-Source
3 Kubernetes Dashboard Clusterverwaltung, Metrikvisualisierung Open-Source
4 Kiali Service-Mesh-Observability Open-Source
5 Kubewatch Event-Monitoring Open-Source
6 EFK Stack Protokollsammlung und -analyse Open-Source
7 Sematext Monitoring, Protokollmanagement
8 cAdvisor Ressourcenutzungs- und Performance-Analyse Open-Source
9 Kube-state-metrics Clusterzustandsmetriken Open-Source
10 Datadog Vollständiges Monitoring, Log-Management
11 New Relic APM, Infrastruktur-Monitoring
12 Sensu Multi-Cloud-Monitoring
13 Dynatrace Automatisierung, AI-gestütztes Monitoring
14 Zabbix Monitoring, Alerting Open-Source
15 Jaeger Distributed Tracing Open-Source, CNCF-Projekt
16 Fluentd Unified Logging Open-Source, CNCF-Projekt
17 NetApp Cloud Insights Infrastruktur-Monitoring

Quellen 1 2

57.6 Datenfluss im Kubernetes Monitoring

Im Kubernetes Monitoring werden Metriken auf verschiedenen Ebenen erfasst: Sie starten bei den Anwendungen in den Pods, fließen durch den cAdvisor und das kubelet, um grundlegende Ressourcenmetriken zu sammeln, und münden schließlich im Metric Server. Dort werden sie zentralisiert und sind über die Kubernetes-API abrufbar, wodurch Monitoring-Tools und Services im Cluster darauf zugreifen können.

57.6.1 Metriken in Pods

Anwendungen in Kubernetes laufen in Containern, die in Pods organisiert sind. Jeder Pod kann eine oder mehrere Anwendungen enthalten. Metriken, die von diesen Anwendungen generiert werden, umfassen beispielsweise Anfragen pro Sekunde, Antwortzeiten und Fehlerzahlen.

57.6.1.1 Custom Metrics

Anwendungen können spezifische Metriken ausgeben, die über Endpunkte (meist /metrics) für Monitoring-Tools zugänglich sind. Diese Endpunkte werden typischerweise von einem Prometheus-Client bereitgestellt.

57.6.2 cAdvisor und Kubelet

Jeder Node im Kubernetes-Cluster läuft mit einem kubelet, dem Agenten, der die Pods und Container auf dem Node steuert. Eingebaut in das kubelet ist cAdvisor (Container Advisor), der für die Erfassung von Metriken der Container-Ressourcennutzung wie CPU, Speicher, Netzwerk und Festplattenauslastung verantwortlich ist.

57.6.2.1 cAdvisor

cAdvisor überwacht Container auf einem Node und erfasst die Ressourcennutzung und Leistungsdaten. Es arbeitet direkt auf der Betriebssystemebene eines Hosts und sammelt, aggregiert, verarbeitet und exportiert Informationen über laufende Container.

cAdvisor arbeitet dabei wie folgt:

Der cAdvisor ist in das kubelet integriert und dient als eine der primären Quellen für Containermetriken im Kubernetes-Ökosystem.

57.6.2.2 Kubelet

Das kubelet sammelt die von cAdvisor bereitgestellten Daten und stellt sie über seine API bereit. Es ist auch für die Übermittlung dieser Daten an den Metric Server verantwortlich.

57.6.3 Metric Server

Der Metric Server agiert als zentrale Datensammelstelle für Metriken im Cluster. Er sammelt aggregierte Daten von allen Nodes im Cluster, die vom kubelet bereitgestellt werden.

57.6.3.1 Aggregation

Der Metric Server aggregiert die Daten, die er von den Nodes erhält, und speichert diese in einem internen Format, das für schnelle Abfragen optimiert ist. Er hält diese Metriken nicht dauerhaft vor, sondern bietet aktuelle Snapshots der Ressourcennutzung an.

57.6.4 Kubernetes API

Die Kubernetes-API stellt einen Zugangspunkt für externe Tools und Services bereit, um auf Metriken und Informationen über den Cluster zuzugreifen.

57.6.4.1 Zugriff auf Metriken

Tools wie Prometheus können Metriken direkt von der API abfragen, wobei sie die vom Metric Server bereitgestellten Informationen nutzen. Diese Metriken können dann für Monitoring, Alarmierung und andere Automatisierungen verwendet werden.

57.6.4.2 Horizontal Pod Autoscaler

Der Horizontal Pod Autoscaler (HPA) nutzt auch die Metriken von der Kubernetes-API, um Entscheidungen über das Hoch- und Runterfahren der Pod-Replikation basierend auf der aktuellen Last zu treffen.

57.7 Überprüfung der Kubernetes Monitoring Ebenen mit kubectl

Durch die Verwendung der beschriebenen Befehle können Sie detaillierte Einblicke in die Zustände und Metriken Ihres Kubernetes-Clusters erhalten. Sie erlauben eine granulare Analyse von der Custerebene bis hinunter auf die Anwendungsebene.

57.7.1 Cluster Level

57.7.1.1 Nodes Überprüfen

kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
node1      Ready    master   1d    v1.20.2
node2      Ready    <none>   1d    v1.20.2
node3      Ready    <none>   1d    v1.20.2

57.7.1.2 Ressourcennutzung der Nodes

kubectl top nodes
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
node1      190m         9%     1460Mi          77%
node2      113m         5%     780Mi           41%
node3      300m         15%    1100Mi          58%

57.7.1.3 Status der Cluster-Komponenten

kubectl get componentstatus
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

57.7.2 Node Level

57.7.2.1 Spezifischen Node Überprüfen

kubectl describe node <node-name>
Name:               node1
Roles:              master
Labels:             kubernetes.io/role=master
Annotations:        node.alpha.kubernetes.io/ttl=0
CreationTimestamp:  Wed, 01 Jul 2020 12:34:56 +0000
...

57.7.2.2 Pods auf einem Node Anzeigen

kubectl get pods --all-namespaces --field-selector spec.nodeName=<node-name>
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-mnqbb   1/1     Running   0          1d
...

57.7.3 Pod Level

57.7.3.1 Pods im Cluster Überprüfen

kubectl get pods --all-namespaces
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-mnqbb   1/1     Running   0          1d
...

57.7.3.2 Ressourcennutzung von Pods

kubectl top pod --all-namespaces
NAMESPACE     NAME                       CPU(cores)   MEMORY(bytes)
kube-system   coredns-5644d7b6d9-mnqbb   3m           70Mi
...

57.7.4 Container Level

57.7.4.1 Ressourcennutzung von Containern in einem Pod

kubectl top pod <pod-name> --containers
POD                  NAME             CPU(cores)   MEMORY(bytes)
coredns-5644d7b6d9   coredns          3m           70Mi
...

57.7.5 Application Level

57.7.5.1 Logs eines Containers in einem Pod

kubectl logs <pod-name> -c <container-name>
2021-07-01T12:34:56.7890Z INFO server: request received
...

57.7.5.2 Überwachung von Ereignissen in einem Namespace

kubectl get events -n <namespace>
LAST SEEN   TYPE      REASON               OBJECT                         MESSAGE
1m          Normal    Scheduled            pod/myapp-pod                  Successfully assigned default/myapp-pod to node1
...