Questa pagina fornisce informazioni sugli eventi di decisione 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 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.
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
Abilita le API
Enable the GKE, and Cloud Logging 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 lo strumento a riga di comando Google Cloud CLI e kubectl.
In the Google Cloud console, 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 il seguente 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 ed elaborare i log, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Per attivare il logging degli eventi di Horizontal Pod Autoscaler nel cluster:
Amministratore del cluster Kubernetes Engine (
roles/container.clusterAdmin
) -
Per accedere ai log e utilizzare Esplora log e Log Analytics:
Visualizzatore log (
roles/logging.viewer
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire 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 installata la versione
1.31.5-gke.1090000
o successiva o1.32.1-gke.1260000
o successiva. - Abilita Cloud Logging nel tuo 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 delle decisioni KCP_HPA
abilitati, esegui il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Per attivare i log delle decisioni KCP_HPA
su un cluster esistente, esegui il seguente 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 da creare o aggiornare.PROJECT_ID
: il tuo ID Google Cloud progetto.LOCATION
: regioni o zone di calcolo 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"
all'interno di Cloud Logging.
Recupera la configurazione del logging aggiornata del cluster e controlla 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
Disattivare 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 da creare o aggiornare.PROJECT_ID
: il tuo ID Google Cloud progetto.LOCATION
: regioni o zone di calcolo 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 del logging aggiornata del cluster e controlla 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 tuo cluster GKE.
Tutti gli eventi registrati sono nel formato JSON
e sono disponibili nel campo jsonPayload
di una voce del 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 con quale frequenza 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 tuo cluster sono presenti due oggetti HPA e ogni oggetto HPA monitora tre metriche, ogni 15 secondi verranno 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 nel cluster sono presenti due oggetti HPA, verranno registrati due consigli finali ogni 15 secondi.
In totale, con due oggetti HPA che monitorano ciascuno tre metriche, il log KCP_HPA
riceverà otto voci di eventi di decisione ogni 15 secondi.
Suggerimento atomico
Un log dei 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 al momento 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:
|
summary |
Il campo di riepilogo contiene informazioni sul risultato del consiglio, incluso il numero di repliche suggerite. Se non è possibile proporre un consiglio, viene visualizzato un messaggio di errore. Il campo summary contiene i seguenti sottocampi:
|
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 del consiglio finale 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 attiva i consigli finali. L'attuazione significa che l'HPA indica al deployment di regolare il numero di repliche in modo che corrisponda al valore consigliato. Se il consiglio finale suggerisce un numero di pod diverso rispetto al numero di pod in esecuzione, Horizontal Pod Autoscaler attiva un evento di ridimensionamento per regolare di conseguenza il deployment.
Un log del consiglio finale 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 ScaleTargetRef HPA 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 dall'HPA non viene applicato (ad esempio a causa della tolleranza) oppure none se non viene eseguita 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:
|
replicas |
Numero di repliche consigliato. |
actuation_error |
Un messaggio di errore associato all'errore, se l'azionamento non è riuscito. |
actuation_time |
Timestamp dell'attuazione in caso di esito positivo. |
actuation_latency_seconds |
Tempo trascorso, in secondi, dall'inizio del calcolo del consiglio fino al completamento dell'attuazione. |
Esempio di log del consiglio 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 Horizontal Pod Autoscaler.
Nessun evento
Se non visualizzi eventi decisionali di Horizontal Pod Autoscaler, assicurati di aver eseguito tutti i seguenti passaggi:
- Hai attivato Cloud Logging per il cluster.
- Hai attivato i log
KCP_HPA
per il cluster. - Hai disegnato almeno un oggetto
hpa
configurato correttamente nel tuo cluster.
Per visualizzare la configurazione dell'oggetto hpa
, esegui il seguente comando:
kubectl describe hpa $HPA_NAME
Se continui a non vedere log KCP_HPA
, contatta l'Google Cloud assistenza.
Passaggi successivi
- Consulta Informazioni sui log di GKE.
- Scopri di più sui log di GKE.
- Scopri come trovare log GKE specifici utilizzando le query di esempio.
- Scopri come ottimizzare la scalabilità automatica dei pod in base alle metriche.