Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Rohmetriken der Kontrollebene abrufen in Prometheus Format
Das Tool Kubernetes Die Kontrollebene stellt eine Reihe von Metriken zur Verfügung, die in einem Prometheus-Format
Führen Sie den folgenden Befehl aus, um die Ausgabe der Rohmetriken anzuzeigen.
kubectl get --raw
endpoint
Mit diesem Befehl können Sie einen beliebigen Endpunktpfad übergeben und die Rohantwort zurückgeben. In der Ausgabe werden verschiedene Metriken aufgeführt line-by-line, wobei jede Zeile einen Metriknamen, Tags und einen Wert enthält.
metric_name{tag="value"[,...]} value
Metriken vom Server abrufen API
Der allgemeine API Serverendpunkt ist auf der EKS Amazon-Steuerebene verfügbar. Dieser Endpunkt ist in erster Linie nützlich, wenn Sie sich eine bestimmte Metrik ansehen.
kubectl get --raw /metrics
Eine Beispielausgabe sieht wie folgt aus.
[...] # HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host. # TYPE rest_client_requests_total counter rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994 rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1 rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06 rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173 rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2 rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3 rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8 # HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts # TYPE ssh_tunnel_open_count counter ssh_tunnel_open_count 0 # HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts # TYPE ssh_tunnel_open_fail_count counter ssh_tunnel_open_fail_count 0
Diese Rohausgabe gibt wortwörtlich zurück, was der API Server verfügbar macht.
Rufen Sie Metriken der Kontrollebene ab mit metrics.eks.amazonaws.com
Für neue Cluster, die Kubernetes Ab Version 1.28
und höher veröffentlicht Amazon EKS auch Metriken unter der API Gruppemetrics.eks.amazonaws.com
. Zu diesen Metriken gehören Komponenten der Steuerungsebene wie kube-scheduler
undkube-controller-manager
. Diese Metriken sind auch für bestehende Cluster verfügbar, deren Plattformversion identisch oder höher ist als in der folgenden Tabelle.
Kubernetes-Version | Plattformversion |
---|---|
|
|
|
|
|
|
|
|
Metriken abrufen kube-scheduler
Verwenden Sie den folgenden Befehl, um kube-scheduler
Metriken abzurufen.
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
Eine Beispielausgabe sieht wie folgt aus.
# TYPE scheduler_pending_pods gauge scheduler_pending_pods{queue="active"} 0 scheduler_pending_pods{queue="backoff"} 0 scheduler_pending_pods{queue="gated"} 0 scheduler_pending_pods{queue="unschedulable"} 18 # HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod. # TYPE scheduler_pod_scheduling_attempts histogram scheduler_pod_scheduling_attempts_bucket{le="1"} 79 scheduler_pod_scheduling_attempts_bucket{le="2"} 79 scheduler_pod_scheduling_attempts_bucket{le="4"} 79 scheduler_pod_scheduling_attempts_bucket{le="8"} 79 scheduler_pod_scheduling_attempts_bucket{le="16"} 79 scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81 [...]
Metriken abrufen kube-controller-manager
Verwenden Sie den folgenden Befehl, um kube-controller-manager
Metriken abzurufen.
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
Eine Beispielausgabe sieht wie folgt aus.
[...] workqueue_work_duration_seconds_sum{name="pvprotection"} 0 workqueue_work_duration_seconds_count{name="pvprotection"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0 workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139 workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181 workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191 workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191 workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002 [...]
Machen Sie sich mit den Metriken für Scheduler und Controller Manager vertraut
In der folgenden Tabelle werden die Scheduler- und Controller-Manager-Metriken beschrieben, die für verfügbar sind Prometheus Stil: Scraping. Weitere Informationen zu diesen Metriken finden Sie unter Kubernetes
Metrik | Komponente der Steuerungsebene | Beschreibung |
---|---|---|
scheduler_pending_pods |
Scheduler |
Die Anzahl der Pods, die darauf warten, zur Ausführung auf einem Knoten geplant zu werden. |
scheduler_schedule_attempts_total |
Scheduler |
Die Anzahl der Versuche, Pods zu planen. |
scheduler_preemption_attempts_total |
Scheduler |
Die Anzahl der Versuche des Schedulers, Pods mit höherer Priorität einzuplanen, indem er Pods mit niedrigerer Priorität entfernt. |
scheduler_preemption_victims |
Scheduler |
Die Anzahl der Pods, die für die Räumung ausgewählt wurden, um Platz für Pods mit höherer Priorität zu schaffen. |
scheduler_pod_scheduling_attempts |
Scheduler |
Die Anzahl der Versuche, einen Pod erfolgreich zu planen. |
scheduler_scheduling_attempt_duration_seconds |
Scheduler |
Gibt an, wie schnell oder langsam der Scheduler auf der Grundlage verschiedener Faktoren wie Ressourcenverfügbarkeit und Planungsregeln in der Lage ist, einen geeigneten Ort für die Ausführung eines Pods zu finden. |
scheduler_pod_scheduling_sli_duration_seconds |
Scheduler |
Die end-to-end Latenz für einen geplanten Pod ab dem Zeitpunkt, zu dem der Pod in die Warteschlange für die Terminplanung aufgenommen wird. Dies kann mehrere Planungsversuche beinhalten. |
kube_pod_resource_request |
Scheduler |
Die von Workloads auf dem Cluster angeforderten Ressourcen, aufgeschlüsselt nach Pods. Dies zeigt die Ressourcennutzung, die der Scheduler und Kubelet pro Pod für Ressourcen erwarten, sowie die Einheit für die Ressource, falls vorhanden. |
kube_pod_resource_limit |
Scheduler |
Das Ressourcenlimit für Workloads auf dem Cluster, aufgeschlüsselt nach Pods. Dies zeigt die Ressourcennutzung, die der Scheduler und Kubelet pro Pod für Ressourcen erwarten, sowie die Einheit für die Ressource, falls vorhanden. |
cronjob_controller_job_creation_skew_duration_seconds |
Controller-Manager |
Die Zeit zwischen der geplanten Ausführung eines Cronjobs und der Erstellung des entsprechenden Jobs. |
workqueue_depth |
Controller-Manager |
Die aktuelle Tiefe der Warteschlange. |
workqueue_adds_total |
Controller-Manager |
Die Gesamtzahl der von der Workqueue verarbeiteten Hinzufügungen. |
workqueue_queue_duration_seconds |
Controller-Manager |
Die Zeit in Sekunden, in der ein Element in der Arbeitswarteschlange verbleibt, bevor es angefordert wird. |
workqueue_work_duration_seconds |
Controller-Manager |
Die Zeit in Sekunden, die die Verarbeitung eines Elements aus der Arbeitswarteschlange dauert. |
Setzen Sie einen Prometheus-Scraper ein, um Kennzahlen konsistent zu erfassen
Verwenden Sie die folgende Konfiguration, um einen Prometheus-Scraper zur konsistenten Erfassung der Metriken einzusetzen:
--- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-conf data: prometheus.yml: |- global: scrape_interval: 30s scrape_configs: # apiserver metrics - job_name: apiserver-metrics kubernetes_sd_configs: - role: endpoints scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Scheduler metrics - job_name: 'ksh-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https # Controller Manager metrics - job_name: 'kcm-metrics' kubernetes_sd_configs: - role: endpoints metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [ __meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name, ] action: keep regex: default;kubernetes;https --- apiVersion: v1 kind: Pod metadata: name: prom-pod spec: containers: - name: prom-container image: prom/prometheus ports: - containerPort: 9090 volumeMounts: - name: config-volume mountPath: /etc/prometheus/ volumes: - name: config-volume configMap: name: prometheus-conf
Die folgende Berechtigung ist erforderlich, damit der Pod auf den neuen Metriken-Endpunkt zugreifen kann.
{ "effect": "allow", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] },
Um die verwendete Rolle zu patchen, können Sie den folgenden Befehl verwenden.
kubectl patch clusterrole <role-name> --type=json -p='[ { "op": "add", "path": "/rules/-", "value": { "verbs": ["get"], "apiGroups": ["metrics.eks.amazonaws.com"], "resources": ["kcm/metrics", "ksh/metrics"] } } ]'
Dann können Sie sich das ansehen Prometheus Dashboard, indem Sie den Port des Proxys verwenden Prometheus Scraper zu Ihrem lokalen Port.
kubectl port-forward pods/prom-pod 9090:9090
Für Ihren EKS Amazon-Cluster werden die Kernmetriken der Kubernetes-Kontrollebene auch in Amazon CloudWatch Metrics unter dem Namespace aufgenommen. AWS/EKS
Um sie anzuzeigen, öffnen Sie die CloudWatch KonsoleAWS/EKS
Namespace und eine Metrikdimension für Ihren Cluster aus.