Questo tutorial mostra come dimensionare correttamente i carichi di lavoro di Google Kubernetes Engine (GKE) con i suggerimenti e le metriche di utilizzo VPA.
Comprendere perché è importante il dimensionamento ottimale delle risorse
Il provisioning insufficiente può esaurire i container delle risorse necessarie per eseguire le applicazioni, rendendole lente e inaffidabili. Il provisioning eccessivo non influisce sulle prestazioni delle applicazioni, ma potrebbe aumentare la fattura mensile.
La tabella seguente descrive le implicazioni del provisioning insufficiente e eccessivo di CPU e memoria:
Risorsa | Stato del provisioning | Rischio | Spiegazione |
---|---|---|---|
CPU | Oltre | Costo | Aumenta il costo dei carichi di lavoro riservando risorse non necessarie. |
Sotto | Prestazioni | Può causare un rallentamento dei carichi di lavoro o la mancata risposta. | |
Non impostata | Affidabilità | La CPU può essere limitata a 0, causando la mancata risposta dei carichi di lavoro. | |
Memoria | Oltre | Costo | Aumenta il costo dei carichi di lavoro riservando risorse non necessarie. |
Sotto | Affidabilità | Può causare l'arresto delle applicazioni con un errore di esaurimento della memoria (OOM). | |
Non impostata | Affidabilità | kubelet può arrestare i tuoi pod in qualsiasi momento e contrassegnarli come non riusciti. |
Obiettivi
In questo tutorial imparerai a:
- Eseguire il deployment di un'applicazione di esempio.
- Esporta le metriche dei suggerimenti GKE da Monitoring a BigQuery.
- Usa BigQuery e Looker Studio per visualizzare i suggerimenti sui container GKE nei vari 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.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina 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.
- 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea 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 tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build.
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 - Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea 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 tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build.
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 -
Concedi i ruoli al tuo Account Google. Esegui questo 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:EMAIL_ADDRESS" --role=ROLE
- Sostituisci
PROJECT_ID
con l'ID progetto. - Sostituisci
EMAIL_ADDRESS
con il tuo indirizzo email. - Sostituisci
ROLE
con ogni singolo ruolo.
- Sostituisci
configura l'ambiente
Per configurare l'ambiente, segui questi passaggi
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 il tuo ID progetto Google Cloud.Imposta le variabili di ambiente predefinite:
gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION gcloud config set compute/zone $ZONE
clona il repository di codice.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Passa alla directory di lavoro.
cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
(Facoltativo) Configura 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 tuo 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 l'Horizontal Pod Autoscaler (HPA) per alcuni carichi di lavoro e modificano le richieste e i limiti delle risorse.
Esegui lo script di configurazione:
./scripts/setup.sh
Lo script di configurazione svolge 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 carichi di lavoro
adservice
al fine di simulare un ambiente realistico.
Il completamento dello script di configurazione potrebbe richiedere fino a 10 minuti.
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 delle metriche.
Crea un nuovo repository Docker:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"
Configura l'autenticazione nei repository Docker:
gcloud auth configure-docker $REGION-docker.pkg.dev
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 eseguire le attività seguenti:
- Crea un account di servizio e assegna le autorizzazioni necessarie per gestire e interagire con le risorse Google Cloud.
- Concedi i ruoli Visualizzatore monitoraggio, Editor dati BigQuery, Proprietario dati BigQuery, Utente job BigQuery e Invoker di Cloud Run all'account di servizio.
- Esegui il deployment di un job Cloud Run che estrae un'immagine Docker da Artifact Registry e la esegue con la configurazione specificata.
- Creare un job Cloud Scheduler che attivi il servizio Cloud Run giornalmente.
- Creare un set di dati, una tabella e una visualizzazione BigQuery per archiviare i dati e i suggerimenti delle metriche.
Configura Terraform
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
eTF_VAR_BIGQUERY_TABLE
: memorizzano i dati delle metriche GKE.TF_VAR_RECOMMENDATION_WINDOW_SECONDS
: il periodo di tempo per i consigli VPA. Il valore predefinito è 1.209.600 secondi o 14 giorni.TF_VAR_RECOMMENDATION_DISTANCE
: l'intervallo in cui vengono restituiti i punti dati dei suggerimenti VPA. Il valore predefinito è 86.400 secondi o ogni 1 giorno.TF_VAR_LATEST_WINDOW_SECONDS
: il periodo di tempo per ottenere i valori più recenti richiesti e limitare le risorse. Il valore predefinito è 600 secondi o 10 minuti.METRIC_WINDOW
: stabilisce il periodo di tempo per le metriche di utilizzo e utilizzo di GKE. Il valore predefinito è 25.9200 secondi o 3 giorni.METRIC_DISTANCE
: l'intervallo con cui i punti dati vengono restituiti. Il valore predefinito è 600 secondi o ogni 10 minuti.
Modifica questi valori in base alle esigenze dei carichi di lavoro. Ad esempio, per i carichi di lavoro batch che vengono eseguiti una volta al mese, aggiorna
TF_VAR_RECOMMENDATION_WINDOW_SECONDS
eMETRIC_WINDOW
a2592000
secondi (30 giorni).
Eseguire il deployment della configurazione Terraform
Inizializza, convalida e applica la tua 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 richiede la tua approvazione prima di apportare qualsiasi modifica. Controlla il piano e, se tutto è come previsto, digita
yes
per continuare.Una volta completato il comando apply, le risorse vengono create e gestite da Terraform.
Esegui manualmente il job Cloud Scheduler:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}
Verifica il deployment
Seleziona la scheda Log nella pagina dei dettagli di
workload-recommendations
.Verifica che i log delle metriche vengano elaborati nella console di 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 sul container in BigQuery
Vai alla pagina BigQuery nella console Google Cloud:
Verifica che i dati siano visibili nella tabella
gke_metrics
e nella vistacontainer_recommendations
. A seconda del numero di carichi di lavoro, la scrittura di tutte le metriche in BigQuery potrebbe richiedere alcuni minuti.Nell'editor 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 carico di lavoro: ID progetto, nome del cluster, controller e nome del container.
Utilizzo e utilizzo di CPU/memoria: la quantità di CPU e memoria utilizzata dal carico di lavoro, nonché la percentuale di CPU e memoria utilizzata.
Richieste e limiti: la quantità di CPU e memoria richiesta per il carico di lavoro, nonché la quantità massima di CPU e memoria consentita per il carico di lavoro.
Suggerimenti per i carichi di lavoro di CPU e memoria: suggerimenti per la quantità di CPU e memoria da allocare al carico di lavoro per garantirne l'esecuzione senza intoppi, in base ai suggerimenti VPA per i deployment e all'utilizzo effettivo e agli utilizzi dei target per gli oggetti non Deployment.
Visualizza i suggerimenti in Looker Studio
Looker Studio è una piattaforma di business intelligence self-service gratuita che ti consente di creare e utilizzare visualizzazioni di dati, dashboard e report. Con Looker Studio puoi connetterti ai tuoi dati, creare visualizzazioni e condividere gli insight con altri.
Utilizza Looker Studio per visualizzare i dati nella vista container_recommendations
di BigQuery:
- Apri il modello di dashboard Dimensionamento ottimale del carico di lavoro.
- Fai clic su Usa i miei dati.
- Seleziona il progetto.
- Per Set di dati, seleziona
gke_metric_dataset
. - Per Tabella, seleziona
container_recommendations
. - Fai clic su Aggiungi.
- Fai clic su Aggiungi al report.
Dettagli dei modelli di Looker Studio
La pagina dei dettagli del modello di Looker Studio fornisce le seguenti informazioni:
- Panoramica sul dimensionamento dei carichi di lavoro di GKE: fornisce una panoramica dei tuoi cluster, tra cui:
- Il numero di carichi di lavoro Best Effort e Burstable a rischio di affidabilità e problemi di prestazioni.
- Potenziale risparmio di risorse di CPU e memoria. I valori positivi indicano il provisioning eccessivo, mentre i valori negativi indicano il provisioning insufficiente.
- Suggerimenti per i carichi di lavoro: forniscono suggerimenti per le richieste e i limiti di CPU e memoria dei carichi di lavoro.
- Carichi di lavoro GKE a rischio: mostra i carichi di lavoro che sono a rischio maggiore di problemi di affidabilità e prestazioni.
- Cronologia - Dimensionamento dei carichi di lavoro - Come stiamo andando?: Fornisce una visione cronologica dell'efficacia con cui è stato implementato il dimensionamento ottimale dei carichi di lavoro e la riduzione del numero di carichi di lavoro Best Effort.
CPU richiesta e suggerimento relativo alla limitazione del container
Se i carichi di lavoro della CPU richiesti e i valori limite sono uguali, il QoS viene considerato garantito e il suggerimento per la CPU è impostato al massimo entro il periodo di 14 giorni della finestra. In caso contrario, viene utilizzato il 95° percentile del suggerimento richiesto per la CPU entro 14 giorni.
Quando i valori della richiesta di CPU e del limite sono uguali, il suggerimento per il limite di CPU è impostato sul suggerimento VPA massimo per le richieste di CPU solo per gli oggetti Deployment e l'utilizzo della CPU con un utilizzo target del 70%. Se la richiesta e il limite del carico di lavoro non sono identici, viene utilizzato il rapporto limite esistente.
Memoria richiesta e suggerimento per limitare il container
I suggerimenti sulla memoria utilizzano il valore VPA massimo consigliato 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
.
Come best practice, utilizzare la stessa quantità di memoria per richieste e limiti perché la memoria è una risorsa incomprimibile. Quando la memoria è esaurita, deve essere rimosso il pod. Per evitare che i pod vengano rimossi e destabilizzano l'ambiente, devi impostare la memoria richiesta sul limite di memoria.
Assegnazione delle priorità ai suggerimenti
A ogni riga viene assegnato un valore di priorità per individuare i carichi di lavoro che richiedono un'attenzione immediata in base ai suggerimenti. Le unità di CPU e memoria sono diverse. Per normalizzare le unità, il rapporto di prezzo on demand del tipo di macchina E2 tra la CPU predefinita e la memoria viene utilizzato come approssimazione per la conversione delle 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 minimo e massimo supportati.
Visualizza i suggerimenti VPA per più progetti
Per visualizzare i suggerimenti sui 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 da 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 che hai creato per il tutorial.
Elimina un progetto Google Cloud:
gcloud projects delete PROJECT_ID
Passaggi successivi
- Scopri di più sull'ottimizzazione dei costi di GKE, consulta le best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
- Trova suggerimenti di progettazione e best practice per ottimizzare il costo dei carichi di lavoro Google Cloud in Framework dell'architettura Google Cloud: ottimizzazione dei costi.
- Scopri di più sull'ottimizzazione dei costi per i periodi di bassa richiesta in Ridurre i costi con lo scale down dei cluster GKE durante le ore non di punta.
- Scopri di più sull'ottimizzazione dei costi di GKE, consulta Monitoraggio dei cluster GKE per l'ottimizzazione dei costi mediante Monitoring.