Visualizza gli eventi di Horizontal Pod Autoscaler

Questa pagina fornisce informazioni sugli eventi decisionali emessi da Horizontal Pod Autoscaler in Google Kubernetes Engine (GKE). Analizzando questi eventi, puoi ottenere informazioni su come il controller Horizontal Pod Autoscaler gestisce la scalabilità dei carichi di lavoro e comprendere il processo decisionale alla base delle sue azioni.

Horizontal Pod Autoscaler emette 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 Google Cloud account. 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 workload.
  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 Cloud Logging.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

Abilita le API

Configura Cloud Shell

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

Nella Google Cloud console, 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 il comando seguente in Cloud Shell:

gcloud config set project PROJECT_ID

Sostituisci PROJECT_ID con l'ID progetto.

Ruoli e autorizzazioni richiesti

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

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

  • Nel cluster GKE deve essere in esecuzione 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.

Abilita gli eventi decisionali di Horizontal Pod Autoscaler

Per creare un nuovo cluster con i log decisionali KCP_HPA abilitati, esegui il comando seguente:

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

Per abilitare i log decisionali KCP_HPA in un cluster esistente, esegui il comando seguente:

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

Sostituisci quanto segue:

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

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

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

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 di Horizontal Pod Autoscaler nella Google Cloud console

Puoi monitorare il comportamento di Horizontal Pod Autoscaler nella Google Cloud console. Questa visualizzazione offre un modo pratico per visualizzare gli stessi log di consigli atomici e finali disponibili in Cloud Logging, senza uscire dal contesto del carico di lavoro.

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

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

    Vai a Carichi di lavoro

  2. Seleziona il carico di lavoro gestito da Horizontal Pod Autoscaler.

  3. Fai clic sulla scheda Scalabilità.

In questa scheda puoi trovare informazioni relative alla scalabilità, inclusi 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 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, vedi Tipi di log.

Disabilita gli eventi decisionali di Horizontal Pod Autoscaler

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: nome del cluster che vuoi creare o aggiornare.
  • PROJECT_ID: il tuo Google Cloud progetto ID.
  • LOCATION: Regioni o zone di Compute per il cluster.

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

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

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 Horizontal Pod Autoscaler vengono archiviati in Cloud Logging, nella logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller" località che si trova nel bucket _Default nello stesso progetto del cluster GKE. Tutti gli eventi registrati sono in formato JSON e sono disponibili 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. Gli esempi seguenti spiegano la frequenza con cui Horizontal Pod Autoscaler genera ogni tipo di evento decisionale:

  • Consiglio atomico: Horizontal Pod Autoscaler genera un evento di consiglio atomico ogni 15 secondi per ogni metrica monitorata da ogni oggetto HPA nel cluster. Ad esempio, se hai due oggetti HPA nel cluster e ogni oggetto HPA monitora tre metriche, ogni 15 secondi vengono registrati sei consigli atomici.

  • Consiglio finale: Horizontal Pod Autoscaler genera un evento di consiglio finale ogni 15 secondi per ogni oggetto HPA nel cluster. Ad esempio, se hai due oggetti HPA nel cluster, ogni 15 secondi vengono registrati due consigli finali.

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

Consiglio atomico

Un log di consigli atomici descrive un consiglio basato su una singola metrica specificata in Horizontal Pod Autoscaler.

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 fornito il consiglio. Questo numero include anche i pod pronti, non pronti e ignorati.
metric Fornisce informazioni sulla specifica e sullo stato della metrica utilizzata per il consiglio. 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 Resource, External).
  • spec: nome della metrica e target impostato su questa metrica.
  • status: Condizioni di stato relative alla scalabilità e alle limitazioni di scalabilità.
  • newest_sample_time: timestamp del campione di metriche 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 il campione di metriche è precedente all'inizio del calcolo.
summary Il campo summary contiene informazioni sul risultato del consiglio, incluso il numero di repliche suggerito. Se non è possibile proporre un consiglio, viene visualizzato un messaggio di errore. Il campo summary contiene i seguenti sottocampi:
  • dampening: HPA applica l'attenuazione al consiglio e alla sua direzione per cercare di ridurre l'entità di una potenziale scalabilità. L'attenuazione 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 attenuazione verso il basso significa che HPA presuppone che i pod con metriche mancanti o i pod non pronti consumino lo 0% di utilizzo della metrica.
    • none: non viene applicata alcuna attenuazione.
  • override: messaggio che fornisce un motivo quando il consiglio proposto da HPA non viene applicato (ad esempio, a causa della tolleranza); oppure none se non si verifica alcuna sostituzione.
  • result: risultato del consiglio. Propone un numero consigliato di repliche o visualizza un messaggio di errore se non è possibile calcolare il consiglio.

Esempio di log di consigli 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"
}

Consiglio finale

Un log di consigli finali descrive un consiglio consolidato proposto da Horizontal Pod Autoscaler. Horizontal Pod Autoscaler combina tutti i consigli atomici di metriche diverse per creare un consiglio finale e lo attiva. L'attivazione significa che HPA indica al deployment di modificare il numero di repliche in modo che corrisponda al valore consigliato. Se il consiglio finale suggerisce un numero di pod diverso dal numero di pod in esecuzione, Horizontal Pod Autoscaler attiva un evento di scalabilità orizzontale o verticale per modificare il deployment di conseguenza.

Un log di consigli 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 consiglio.
target_ref Indica l'oggetto HPA ScaleTargetRef associato a un consiglio.
configured_size L'ultimo numero di repliche registrato prima che HPA calcoli e applichi questo consiglio.
top_level_override Fornisce un motivo se il consiglio proposto da HPA non viene applicato (ad esempio, a causa della tolleranza); oppure none se non si verifica alcuna sostituzione.
top_level_limit Fornisce un motivo se il consiglio 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 consiglio atomico associato viene utilizzato come consiglio finale.
normalization Fornisce un riepilogo della stabilizzazione e delle limitazioni, se presenti, come segue:

stabilization: descrive lo stato di stabilizzazione se è stato applicato. La stabilizzazione viene utilizzata per limitare la variazione del numero di repliche quando le metriche utilizzate per la scalabilità continuano a fluttuare. Il campo stabilization è composto dai seguenti sottocampi:

  • replicas: numero di repliche dopo la stabilizzazione.
  • reason: tipo di stabilizzazione applicato: scaleUp o scaleDown.
  • stabilization_window: 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 da HPA in base alle limitazioni in vigore. Il campo limitation è composto dai seguenti sottocampi:

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

Esempio di log di consigli 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 Horizontal Pod Autoscaler.

Nessun evento

Se non vedi alcun evento decisionale di Horizontal Pod Autoscaler, assicurati di aver eseguito tutte le seguenti operazioni:

  • Hai abilitato Cloud Logging per il cluster.
  • Hai abilitato 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 il comando seguente:

  kubectl describe hpa $HPA_NAME

Se ancora non vedi i log KCP_HPA, contatta l'assistenza Google Cloud .

Passaggi successivi