Raccogliere e visualizzare le metriche dello stato del kube


Questa pagina descrive come configurare un cluster Google Kubernetes Engine (GKE) per inviare un insieme selezionato di stato di kube, incluse le metriche per i pod e i deployment, Cloud Monitoring utilizzando Google Cloud Managed Service per Prometheus. Questa pagina descrive anche come vengono formattate queste metriche quando vengono scritte in Monitoraggio e come eseguire query sulle metriche.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Requisiti

Per raccogliere le metriche dello stato di Kube, il cluster GKE deve soddisfare i seguenti requisiti:

  • Il cluster deve eseguire GKE 1.27.2-gke.1200 o versioni successive. Per i cluster GKE Standard a partire dalla versione 1.29.2-gke.2000 e per i cluster GKE Autopilot a partire dalla versione 1.27.4-gke.900, il pacchetto delle metriche dello stato di Kube è abilitato per impostazione predefinita.
  • Nel cluster devono essere attivate le metriche di sistema.
  • Nel cluster deve essere attivata la raccolta gestita di Google Cloud Managed Service per Prometheus. La raccolta gestita di Google Cloud Managed Service per Prometheus è abilitata per impostazione predefinita per i nuovi cluster.

Configura la raccolta delle metriche dello stato di Kube

Puoi attivare le metriche dello stato di kube utilizzando la console Google Cloud, gcloud CLI o Terraform:

Console

Puoi attivare le metriche dello stato di Kube dalla scheda Osservabilità per un cluster o un deployment all'interno di un cluster. Puoi anche visualizzare l'anteprima dei grafici e delle metriche disponibili prima di attivare il pacchetto di metriche.

Nella scheda Osservabilità di un cluster, puoi filtrare l'insieme di grafici per le metriche relative allo stato di kube in base ai seguenti due elementi:

  • Stato dei carichi di lavoro: include le metriche per le risorse Pods, Deployment, StatefulSet, DaemonSet e HorizontalPodAutoscaler.
  • Archiviazione > Permanente: include le metriche per i volumi permanenti e le richieste di volumi permanenti.

Puoi attivare uno o entrambi i set di metriche.

Per attivare le metriche dello stato di Kube dalla scheda Osservabilità per un cluster, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes:

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic sul nome del cluster e seleziona la scheda Osservabilità.

  3. Seleziona Stato carichi di lavoro o Archiviazione > Permanente dall'elenco delle funzionalità.

  4. Fai clic su Attiva pacchetto.

    Se il pacchetto Kube State Metrics è già abilitato, viene visualizzato un insieme di grafici per le metriche Kube State.

Per attivare le metriche dello stato di Kube dalla scheda Osservabilità per un deployment:

  1. Nella console Google Cloud, vai alla pagina Carichi di lavoro:

    Vai a Carichi di lavoro

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic sul nome del deployment, quindi seleziona la scheda Osservabilità.

  3. Seleziona Stato Kube dall'elenco delle funzionalità.

  4. Fai clic su Attiva pacchetto. Il pacchetto è abilitato per l'intero cluster.

    Se il pacchetto delle metriche di stato kube è già abilitato, vedrai un insieme di grafici per le metriche di pod, deployment e Horizontal Pod Autoscaler.

Per configurare le metriche dello stato di Kube dalla scheda Dettagli per il cluster:

  1. Nella console Google Cloud, vai alla pagina Cluster Kubernetes:

    Vai a Cluster Kubernetes

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Kubernetes Engine.

  2. Fai clic sul nome del cluster.

  3. Nella riga Funzionalità etichettata Monitoraggio cloud, fai clic sull'icona Modifica.

  4. Nella finestra di dialogo Modifica monitoraggio cloud visualizzata, verifica che sia selezionata l'opzione Abilita monitoraggio cloud.

  5. Nel menu a discesa Componenti, seleziona i componenti dello stato di kube da cui vuoi raccogliere le metriche.

  6. Fai clic su OK.

  7. Fai clic su Salva modifiche.

gcloud

Aggiorna il cluster per raccogliere le metriche:

gcloud container clusters update CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-managed-prometheus \
    --monitoring=SYSTEM,DAEMONSET,DEPLOYMENT,HPA,POD,STATEFULSET,STORAGE

Sostituisci quanto segue:

L'insieme di valori specificati per il flag monitoring sostituisce qualsiasi impostazione precedente.

Terraform

Per configurare la raccolta delle metriche dello stato di kube utilizzando Terraform, consulta il blocco monitoring_config nel registry Terraform per google_container_cluster. Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

Quota

Le metriche dello stato di Kube utilizzano la quota Richieste di importazione delle serie temporali al minuto dell'API Cloud Monitoring. Prima di attivare le metriche dello stato di Kube, controlla l'utilizzo massimo recente della quota. Se hai molti cluster nello stesso progetto o stai già avvicinandoti a questo limite di quota, puoi richiedere un aumento del limite di quota prima di attivare uno dei pacchetti di osservabilità.

Prezzi

Le metriche di stato Kube utilizzano Google Cloud Managed Service per Prometheus per caricare le metriche in Cloud Monitoring. Gli addebiti di Cloud Monitoring per l'importazione di queste metriche si basano sul numero di campioni importati. Tuttavia, queste metriche sono senza costi per i cluster registrati che appartengono a un progetto in cui è abilitata la versione GKE Enterprise.

Per maggiori informazioni, consulta Prezzi di Cloud Monitoring.

Formato della metrica

Tutte le metriche dello stato del kube di Kubernetes scritte in Cloud Monitoring utilizzano il tipo di risorsa prometheus_target. A ogni nome della metrica è associato il prefisso prometheus.googleapis.com/ e un suffisso che indica il tipo di metrica Prometheus, ad esempio /gauge, /histogram o /counter. In caso contrario, ogni nome della metrica è identico al nome della metrica esposto da Kubernetes open source.

Esportazione da Cloud Monitoring

Le metriche relative allo stato di kube possono essere esportate da Cloud Monitoring utilizzando l'API Cloud Monitoring. Poiché tutte le metriche dello stato kube vengono importate utilizzando Google Cloud Managed Service per Prometheus, è possibile eseguire query sulle metriche dello stato kube utilizzando Prometheus Query Language (PromQL). È anche possibile eseguire query utilizzando Monitoring Query Language (MQL).

Eseguire query sulle metriche

Quando esegui query sulle metriche dello stato di kube, il nome che utilizzi dipende dal fatto che tu stia utilizzando PromQL o funzionalità basate su Cloud Monitoring come MQL o l' interfaccia basata su menu di Metrics Explorer.

Le seguenti tabelle delle metriche dello stato di kube mostrano due versioni di ciascun nome di metrica:

  • Nome della metrica PromQL: quando utilizzi PromQL nelle pagine di Cloud Monitoring della console Google Cloud o nei campi PromQL dell'API Cloud Monitoring, utilizza il nome della metrica PromQL.
  • Nome della metrica Cloud Monitoring Quando utilizzi altre funzionalità di Cloud Monitoring, utilizza il nome della metrica Cloud Monitoring riportato nelle tabelle seguenti. A questo nome deve essere anteposto il prefisso prometheus.googleapis.com/, che è stato omesso dalle voci della tabella.

Metriche di archiviazione

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_persistentvolume_capacity_bytes
kube_persistentvolume_capacity_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
Capacità del volume permanente in byte. Campionamento eseguito ogni 30 secondi.

persistentvolume: persistentvolume.
kube_persistentvolume_claim_ref
kube_persistentvolume_claim_ref/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informazioni sul riferimento della richiesta di volume permanente. Campionamento eseguito ogni 30 secondi.

claim_name: claim_name.
name: nome.
persistentvolume: persistentvolume.
kube_persistentvolume_info
kube_persistentvolume_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informazioni su persistentvolume. Campionamento eseguito ogni 30 secondi.

csi_driver: csi_driver.
csi_volume_handle: csi_volume_handle.
local_fs: local_fs.
local_path: local_path.
persistentvolume: persistentvolume.
storageclass: storageclass.
kube_persistentvolume_status_phase
kube_persistentvolume_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
La fase indica se un volume è disponibile, vincolato a una rivendicazione o liberato da una rivendicazione. Campionamento eseguito ogni 30 secondi.

persistentvolume: persistentvolume.
phase: fase.
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informazioni sulla richiesta di volume permanente. Campionamento eseguito ogni 30 secondi.

persistentvolumeclaim: persistentvolumeclaim.
storageclass: storageclass.
volumename: volumename.
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
La capacità di archiviazione richiesta dalla richiesta di volume permanente. Campionamento eseguito ogni 30 secondi.

persistentvolumeclaim: persistentvolumeclaim.
kube_persistentvolumeclaim_status_phase
kube_persistentvolumeclaim_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
La fase in cui si trova attualmente la richiesta di volume permanente. Campionamento eseguito ogni 30 secondi.

persistentvolumeclaim: persistentvolumeclaim.
phase: fase.

Per ulteriori informazioni, consulta Metriche PersistentVolume e Metriche PersistentVolumeClaim.

Metriche pod

Un pod è un gruppo di uno o più container con una specifica su come eseguire i container, che condividono risorse di rete e di archiviazione.

Tabella delle metriche del pod

Le metriche dei pod ti consentono di monitorare e ricevere avvisi sul comportamento dei pod. La tabella seguente mostra le metriche disponibili nel pacchetto Kube State Metrics:

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_pod_container_status_ready
kube_pod_container_status_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descrivi se il controllo di idoneità dei container è riuscito. Campionamento eseguito ogni 30 secondi.

container: contenitore.
pod: pod.
uid: uid.
kube_pod_container_status_waiting_reason
kube_pod_status_container_status_waiting_reason/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descrivi il motivo per cui il contenitore è attualmente in stato di attesa. Campionamento eseguito ogni 30 secondi.

container: contenitore.
pod: pod.
reason: motivo.
uid: uid.
kube_pod_status_phase
kube_pod_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
La fase attuale dei pod. Campionamento eseguito ogni 30 secondi.

phase: fase.
pod: pod.
uid: uid.
kube_pod_status_unschedulable
kube_pod_status_unschedulable/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descrivi lo stato non pianificabile del pod. Campionamento eseguito ogni 30 secondi.

pod: pod.
uid: uid.

Per ulteriori informazioni, consulta Metriche dei pod.

Query di esempio per le metriche dei pod

Per determinare se sono presenti pod non pianificabili, utilizza la seguente expression PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})

Per generare un avviso su un numero di pod non pianificabili in uno spazio dei nomi, puoi utilizzare la seguente espressione PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT

Puoi utilizzare la metrica kube_pod_container_status_waiting_reason per creare un avviso per un contenitore bloccato in uno stato di attesa specifico utilizzando un'espressione PromQL come la seguente:

max_over_time(kube_pod_container_status_waiting_reason{reason="REASON", cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

Il valore di REASON specifica lo stato di attesa del contenitore, ad esempio:

  • CrashLoopBackOff
  • ImagePullBackOff
  • ContainerCreating

Per creare un avviso per un contenitore bloccato in uno degli stati di attesa, utilizza la seguente espressione PromQL:

max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

Per determinare quanti container non superano i controlli di idoneità, utilizza la seguente espressione PromQL

sum(kube_pod_container_status_ready) by (pod, container) == 0

Alcune delle espressioni di query e avviso in questa sezione sono state adattate dal file kubernetes-apps.yaml nel repository Kubernetes Helm Charts della community Prometheus su GitHub.

Playbook interattivi

Le metriche dello stato di Kube vengono utilizzate anche nei playbook interattivi GKE per la risoluzione dei problemi relativi ai pod non pianificabili o in crashloop. Per ulteriori informazioni su queste modalità di errore, consulta i seguenti documenti sulla risoluzione dei problemi:

Se il pacchetto Kube State Metrics non è abilitato, il modo principale per rilevare i problemi di pianificazione dei pod è eseguire query sugli eventi dei log "Pianificazione non riuscita". Dopo aver attivato il pacchetto Kube State Metrics, puoi utilizzare la metrica kube_pod_status_unschedulable, che ha lo stesso scopo, ma è più facile da aggregare e visualizzare in grafico. Utilizzando la metrica, puoi vedere quanti pod non sono pianificabili e quando è iniziato il problema.

Analogamente, la metrica di sistema GKE kubernetes.io/container/restart_count può aiutarti a rilevare i pod in crashloop. La metrica kube_pod_container_status_waiting_reason enumera anche i pod in crashloop e ti consente di determinare se i pod sono bloccati in stati di attesa diversi da CrashLookBackOff, ad esempio ImagePullBackOff e ContainerCreating.

Per esplorare i playbook interattivi:

  1. Nella console Google Cloud, vai alla pagina  Dashboard:

    Vai a Dashboard

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Filtra l'elenco della dashboard facendo clic sulla categoria G​C​P.
  3. Fai clic sul nome di una dashboard "Playbook interattivo GKE" nell'elenco.

Metriche di deployment

Un deployment è un controller che aggiorna lo stato di risorse come i pod per gestire eventi come implementazioni e ritiri.

Tabella delle metriche di deployment

Le metriche di Deployment ti consentono di monitorare e generare avvisi sul comportamento del controller. La tabella seguente mostra le metriche disponibili nel package delle metriche dello stato di kube:

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Numero di pod desiderati per un deployment. Campionamento eseguito ogni 30 secondi.

deployment: deployment.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di repliche disponibili per deployment. Campionamento eseguito ogni 30 secondi.

deployment: deployment.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di repliche aggiornate per deployment. Campionamento eseguito ogni 30 secondi.

deployment: deployment.

Per ulteriori informazioni, consulta Metriche di deployment.

Query di esempio per le metriche di deployment

Puoi creare grafici e criteri di avviso per singoli deployment filtrando le metriche di deployment per cluster, spazio dei nomi e nome del deployment.

Ad esempio, per confrontare il numero di repliche disponibili con il numero di repliche previsto in un singolo deployment, puoi utilizzare le seguenti query PromQL per tracciare entrambe le metriche in un unico grafico:

kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
e
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}

Per ricevere un avviso in caso di deployment non riuscita o in stallo, puoi utilizzare la seguente expression PromQL:

(
  kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
    >
  kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
) and (
  changes(kube_deployment_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}[10m])
    ==
  0
)

Alcune delle espressioni di query e avviso in questa sezione sono state adattate dal file kubernetes-apps.yaml nel repository Kubernetes Helm Charts della community Prometheus su GitHub.

Metriche StatefulSet

Un StatefulSet è un controller che gestisce il deployment e la scalabilità di un insieme di pod per le applicazioni stateful. Questo controller gestisce l'ordine e l'univocità dei pod.

Tabella delle metriche di StatefulSet

Le metriche StatefulSet ti consentono di monitorare e generare avvisi sul comportamento del controller. La tabella seguente mostra le metriche disponibili nel package delle metriche dello stato di kube:

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Numero di pod desiderati per un StatefulSet. Campionamento eseguito ogni 30 secondi.

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di repliche pronte per StatefulSet. Campionamento eseguito ogni 30 secondi.

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di repliche aggiornate per StatefulSet. Campionamento eseguito ogni 30 secondi.

statefulset: statefulset.

Per ulteriori informazioni, consulta Metriche StatefulSet.

Query di esempio per le metriche StatefulSet

Puoi creare grafici e criteri di avviso per singoli StatefulSet filtrando le metriche dei StatefulSet per cluster, spazio dei nomi e nome del StatefulSet.

Ad esempio, per confrontare il numero di repliche disponibili con il numero di repliche previsto in un singolo StatefulSet, puoi utilizzare le seguenti query PromQL per tracciare entrambe le metriche in un unico grafico:

kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
e
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}

Per ricevere un avviso in caso di implementazione di StatefulSet non riuscita o in stallo, puoi utilizzare la seguente expression PromQL:

(
  kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
    >
  kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
) and (
  changes(kube_statefulset_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}[10m])
    ==
  0
)

Alcune delle espressioni di query e avviso in questa sezione sono state adattate dal file kubernetes-apps.yaml nel repository Kubernetes Helm Charts della community Prometheus su GitHub.

Metriche DaemonSet

Un DaemonSet è un controller che garantisce che un insieme di nodi esegua una copia di un pod. Ad esempio, quando i nodi vengono aggiunti a un cluster, DaemonSet aggiunge i pod ai nodi. Questo controller è utile per garantire che determinate procedure vengano eseguite su ogni nodo.

Tabella delle metriche di DaemonSet

Le metriche DaemonSet ti consentono di monitorare e generare avvisi sul comportamento del controller. La tabella seguente mostra le metriche disponibili nel package delle metriche dello stato di kube:

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di nodi su cui dovrebbe essere in esecuzione il pod del daemon. Campionamento eseguito ogni 30 secondi.

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di nodi che eseguono un pod del daemon, ma che non dovrebbero farlo. Campionamento eseguito ogni 30 secondi.

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di nodi che dovrebbero eseguire il pod del daemon e avere uno o più pod del daemon in esecuzione e pronti. Campionamento eseguito ogni 30 secondi.

daemonset: daemonset.
kube_daemonset_status_updated_number_scheduled
kube_daemonset_status_updated_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il numero di nodi che eseguono il pod del daemon aggiornato. Campionamento eseguito ogni 30 secondi.

daemonset: daemonset.

Per ulteriori informazioni, consulta Metriche DaemonSet.

Query di esempio per le metriche DaemonSet

Puoi creare grafici e criteri di avviso per singoli DaemonSet filtrando le metriche dei DaemonSet per cluster, spazio dei nomi e nome del DaemonSet.

Ad esempio, per confrontare il numero di repliche disponibili con il numero di repliche previsto in un singolo DaemonSet, puoi utilizzare le seguenti query PromQL per tracciare entrambe le metriche in un singolo grafico:

kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
e
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}

Per generare un avviso in caso di implementazione di DaemonSet non riuscita o in stallo, puoi utilizzare la seguente expression PromQL:

(
  (
    kube_daemonset_status_number_misscheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    0
  ) or (
    kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
  )
) and (
  changes(kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}[5m])
    ==
  0
)

Alcune delle espressioni di query e avviso in questa sezione sono state adattate dal file kubernetes-apps.yaml nel repository Kubernetes Helm Charts della community Prometheus su GitHub.

Metriche HorizontalPodAutoscaler

Un HorizontalPodAutoscaler (HPA) è un controller che modifica periodicamente il numero di pod in un carico di lavoro, ad esempio un deployment o un StatefulSet, in risposta a una metrica come l'utilizzo della CPU o della memoria. La modifica del numero di pod disponibili per un carico di lavoro mantiene il carico di lavoro reattivo, ma efficiente.

Per ulteriori informazioni sugli HPA, consulta Visualizzare i dettagli di un Horizontal Pod Autoscaler.

Tabella delle metriche HPA

Le metriche HorizontalPodAutoscaler ti consentono di monitorare e generare avvisi sul comportamento del controller. La tabella seguente mostra le metriche disponibili nel package delle metriche dello stato di kube:

I nomi delle metriche di Cloud Monitoring in questa tabella devono avere il prefisso prometheus.googleapis.com/. Questo prefisso è stato omesso dalle voci della tabella.

Nome della metrica PromQL
Nome della metrica Cloud Monitoring
Tipo, Tipo, Unità
Risorse monitorate
Versione GKE obbligatoria
Descrizione
Etichette
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Il limite superiore del numero di pod che può essere impostato dal gestore della scalabilità automatica non può essere inferiore a MinReplicas. Campionamento eseguito ogni 30 secondi.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_min_replicas
kube_horizontalpodautoscaler_spec_min_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Limite inferiore per il numero di pod che possono essere impostati dal gestore della scalabilità automatica, predefinito 1. Campionamento eseguito ogni 30 secondi.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_target_metric
kube_horizontalpodautoscaler_spec_target_metric/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Le specifiche delle metriche utilizzate da questo gestore della scalabilità automatica per calcolare il numero di repliche desiderato. Campionamento eseguito ogni 30 secondi.

horizontalpodautoscaler: horizontalpodautoscaler.
metric_name: metric_name.
metric_target_type: metric_target_type.
kube_horizontalpodautoscaler_status_condition
kube_horizontalpodautoscaler_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
La condizione di questo gestore della scalabilità automatica. Campionamento eseguito ogni 30 secondi.

condition: condizione.
horizontalpodautoscaler: horizontalpodautoscaler.
namespace: spazio dei nomi.
status: stato.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Numero corrente di repliche dei pod gestiti da questo Autoscaler. Campionamento eseguito ogni 30 secondi.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_status_desired_replicas
kube_horizontalpodautoscaler_status_desired_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Numero di repliche desiderate dei pod gestiti da questo gestore della scalabilità automatica. Campionamento eseguito ogni 30 secondi.

horizontalpodautoscaler: horizontalpodautoscaler.

Per ulteriori informazioni, consulta Metriche del gestore della scalabilità automatica dei pod orizzontali.

Query di esempio per le metriche HPA

Ad esempio, per determinare se l'HPA si sta avvicinando al numero massimo di repliche, puoi tracciare il seguente rapporto:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} /
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Quando l'HPA è in esecuzione con il numero massimo di repliche, ti consigliamo di aumentare la specifica per il numero massimo di pod. Puoi utilizzare la seguente expression PromQL per creare un avviso che ti invii una notifica relativa a questa richiesta:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
  ==
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Puoi anche confrontare i valori delle metriche kube_horizontalpodautoscaler_status_current_replicas e kube_horizontalpodautoscaler_status_desired_replicas per determinare se esiste una differenza tra il numero di repliche corrente e quello necessario. Una differenza potrebbe indicare un vincolo di risorse nel cluster. La seguente espressione PromQL cerca le differenze tra il numero corrente di repliche e i numeri di repliche necessari, minimi e massimi, nonché le variazioni nel numero corrente di repliche:

(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  !=
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  >
kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  <
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}[15m]) == 0

Le etichette condition e status nella metrica kube_horizontalpodautoscaler_status_condition possono anche aiutarti a rilevare quando gli HPA riscontrano varie modalità di errore. Ad esempio:

  • La condizione ScalingLimited e lo stato true indicano che l'HPA è vincolato dal conteggio minimo o massimo delle repliche:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • La condizione AbleToScale e uno stato false indicano che l'HPA sta riscontrando problemi di recupero o aggiornamento delle scale:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1

  • La condizione ScalingActive e uno stato false indicano che l'HPA è disattivato o non è in grado di calcolare una nuova scala:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1

Alcune delle espressioni di query e avviso in questa sezione sono state adattate dal file kubernetes-apps.yaml nel repository Kubernetes Helm Charts della community Prometheus su GitHub.