Recupera le metriche grezze del piano di controllo in Prometheus format - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Recupera le metriche grezze del piano di controllo in Prometheus format

Il Kubernetes control plane espone una serie di metriche rappresentate in un formato Prometheus. Questi parametri sono utili per il monitoraggio e l'analisi. Sono esposte internamente tramite endpoint metrici ed è possibile accedervi senza una distribuzione completa Prometheus. Tuttavia, dispiegando Prometheus consente più facilmente di analizzare le metriche nel tempo.

Per visualizzare l'output non elaborato delle metriche, esegui il comando seguente.

kubectl get --raw endpoint

Questo comando consente di passare qualsiasi percorso dell'endpoint e restituisce la risposta non elaborata. L'output elenca diverse metriche line-by-line, con ogni riga che include un nome di metrica, tag e un valore.

metric_name{tag="value"[,...]} value

Recupera le metriche dal server API

L'endpoint generale API del server è esposto sul piano di EKS controllo di Amazon. Questo endpoint è utile principalmente quando si esamina una metrica specifica.

kubectl get --raw /metrics

Di seguito viene riportato un output di esempio:

[...] # 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

Questo output non elaborato restituisce alla lettera ciò che il server espone. API

Recupera le metriche del piano di controllo con metrics.eks.amazonaws.com

Per i nuovi cluster che sono Kubernetes versione 1.28 e successive, Amazon espone EKS anche le metriche relative al API gruppo. metrics.eks.amazonaws.com Queste metriche includono componenti del piano di controllo come e. kube-scheduler kube-controller-manager Queste metriche sono disponibili anche per i cluster esistenti con una versione della piattaforma uguale o successiva rispetto alla tabella seguente.

Versione di Kubernetes Versione della piattaforma

1.31

eks.10

1.30

eks.18

1.29

eks.21

1.28

eks.27

Nota

Se disponi di una configurazione webhook che potrebbe bloccare la creazione della nuova APIService risorsa v1.metrics.eks.amazonaws.com sul cluster, la funzionalità Metrics Endpoint potrebbe non essere disponibile. Puoi verificarlo nel registro di kube-apiserver controllo cercando la parola chiave. v1.metrics.eks.amazonaws.com

Recupera kube-scheduler le metriche

Per recuperare le kube-scheduler metriche, utilizzate il seguente comando.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"

Di seguito viene riportato un output di esempio:

# 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 [...]

Recupera le metriche kube-controller-manager

Per recuperare le kube-controller-manager metriche, utilizzate il seguente comando.

kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"

Di seguito viene riportato un output di esempio:

[...] 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 [...]

Comprendi le metriche dello scheduler e del controller manager

La tabella seguente descrive le metriche dello scheduler e del controller manager rese disponibili per Prometheus stile scraping. Per ulteriori informazioni su queste metriche, consulta Kubernetes Metrics Reference nel Kubernetes documentazione.

Parametro Componente del piano di controllo Descrizione

scheduler_pending_pods

pianificatore

Il numero di Pod che attendono di essere programmati su un nodo per l'esecuzione.

scheduler_schedule_attempts_total

pianificatore

Il numero di tentativi effettuati per programmare i Pod.

scheduler_preemption_attempts_total

pianificatore

Il numero di tentativi effettuati dallo scheduler per programmare i Pod con priorità più alta eliminando quelli con priorità inferiore.

scheduler_preemption_victims

pianificatore

Il numero di Pod che sono stati selezionati per lo sfratto per fare spazio ai Pod con priorità più alta.

scheduler_pod_scheduling_attempts

pianificatore

Il numero di tentativi di pianificare correttamente un Pod.

scheduler_scheduling_attempt_duration_seconds

pianificatore

Indica la velocità o la lentezza con cui lo scheduler riesce a trovare un luogo adatto per l'esecuzione di un Pod in base a vari fattori come la disponibilità delle risorse e le regole di pianificazione.

scheduler_pod_scheduling_sli_duration_seconds

pianificatore

La end-to-end latenza di un Pod in fase di pianificazione, dal momento in cui il Pod entra nella coda di pianificazione. Ciò potrebbe comportare più tentativi di pianificazione.

kube_pod_resource_request

pianificatore

Le risorse richieste dai carichi di lavoro sul cluster, suddivise per Pod. Questo mostra l'utilizzo delle risorse che lo scheduler e kubelet prevedono per ogni Pod per le risorse, insieme all'eventuale unità per la risorsa.

kube_pod_resource_limit

pianificatore

Il limite di risorse per i carichi di lavoro sul cluster, suddiviso per Pod. Questo mostra l'utilizzo delle risorse che lo scheduler e kubelet prevedono per ogni Pod per le risorse, insieme all'eventuale unità per la risorsa.

cronjob_controller_job_creation_skew_duration_seconds

gestore del controller

Il tempo che intercorre tra la pianificazione dell'esecuzione di un cronjob e la creazione del job corrispondente.

workqueue_depth

gestore del controller

La profondità attuale della coda.

workqueue_adds_total

gestore del controller

Il numero totale di aggiunte gestite da workqueue.

workqueue_queue_duration_seconds

gestore del controller

Il tempo in secondi in cui un elemento rimane nella coda di lavoro prima di essere richiesto.

workqueue_work_duration_seconds

gestore del controller

Il tempo in secondi impiegato per l'elaborazione di un elemento dalla coda di lavoro.

Implementa uno scraper Prometheus per acquisire metriche in modo coerente

Per implementare uno scraper Prometheus per analizzare in modo coerente le metriche, usa la seguente configurazione:

--- 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

L'autorizzazione che segue è richiesta per consentire al Pod di accedere al nuovo endpoint metrico.

{ "effect": "allow", "apiGroups": [ "metrics.eks.amazonaws.com" ], "resources": [ "kcm/metrics", "ksh/metrics" ], "verbs": [ "get" ] },

Per correggere il ruolo utilizzato, puoi usare il seguente comando.

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"] } } ]'

Quindi puoi visualizzare il Prometheus dashboard inviando tramite proxy la porta di Prometheus scraper verso la porta locale.

kubectl port-forward pods/prom-pod 9090:9090

Per il tuo EKS cluster Amazon, anche le principali metriche del piano di controllo di Kubernetes vengono inserite in Amazon Metrics sotto il namespace. CloudWatch AWS/EKS Per visualizzarli, apri la CloudWatch console e seleziona Tutte le metriche dal riquadro di navigazione a sinistra. Nella pagina di selezione delle metriche, scegli lo spazio dei AWS/EKS nomi e una dimensione delle metriche per il tuo cluster.

📝 Modifica questa pagina su GitHub