Raccogli i log eventi di Horizontal Pod Autoscaler

Questa pagina fornisce informazioni sugli eventi decisionali emessi dal gestore della scalabilità automatica pod orizzontale in Google Kubernetes Engine (GKE). Analizzando questi eventi, puoi ottenere informazioni su come il controller del gestore della scalabilità automatica orizzontale dei pod gestisce la scalabilità del carico di lavoro e comprendere il processo decisionale alla base delle sue azioni.

Horizontal Pod Autoscaler genera eventi decisionali, che vengono archiviati come voci di log in Cloud Logging.

Prima di iniziare

Assicurati di completare i seguenti prerequisiti:

Seleziona o crea un progetto

Puoi utilizzare un progetto esistente o crearne uno nuovo per questo tutorial.

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

Abilita le API

Abilita le API GKE e API Cloud Logging, se non sono già abilitate.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilita le API

Configura Cloud Shell

In questo tutorial utilizzerai Cloud Shell per eseguire i comandi gcloud e kubectl. Cloud Shell è un ambiente shell per la gestione delle risorse ospitate su Google Cloud. È preinstallato con l'interfaccia a riga di comando Google Cloud CLI e lo strumento a riga di comando kubectl.

Nella console Google Cloud , attiva Cloud Shell.

Attiva Cloud Shell

Una sessione di Cloud Shell si apre in un frame nella parte inferiore della console.

Prima di eseguire i comandi in questo tutorial, assicurati che il progetto predefinito sia impostato sull'ID progetto in cui vuoi eseguire il deployment dell'app di esempio. Se non è già impostato, esegui questo comando in Cloud Shell:

gcloud config set project PROJECT_ID

Sostituisci PROJECT_ID con il tuo ID progetto.

Ruoli e autorizzazioni richiesti

Per ottenere le autorizzazioni necessarie per attivare la generazione di log e per accedere ai log ed elaborarli, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Per attivare la registrazione degli eventi di Horizontal Pod Autoscaler nel cluster: Amministratore cluster Kubernetes Engine (roles/container.clusterAdmin)
  • Per accedere ai log e utilizzare Esplora log e Observability Analytics: Logs Viewer (roles/logging.viewer)

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Requisiti

  • Il cluster GKE deve eseguire la versione 1.31.5-gke.1090000 o successive oppure 1.32.1-gke.1260000 o successive.
  • Abilita Cloud Logging nel cluster GKE. Si applicano i prezzi di Cloud Logging.
  • Assicurati di avere un Horizontal Pod Autoscaler che vuoi monitorare. Assicurati che i campi del gestore della scalabilità automatica orizzontale dei pod non includano dati sensibili.

Costi

I prezzi di Cloud Logging si applicano quando abiliti Cloud Logging e raccogli i log delle decisioni della scalabilità automatica del pod orizzontale.

Abilita gli eventi decisionali del gestore della scalabilità automatica orizzontale dei pod

gcloud

Per creare un nuovo cluster con i log delle decisioni KCP_HPA abilitati, esegui questo comando:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM,KCP_HPA

Per abilitare i log delle decisioni KCP_HPA su un cluster esistente, esegui questo comando:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM,KCP_HPA

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster che vuoi creare o aggiornare.
  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • LOCATION: regioni o zone di calcolo per il tuo cluster.

Terraform

Per abilitare i log delle decisioni KCP_HPA utilizzando Terraform, aggiorna la risorsa google_container_cluster. Nel blocco logging_config, aggiungi il valore KCP_HPA all'elenco per il campo enable_components:

resource "google_container_cluster" "primary" {
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other configuration ...

  logging_config {
    enable_components = ["SYSTEM_COMPONENTS", "KCP_HPA"]
  }
}

Sostituisci quanto segue:

Questi comandi consentono di esportare i log generati da KCP_HPA e salvarli nella destinazione logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" in Cloud Logging.

Recupera la configurazione di logging aggiornata del cluster e rivedi l'elenco dei log per assicurarti che il log KCP_HPA sia attivato:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=loggingConfig \
    --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'

L'output è simile al seguente:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA

Visualizza i log del gestore della scalabilità automatica orizzontale dei pod nella console Google Cloud

Puoi monitorare il comportamento di Horizontal Pod Autoscaler nella consoleGoogle Cloud . Questa visualizzazione offre un modo pratico per visualizzare gli stessi log dei suggerimenti atomici e finali disponibili in Cloud Logging, senza lasciare il contesto del workload.

Per visualizzare i log di Horizontal Pod Autoscaler nella console Google Cloud , completa i seguenti passaggi:

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

    Vai a Carichi di lavoro

  2. Seleziona il workload gestito da Horizontal Pod Autoscaler.

  3. Fai clic sulla scheda Scalabilità.

In questa scheda puoi trovare informazioni relative allo scaling, tra cui l'utilizzo delle risorse, i dati sull'efficienza e i log. I dati in questa scheda possono aiutarti a identificare la configurazione più efficace per la scalabilità automatica dei tuoi carichi di lavoro. Nella sezione Log, puoi trovare le stesse informazioni dei log e filtrare questi log per tipo, inclusi "Evento", "Consiglio finale" e "Consiglio atomico". Per maggiori dettagli sui diversi log, consulta Tipi di log.

Disattiva gli eventi decisionali di Horizontal Pod Autoscaler

gcloud

Aggiorna un cluster per rimuovere il componente KCP_HPA dal flag --logging:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID \
    --logging=SYSTEM

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster da creare o aggiornare.
  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • LOCATION: regioni o zone di calcolo per il tuo cluster.

Terraform

Per disattivare i log delle decisioni KCP_HPA utilizzando Terraform, aggiorna la risorsa google_container_cluster. Nel blocco logging_config, rimuovi il valore KCP_HPA dall'elenco per il campo enable_components:

resource "google_container_cluster" "primary" {
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other configuration ...

  logging_config {
    enable_components = ["SYSTEM_COMPONENTS"]
  }
}

Sostituisci quanto segue:

Questo comando disabilita l'esportazione dei log generati da KCP_HPA. Non puoi recuperarli utilizzando il filtro logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" in Cloud Logging.

Recupera la configurazione di logging aggiornata del cluster ed esamina l'elenco dei log per assicurarti che il log KCP_HPA sia disattivato:

gcloud container clusters describe CLUSTER_NAME \
    --location=LOCATION \
    --flatten=loggingConfig \
    --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'

L'output è simile al seguente:

SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER

Tipi di log

Gli eventi decisionali per il gestore della scalabilità automatica dei pod orizzontale vengono archiviati in Cloud Logging, nella posizione logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" che si trova nel bucket _Default nello stesso progetto del cluster GKE. Tutti gli eventi registrati sono nel formato JSON e si trovano nel campo jsonPayload di una voce di log.

Assicurati di comprendere le esigenze di archiviazione dei potenziali volumi di log, oltre a eventuali implicazioni in termini di prestazioni o costi. I seguenti esempi spiegano la frequenza con cui il gestore della scalabilità automatica orizzontale dei pod genera ogni tipo di evento di decisione:

  • Consiglio atomico: il gestore della scalabilità automatica orizzontale dei pod genera un evento di consiglio atomico ogni 15 secondi per ogni metrica monitorata da ogni oggetto HPA nel cluster. Ad esempio, se nel cluster sono presenti due oggetti HPA e ciascuno monitora tre metriche, ogni 15 secondi verranno registrate sei raccomandazioni atomiche.

  • Consiglio finale: il gestore della scalabilità automatica orizzontale dei pod genera un evento di consiglio finale ogni 15 secondi per ogni oggetto HPA nel cluster. Ad esempio, se nel cluster sono presenti due oggetti HPA, verranno registrate due raccomandazioni finali ogni 15 secondi.

In totale, con due oggetti HPA che monitorano ciascuno tre metriche, il log KCP_HPA riceverà otto voci di eventi decisionali ogni 15 secondi.

Suggerimento atomico

Un log dei suggerimenti atomici descrive un suggerimento basato su una singola metrica specificata nel gestore della scalabilità automatica orizzontale dei pod.

Un log atomico include i seguenti campi:

Campo Descrizione
start_time Indica quando HPA ha iniziato a calcolare un consiglio.
hpa Il nome dell'oggetto HPA associato al consiglio.
pod_count Indica il numero totale di pod associati all'HPA quando viene formulata la raccomandazione. Questo numero include anche i pod pronti, non pronti e ignorati.
metric Fornisce informazioni sulla specifica e sullo stato della metrica utilizzata per il suggerimento. Il campo metric contiene i seguenti sottocampi:
  • index: indice della metrica nell'array Spec metrics.
  • type: tipo di metrica con valori di MetricSourceType (ad esempio Risorsa, Esterno).
  • spec: nome della metrica e un target impostato per questa metrica.
  • status: condizioni di stato in relazione alla scalabilità e alle limitazioni di scalabilità.
  • newest_sample_time: il timestamp del campione di metrica più recente.
  • newest_sample_age_seconds: età del campione più recente, misurata in secondi, dall'inizio del calcolo del consiglio. Un valore negativo indica che l'esempio di metriche precede l'inizio del calcolo.
summary Il campo summary contiene informazioni sul risultato del suggerimento, incluso il numero di repliche suggerite. Se non è possibile proporre un suggerimento, viene visualizzato un messaggio di errore. Il campo summary contiene i seguenti sottocampi:
  • dampening: HPA applica l'attenuazione al suggerimento e alla sua direzione per cercare di ridurre l'entità di un potenziale scale. La riduzione può avvenire nei seguenti modi:
    • up: una direzione di attenuazione verso l'alto significa che HPA presuppone che i pod con metriche mancanti abbiano un utilizzo della metrica del 100%.
    • down: una direzione di smorzamento verso il basso indica che l'HPA presuppone che i pod con metriche mancanti o non pronti consumino lo 0% della metrica.
    • none: non viene applicato alcun smorzamento.
  • override: messaggio che fornisce un motivo quando il suggerimento proposto da HPA non viene applicato (ad esempio, a causa della tolleranza); oppure none se non si verifica alcun override.
  • result: il risultato del suggerimento. Propone un numero consigliato di repliche o mostra un messaggio di errore se non è possibile calcolare il consiglio.

Esempio di log dei suggerimenti atomici:

{
  "insertId": "xiu4bty9k5b279wu",
  "jsonPayload": {
    "instance": {
      "vm_name": "my-unique-vm-identifier",
      "zone": "us-central1-a"
    },
    "atomicRecommendation": {
      "startTime": "2025-02-06T20:07:00.573419526Z",
      "hpa": "gke-managed-cim/kube-state-metrics",
      "metric": {
        "newestSampleAgeSeconds": -39.573419526,
        "status": {
          "averageValue": "25849856"
        },
        "newestSampleTime": "2025-02-06T20:06:21Z",
        "type": "Resource",
        "spec": {
          "target": {
            "averageValue": "400Mi"
          },
          "name": "memory"
        }
      },
      "podCount": {
        "ready": 1,
        "total": 1
      },
      "summary": {
        "override": "none",
        "replicas": 1,
        "dampening": "none"
      }
    }
  },
  "resource": {
    "type": "k8s_control_plane_component",
    "labels": {
      "project_id": "my-project-id",
      "cluster_name": "my-cluster",
      "location": "us-central1-a",
      "component_location": "us-central1-a",
      "component_name": "hpa-controller"
    }
  },
  "timestamp": "2025-02-06T20:07:00.593777835Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
  },
  "logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
  "sourceLocation": {
    "file": "event_logger.go",
    "line": "61"
  },
  "receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}

Suggerimento finale

Un log di suggerimenti finali descrive un suggerimento consolidato proposto dal gestore della scalabilità automatica orizzontale dei pod. Horizontal Pod Autoscaler combina tutti i suggerimenti atomici di diverse metriche per creare un suggerimento finale e attiva i suggerimenti finali. L'attuazione significa che HPA indica al deployment di modificare il numero di repliche in modo che corrisponda al valore consigliato. Se il suggerimento finale indica un numero di pod diverso dal numero di pod in esecuzione, Horizontal Pod Autoscaler attiva un evento di scalabilità orizzontale o riduzione per modificare il deployment di conseguenza.

Un log dei suggerimenti finali include i seguenti campi:

Campo Descrizione
start_time Indica quando HPA ha iniziato a calcolare un consiglio.
hpa Il nome dell'oggetto HPA associato al suggerimento.
target_ref Indica l'oggetto ScaleTargetRef HPA associato a un suggerimento.
configured_size L'ultimo numero registrato di repliche prima che HPA calcoli e applichi questo suggerimento.
top_level_override Fornisce un motivo se il suggerimento proposto da HPA non viene applicato (ad esempio, a causa della tolleranza) o none se non viene eseguito alcun override.
top_level_limit Fornisce un motivo se il suggerimento proposto da HPA deve essere modificato (ad esempio, a causa del numero di repliche definite dai campi MinReplicas o MaxReplicas nella specifica HPA).
leading_metric_index L'indice della metrica principale nell'array Spec metrics è la metrica il cui suggerimento atomico associato viene utilizzato come suggerimento finale.
normalization Fornisce un riepilogo della stabilizzazione e delle limitazioni come segue, se presenti:

stabilization: descrive lo stato di stabilizzazione, se è stato applicato. La stabilizzazione viene utilizzata per limitare il flapping del conteggio delle repliche quando le metriche utilizzate per la scalabilità continuano a fluttuare. Il campo stabilization è costituito dai seguenti campi secondari:

  • replicas: il numero di repliche dopo la stabilizzazione.
  • reason: il tipo di stabilizzazione applicato, scaleUp o scaleDown.
  • stabilization_window: il periodo di tempo di stabilizzazione associato, in secondi.
  • replicas_before_stabilization: numero di repliche consigliato prima della stabilizzazione.

limitation: descrive come vengono gestite le limitazioni di scalabilità, se applicate. Questo comportamento modifica i consigli proposti dall'HPA in base alle limitazioni in vigore. Il campo limitation è costituito dai seguenti campi secondari:

  • replicas: il numero di repliche dopo la limitazione.
  • reason: il motivo per cui non viene eseguito lo scale out oltre il numero minimo o massimo di repliche.
  • scaling_policy: la policy di scalabilità applicata.
  • selectPolicy: specifica come viene selezionata una policy durante lo scale in una determinata direzione. MaxChange corrisponde a MaxChangePolicySelect; MinChange corrisponde a MinChangePolicySelect. Se la scalabilità è disattivata, il campo selectPolicy non sarà presente.
  • replicas_before_limitation: il numero di repliche consigliato prima della limitazione.
replicas Numero di repliche consigliato.
actuation_error Un messaggio di errore associato all'errore, se l'azionamento non è riuscito.
actuation_time Timestamp dell'attivazione in caso di esito positivo.
actuation_latency_seconds Tempo trascorso, in secondi, dall'inizio del calcolo del suggerimento fino al completamento dell'attuazione.

Esempio di log dei suggerimenti finali:

{
  "insertId": "qzyv7alfv1sm19ns",
  "jsonPayload": {
    "finalRecommendation": {
      "actuationTime": "2025-02-06T20:06:57.487786873Z",
      "targetRef": {
        "name": "kube-state-metrics",
        "kind": "StatefulSet",
        "apiVersion": "apps/v1"
      },
      "topLevelLimit": "none",
      "hpa": "gke-managed-cim/kube-state-metrics",
      "topLevelOverride": "noRecommendation",
      "replicas": 1,
      "configuredSize": 1,
      "actuationLatencySeconds": 0.003722451,
      "startTime": "2025-02-06T20:06:57.484064422Z"
    },
    "instance": {
      "vm_name": "my-unique-vm-identifier",
      "zone": "us-central1-a"
    }
  },
  "resource": {
    "type": "k8s_control_plane_component",
    "labels": {
      "cluster_name": "my-cluster",
      "component_location": "us-central1-a",
      "component_name": "hpa-controller",
      "location": "us-central1-a",
      "project_id": "my-project-id"
    }
  },
  "timestamp": "2025-02-06T20:06:57.488193527Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/resource_name": "my-unique-vm-identifier"
  },
  "logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
  "sourceLocation": {
    "file": "event_logger.go",
    "line": "61"
  },
  "receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}

Risoluzione dei problemi

Questa sezione descrive i problemi e i passaggi per la risoluzione relativi agli eventi di scalabilità automatica orizzontale dei pod.

Nessun evento

Se non vedi eventi di decisione di Horizontal Pod Autoscaler, assicurati di aver eseguito tutte le seguenti operazioni:

  • Hai abilitato Cloud Logging per il cluster.
  • Hai attivato i log KCP_HPA per il cluster.
  • Hai eseguito il deployment di almeno un oggetto hpa configurato correttamente nel cluster.

Per visualizzare la configurazione dell'oggetto hpa, esegui questo comando:

  kubectl describe hpa $HPA_NAME

Se continui a non visualizzare i log di KCP_HPA, contatta l'assistenza diGoogle Cloud .

Passaggi successivi