Ridimensiona i carichi di lavoro GKE su larga scala

Questo tutorial mostra come dimensionare correttamente i workload Google Kubernetes Engine (GKE) con i suggerimenti e le metriche di utilizzo di VPA.

Comprendere perché il dimensionamento corretto delle risorse è importante

Il provisioning insufficiente può privare i container delle risorse necessarie per eseguire le applicazioni, rendendole lente e inaffidabili. Il provisioning eccessivo non influisce sul rendimento delle tue applicazioni, ma potrebbe aumentare la fattura mensile.

La seguente tabella descrive le implicazioni del sottoprovisioning e del sovraprovisioning di CPU e memoria:

Risorsa Stato del provisioning Rischio Spiegazione
CPU Oltre Costo Aumenta il costo dei tuoi workload riservando risorse non necessarie.
Sotto Prestazioni Può causare il rallentamento o la mancata risposta dei carichi di lavoro.
Non impostato Affidabilità La CPU può essere limitata a 0, causando la mancata risposta dei carichi di lavoro.
Memoria Oltre Costo Aumenta il costo dei tuoi workload riservando risorse non necessarie.
Sotto Affidabilità Può causare l'interruzione delle applicazioni con un errore di esaurimento della memoria.
Non impostato Affidabilità kubelet può interrompere i tuoi pod in qualsiasi momento e contrassegnarli come non riusciti.

Obiettivi

In questo tutorial imparerai a:

  • Esegui il deployment di un'applicazione di esempio.
  • Esporta le metriche dei suggerimenti GKE da Monitoring a BigQuery.
  • Utilizza BigQuery e Looker Studio per visualizzare i suggerimenti per i container GKE in tutti i progetti.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

Configura il progetto

Cloud Shell è preinstallato con il software necessario per questo tutorial, tra cui Docker, kubectl, gcloud CLI e Terraform. Se non utilizzi Cloud Shell, devi installare gcloud CLI.

  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 workload.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  6. Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .

  7. Abilita le API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run e Cloud Build:

    Ruoli richiesti per abilitare le API

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

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  8. Installa Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un Google Cloud progetto.

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Creare un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  12. Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .

  13. Abilita le API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run e Cloud Build:

    Ruoli richiesti per abilitare le API

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

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  14. Concedi ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto.
    • USER_IDENTIFIER: l'identificatore del tuo account utente . Ad esempio: myemail@example.com.
    • ROLE: il ruolo IAM che concedi al tuo account utente.

Configura l'ambiente

Per configurare l'ambiente:

  1. Imposta le variabili di ambiente:

    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export ZONE=us-central1-f
    export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
    

    Sostituisci PROJECT_ID con l'ID progetto Google Cloud.

  2. Imposta le variabili di ambiente predefinite:

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. Clona il repository di codice.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. Passa alla directory di lavoro.

    cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
    

(Facoltativo) Configurare l'applicazione di esempio

Questa è una sezione facoltativa per il deployment di un'applicazione di esempio. Per utilizzare un cluster esistente, assicurati che Cloud Monitoring sia configurato sul cluster.

Per simulare un ambiente realistico, utilizzerai uno script di configurazione per eseguire il deployment di Online Boutique.

I passaggi seguenti installano l'applicazione di esempio e modificano la configurazione predefinita. Ad esempio, le istruzioni configurano il gestore della scalabilità automatica orizzontale dei pod (HPA) per alcuni workload e modificano le richieste e i limiti delle risorse.

  1. Esegui lo script di configurazione:

    ./scripts/setup.sh
    

    Lo script di configurazione esegue le seguenti operazioni:

    • Crea un cluster GKE.
    • Esegue il deployment dell'applicazione di esempio Online Boutique.
    • Aggiorna le richieste di risorse di CPU e memoria del pod.
    • Configura una risorsa HorizontalPodAutoscaler per i workload adservice per simulare un ambiente realistico.

    Il completamento dello script di configurazione potrebbe richiedere fino a 10 minuti.

  2. Verifica che l'applicazione di esempio sia pronta:

    kubectl get deployment
    

    L'output è simile al seguente:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    adservice               2/2     2            2           4m54s
    cartservice             1/1     1            1           4m55s
    checkoutservice         1/1     1            1           4m56s
    currencyservice         1/1     1            1           4m55s
    emailservice            1/1     1            1           4m56s
    frontend                1/1     1            1           4m55s
    loadgenerator           1/1     1            1           4m55s
    paymentservice          1/1     1            1           4m55s
    productcatalogservice   1/1     1            1           4m55s
    recommendationservice   1/1     1            1           4m56s
    redis-cart              1/1     1            1           4m54s
    shippingservice         1/1     1            1           4m54s
    

Crea un repository

Crea il repository per archiviare l'immagine dell'esportatore di metriche.

  1. Crea un nuovo repository Docker:

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository"
    
  2. Configura l'autenticazione nei repository Docker:

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. Esegui il deployment dell'immagine lanciando questo comando:

    gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
    

Esegui il deployment dell'applicazione

Nella sezione seguente, utilizzerai Terraform per svolgere le seguenti attività:

  • Crea un service account e assegna le autorizzazioni necessarie per gestire e interagire con Google Cloud le risorse.
  • Concedi al service account i ruoli Visualizzatore monitoraggio, Editor dati BigQuery, Proprietario dati BigQuery, Utente job BigQuery e Invocatore Cloud Run.
  • Esegui il deployment di un job Cloud Run che estrae un'immagine Docker da Artifact Registry e la esegue con la configurazione specificata.
  • Crea un job Cloud Scheduler che attivi il servizio Cloud Run ogni giorno.
  • Crea un set di dati, una tabella e una vista BigQuery per archiviare i dati delle metriche e i consigli.

Configura Terraform

  1. Imposta le variabili di ambiente di configurazione:

    export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
    export TF_VAR_BIGQUERY_TABLE=gke_metrics
    export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
    export TF_VAR_RECOMMENDATION_DISTANCE=86400
    export TF_VAR_LATEST_WINDOW_SECONDS=600
    export TF_VAR_METRIC_WINDOW=259200
    export TF_VAR_METRIC_DISTANCE=600
    

    Questo comando include quanto segue:

    • TF_VAR_BIGQUERY_DATASET e TF_VAR_BIGQUERY_TABLE: contengono i dati delle metriche GKE.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: il periodo di tempo per i suggerimenti di VPA. Il valore predefinito è 1.209.600 secondi, ovvero 14 giorni.
    • TF_VAR_RECOMMENDATION_DISTANCE: l'intervallo in cui vengono restituiti i punti dati dei consigli VPA. Il valore predefinito è 86.400 secondi o ogni giorno.
    • TF_VAR_LATEST_WINDOW_SECONDS: il periodo di tempo per ottenere i valori più recenti delle risorse richieste e limite. Il valore predefinito è 600 secondi, ovvero 10 minuti.
    • METRIC_WINDOW: stabilisce il periodo di tempo per le metriche di utilizzo e utilizzazione di GKE. Il valore predefinito è 259.200 secondi, ovvero 3 giorni.
    • METRIC_DISTANCE: l'intervallo in cui vengono restituiti i punti dati. Il valore predefinito è 600 secondi, ovvero ogni 10 minuti.

    Modifica questi valori in base alle esigenze dei tuoi workload. Ad esempio, per i workload batch eseguiti una volta al mese, aggiorna TF_VAR_RECOMMENDATION_WINDOW_SECONDS e METRIC_WINDOW a 2592000 secondi (30 giorni).

Esegui il deployment della configurazione Terraform

  1. Inizializza, convalida e applica la configurazione:

    terraform -chdir=terraform init
    terraform -chdir=terraform validate
    terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
    

    Questo comando fornisce un piano di esecuzione e chiede la tua approvazione prima di apportare modifiche. Rivedi il piano e, se tutto è come previsto, digita yes per procedere.

    Una volta completato correttamente il comando apply, le risorse vengono create e gestite da Terraform.

  2. Esegui manualmente il job Cloud Scheduler:

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

Verifica il deployment

  1. Seleziona la scheda Log nella pagina dei dettagli di workload-recommendations.

  2. Verifica che i log delle metriche vengano elaborati nella console Cloud Run:

    Vai a Cloud Run

    I log mostrano le metriche scritte in BigQuery. L'output dovrebbe essere simile al seguente:

    INFO - Building Row
    INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
    INFO - Run Completed
    

    Se l'output non corrisponde, attendi cinque minuti ed esegui il comando gcloud scheduler jobs run recommendation-schedule --location $REGION.

Visualizza il suggerimento per il container in BigQuery

  1. Vai alla pagina BigQuery nella console Google Cloud :

    Vai a BigQuery

  2. Verifica che i dati siano visibili nella tabella gke_metrics e nella visualizzazione container_recommendations. A seconda del numero di carichi di lavoro, potrebbe essere necessario qualche minuto per scrivere tutte le metriche in BigQuery.

  3. Nell'editor di query, seleziona tutte le righe nella visualizzazione container_recommendations:

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

    Questo programma estrae le seguenti metriche da Cloud Monitoring:

    • Dettagli del workload: ID progetto, nome del cluster, nome del controller e del container.

    • Utilizzo e sfruttamento di CPU/memoria: la quantità di CPU e memoria utilizzata dal workload, nonché la percentuale di CPU e memoria utilizzata.

    • Richieste e limiti: la quantità di CPU e memoria richiesta per il workload, nonché la quantità massima di CPU e memoria consentita per il workload.

    • Suggerimenti per il workload di CPU e memoria: suggerimenti su quanta CPU e memoria devono essere allocate al workload per garantire che venga eseguito senza problemi, in base ai suggerimenti di VPA per i deployment e all'utilizzo effettivo e agli utilizzi target per gli oggetti non di deployment.

Visualizzare i consigli in Looker Studio

Looker Studio è una piattaforma di business intelligence self-service senza costi che ti consente di creare e utilizzare visualizzazioni dei dati, dashboard e report. Con Looker Studio puoi connetterti ai tuoi dati, creare visualizzazioni e condividere i tuoi approfondimenti con altri.

Utilizza Looker Studio per visualizzare i dati nella visualizzazione BigQuery container_recommendations:

  1. Apri il modello di dashboard di ridimensionamento dei workload
  2. Fai clic su Utilizza i miei dati.
  3. Seleziona il progetto.
  4. Per Set di dati, seleziona gke_metric_dataset.
  5. Per Tabella, seleziona container_recommendations.
  6. Fai clic su Aggiungi.
  7. Fai clic su Aggiungi al report.

Dettagli del modello di Looker Studio

La pagina dei dettagli del modello di Looker Studio fornisce le seguenti informazioni:

  • Panoramica del dimensionamento corretto dei workload GKE: fornisce una panoramica dei tuoi cluster, tra cui:
    • Il numero di workload Best Effort e Burstable a rischio di problemi di affidabilità e prestazioni.
    • Potenziali risparmi sulle risorse di CPU e memoria. I valori positivi indicano un provisioning eccessivo, mentre i valori negativi indicano un provisioning insufficiente.
  • Suggerimenti per i workload: fornisce suggerimenti per le richieste e i limiti di CPU e memoria dei workload.
  • Carichi di lavoro GKE a rischio: mostra i carichi di lavoro che sono a maggior rischio di riscontrare problemi di affidabilità e prestazioni.
  • Cronologia - Ridimensionamento del workload - Come valuti la tua esperienza?: Fornisce una visualizzazione storica dell'efficacia dell'implementazione del dimensionamento ottimale dei workload e della riduzione del numero di workload Best Effort.

Suggerimento per il container con CPU richiesta e limite

Se i valori di richiesta e limite della CPU dei workload sono uguali, la qualità del servizio è considerata garantita e il consiglio per la CPU è impostato sul valore massimo entro il periodo di tempo di 14 giorni. In caso contrario, viene utilizzato il 95° percentile del consiglio richiesto per la CPU entro 14 giorni.

Quando i valori di richiesta e limite della CPU sono uguali, il suggerimento per il limite della CPU viene impostato sul suggerimento VPA per la richiesta di CPU massima solo per gli oggetti deployment e sull'utilizzo della CPU con un utilizzo target del 70%. Se la richiesta e il limite del workload non sono identici, viene utilizzato il rapporto limite esistente.

Suggerimento per il container con memoria richiesta e limite

I suggerimenti sulla memoria utilizzano il suggerimento VPA massimo solo per gli oggetti deployment e l'utilizzo massimo della memoria con un utilizzo target dell'80% per garantire l'affidabilità dei carichi di lavoro. Puoi aggiornare i valori di utilizzo target nella query della vista container_recommendation.

È una best practice utilizzare la stessa quantità di memoria per richieste e limiti perché la memoria è una risorsa incomprimibile. Quando la memoria è esaurita, il pod deve essere rimosso. Per evitare l'arresto dei pod e la destabilizzazione dell'ambiente, devi impostare la memoria richiesta sul limite di memoria.

Assegnare la priorità ai suggerimenti

A ogni riga viene assegnato un valore di priorità per visualizzare i carichi di lavoro che richiedono attenzione immediata in base ai suggerimenti. Le unità di CPU e memoria sono diverse. Per normalizzare le unità, il rapporto tra il prezzo on demand del tipo di macchina E2 tra CPU e memoria predefinite viene utilizzato come approssimazione per convertire le unità di memoria in unità di CPU.

La priorità viene calcolata utilizzando la seguente formula:

priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))

Per Autopilot, le risorse totali richieste dalla configurazione del deployment devono rientrare nei valori minimi e massimi supportati.

Visualizzare i suggerimenti per le VPA per più progetti

Per visualizzare i suggerimenti per i container VPA in più progetti, utilizza un nuovo progetto come progetto di definizione dell'ambito.

Quando esegui il deployment di questo progetto nell'ambiente di produzione, aggiungi tutti i progetti che vuoi analizzare all'ambito delle metriche del nuovo progetto.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per evitare la fatturazione è eliminare il progetto creato per il tutorial.

Elimina un progetto Google Cloud :

gcloud projects delete PROJECT_ID

Passaggi successivi