Visualizzare 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à 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure 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.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Abilita le API

    Enable the GKE, and Cloud Logging APIs.

    Enable the APIs

    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 Google Cloud CLI e lo strumento a riga di comando kubectl.

    In the Google Cloud console, activate Cloud Shell.

    Activate 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 l'ID progetto.

    Ruoli e autorizzazioni richiesti

    Per ottenere le autorizzazioni necessarie per abilitare la generazione di log e 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

    • 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 tuo cluster GKE. Vengono applicati i prezzi di Cloud Logging.

    Abilita gli eventi decisionali di Horizontal Pod Autoscaler

    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 di 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 Compute per il tuo cluster.

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

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

    Questo comando disattiva 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 e rivedi 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 Horizontal Pod Autoscaler 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 in 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. 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 nel cluster sono presenti due oggetti HPA e ciascuno monitora tre metriche, ogni 15 secondi verranno registrate sei raccomandazioni atomiche.

    • Consiglio finale: Horizontal Pod Autoscaler 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 di consigli atomico 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 suggerimento.
    hpa Il nome dell'oggetto HPA associato al consiglio.
    pod_count Indica il numero totale di pod associati all'HPA al momento della formulazione del suggerimento. 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 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: timestamp del campione di metrica più recente.
    • newest_sample_age_seconds: età del campione più recente, misurata in secondi, dall'inizio del calcolo del suggerimento. Un valore negativo indica che il campione di metriche è precedente all'inizio del calcolo.
    summary Il campo Riepilogo contiene informazioni sul risultato del suggerimento, incluso il numero di repliche suggerito. Se non è possibile proporre un suggerimento, viene visualizzato un messaggio di errore. Il campo summary contiene i seguenti sottocampi:
    • dampening: HPA applica lo smorzamento al consiglio e alla sua direzione per cercare di ridurre l'entità di una potenziale scalabilità. L'attenuazione può verificarsi nei seguenti modi:
      • up: una direzione di smorzamento verso l'alto indica che HPA presuppone Pod con metriche mancanti con un utilizzo del 100% della metrica.
      • down: una direzione di riduzione significa che HPA presuppone pod con metriche mancanti o non pronti che consumano lo 0% di utilizzo della metrica.
      • none: non viene applicato alcun smorzamento.
    • override: messaggio che fornisce un motivo quando il consiglio proposto da HPA non viene applicato (ad esempio, a causa della tolleranza) o none se non viene eseguito alcun override.
    • result: risultato del consiglio. Propone un numero consigliato di repliche o mostra un messaggio di errore se non è possibile calcolare il consiglio.

    Esempio di log di suggerimento atomico:

    {
      "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 dei suggerimenti finali descrive un suggerimento consolidato proposto da Horizontal Pod Autoscaler. Horizontal Pod Autoscaler combina tutti i suggerimenti atomici di metriche diverse per creare un suggerimento finale e lo attiva. L'attuazione 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 riduzione della scalabilità orizzontale per modificare il deployment di conseguenza.

    Un log dei consigli finali include i seguenti campi:

    Campo Descrizione
    start_time Indica quando HPA ha iniziato a calcolare un suggerimento.
    hpa Il nome dell'oggetto HPA associato al consiglio.
    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 consiglio 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 definito 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 il riepilogo della stabilizzazione e della limitazione come segue, se presente:

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

    • replicas: numero di repliche dopo la stabilizzazione.
    • reason: il tipo di stabilizzazione applicato: scaleUp o scaleDown.
    • stabilization_window: periodo 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: numero di repliche dopo la limitazione.
    • reason: motivo per cui non viene eseguito lo scale oltre il numero minimo o massimo di repliche.
    • scaling_policy: i criteri di scalabilità applicati.
    • selectPolicy: specifica come viene selezionato un criterio durante lo scale in una determinata direzione. MaxChange corrisponde a MaxChangePolicySelect; MinChange corrisponde a MinChangePolicySelect. Se il ridimensionamento è disattivato, il campo selectPolicy non è 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'azionamento non è riuscito.
    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 del suggerimento finale:

    {
      "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 eventi decisionali 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 tuo cluster.

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

      kubectl describe hpa $HPA_NAME
    

    Se ancora non vedi alcun log KCP_HPA, contatta l'assistenza diGoogle Cloud .

    Passaggi successivi