Questo tutorial mostra come determinare le dimensioni ottimali dei carichi di lavoro Google Kubernetes Engine (GKE) con i consigli VPA e le metriche di utilizzo.
Comprendere perché il dimensionamento ottimale delle risorse è importante
Il sottodimensionamento può privare i container delle risorse necessarie per eseguire le applicazioni, rendendole lente e inaffidabili. L'overprovisioning non influisce sul rendimento delle applicazioni, ma potrebbe aumentare la fattura mensile.
La tabella seguente descrive le implicazioni del provisioning insufficiente e con overprovisioning di CPU e memoria:
Risorsa | Stato del provisioning | Rischio | Spiegazione |
---|---|---|---|
CPU | Oltre | Costo | Aumenta il costo dei carichi di lavoro prenotando inutilmente Google Cloud. |
Sottopeso | Prestazioni | Può causare il rallentamento o la mancata reattività dei carichi di lavoro. | |
Non impostato | Affidabilità | La CPU può essere limitata a 0, facendo sì che i carichi di lavoro diventino non risponde. | |
Memoria | Oltre | Costo | Aumenta il costo dei carichi di lavoro prenotando inutilmente Google Cloud. |
Sotto | Affidabilità | Può causare l'interruzione delle applicazioni con un errore di esaurimento della memoria. | |
Non impostato | Affidabilità | kubelet può arrestare i pod in qualsiasi momento e contrassegnarli come
non riuscito. |
Obiettivi
In questo tutorial imparerai a:
- Esegui il deployment di un'applicazione di esempio.
- Esporta le metriche dei consigli GKE dal monitoraggio in BigQuery.
- Utilizza BigQuery e Looker Studio per visualizzare i consigli per i contenitori GKE nei vari progetti.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'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 di cui hai bisogno
per questo tutorial, tra cui Docker,
kubectl
,
gcloud CLI e Terraform.
Se non utilizzi Cloud Shell, devi installare gcloud CLI.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:
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 - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:
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 -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
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
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
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 cluster.
Per simulare un ambiente realistico, utilizzerai uno script di configurazione per eseguire il deployment Negozio online.
I passaggi seguenti consentono di installare l'applicazione di esempio e modificare l'impostazione predefinita configurazione. Ad esempio, le istruzioni configurano il gestitore della scalabilità automatica pod orizzontale (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 esegue queste operazioni:
- Viene creato un cluster GKE.
- Esegue il deployment dell'applicazione di esempio Online Boutique.
- Aggiorna le richieste di risorse di CPU e memoria dei pod.
- Configura una risorsa HorizontalPodAutoscaler per
adservice
carichi di lavoro per 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 di esportazione 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 al service account i ruoli Visualizzatore monitoraggio, Editor dati BigQuery, Proprietario dati BigQuery, Utente job BigQuery e Avvocato Cloud Run.
- Esegui il deployment di un job Cloud Run che estrae un'immagine Docker da Artifact Registry e lo esegue con la configurazione specificata.
- Crea un job Cloud Scheduler che attivi il servizio Cloud Run ogni giorno.
- Creare un set di dati, una tabella e una vista BigQuery per archiviare i dati delle metriche e personalizzati.
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:
TF_VAR_BIGQUERY_DATASET
eTF_VAR_BIGQUERY_TABLE
: tieni premuto il dei 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 a cui VPA vengono restituiti i punti dati dei suggerimenti. Il valore predefinito è 86.400 secondi o ogni 1 giorno.TF_VAR_LATEST_WINDOW_SECONDS
: il periodo di tempo per ottenere i valori delle risorse limitate e richieste più recenti. Il valore predefinito è 600 secondi, o 10 minuti.METRIC_WINDOW
: stabilisce il periodo di tempo per Metriche di utilizzo e utilizzo di GKE. Il valore predefinito è 25.9200. secondi o tre giorni.METRIC_DISTANCE
: l'intervallo in corrispondenza del quale i punti dati vengono restituito. Il valore predefinito è 600 secondi o ogni 10 minuti.
Modifica questi valori in base alle esigenze dei tuoi 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
in2592000
secondi (30 giorni).
Esegui il deployment della configurazione Terraform
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 richiede la tua approvazione prima di apportare modifiche. Esamina il piano e, se tutto è come previsto, digita
yes
per continuare.Una volta completato il comando apply, le risorse vengono create e gestito 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
workload-recommendations
.Verifica che i log delle metriche vengano elaborati in Cloud Run Console:
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 consiglio per il contenitore in BigQuery
Vai alla pagina BigQuery nella console Google Cloud:
Verifica che i dati siano visibili nella tabella
gke_metrics
e checontainer_recommendations
visualizzazione. A seconda del numero di carichi di lavoro, la scrittura di tutte le metriche in BigQuery potrebbe richiedere alcuni minuti.Nell'editor delle query, seleziona tutte le righe della 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, nome del controller e del contenitore.
Utilizzo e utilizzo di CPU/memoria: la quantità di CPU e memoria fornita utilizzata dal carico di lavoro, nonché la percentuale di CPU e memoria utilizzata viene utilizzata.
Richiesta e limiti: la quantità di CPU e memoria richiesta per del carico di lavoro, nonché la quantità massima di CPU e memoria consentita per il carico di lavoro.
Consigli per i carichi di lavoro relativi a CPU e memoria: consigli su come allocare la CPU e la memoria al carico di lavoro per assicurarne il funzionamento senza problemi, in base ai consigli VPA per i deployment e all'utilizzo effettivo e agli utilizzi target per gli oggetti non deployment.
Visualizzare i suggerimenti in Looker Studio
Looker Studio è una piattaforma di business intelligence self-service gratuita che consente di creare e utilizzare visualizzazioni dei dati, dashboard e report. Con Looker Studio puoi connetterti ai tuoi dati, creare visualizzazioni e condividere le informazioni con gli altri.
Utilizza Looker Studio per visualizzare i dati nella
visualizzazione container_recommendations
BigQuery:
- Apri il modello di dashboard per il ridimensionamento in base al carico di lavoro
- Fai clic su Utilizza i miei dati.
- Seleziona il progetto.
- In Set di dati, seleziona
gke_metric_dataset
. - Per Tabella, seleziona
container_recommendations
. - Fai clic su Aggiungi.
- Fai clic su Aggiungi al report.
Dettagli del modello Looker Studio
La pagina dei dettagli del modello di Looker Studio fornisce le seguenti informazioni:
- Panoramica del dimensionamento corretto dei carichi di lavoro GKE: fornisce una panoramica dei tuoi cluster, tra cui:
- Il numero di carichi di lavoro Best Effort e Burstable a rischio di affidabilità o problemi di prestazioni.
- Potenziali risparmi delle risorse di CPU e memoria. I valori positivi indicano un overprovisioning, mentre i valori negativi indicano un underprovisioning.
- Suggerimenti per il carico di lavoro: fornisce suggerimenti per CPU e memoria del carico di lavoro richieste e limiti.
- Carichi di lavoro GKE a rischio: mostra i carichi di lavoro con il massimo rendimento di avere problemi di affidabilità e prestazioni.
- Cronologia - Ottimizzazione del carico di lavoro - Come va?: Fornisce una vista storica dell'efficacia con cui è stato eseguito il dimensionamento corretto dei carichi di lavoro e la riduzione del numero di carichi di lavoro di tipo Best Effort.
Consiglio per il container relativo alla CPU richiesta e al limite
Se i valori di CPU richiesti e di limite dei carichi di lavoro sono uguali, la QoS è considerata garantita e il consiglio per la CPU è impostato sul valore massimo nel periodo di 14 giorni. In caso contrario, viene utilizzato il 95° percentile del consiglio richiesto dalla CPU entro 14 giorni.
Quando i valori di richiesta e limite della CPU sono uguali, il consiglio per il limite della CPU è impostato sul consiglio VPA massimo per la richiesta di CPU solo per gli oggetti di Deployment e sull'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 sul limite del contenitore
I suggerimenti sulla memoria utilizzano il suggerimento VPA massimo per i 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 per utilizzare la stessa quantità di memoria per richieste e limiti perché la memoria è una risorsa incomprimibile. Quando la memoria è esaurita, il pod deve essere ritirato. Per evitare che i pod vengano rimossi e destabilizzando devi impostare la memoria richiesta sul limite di memoria.
Priorità ai suggerimenti
A ogni riga viene assegnato un valore di priorità per mostrare i carichi di lavoro che richiedono attenzione immediata in base ai consigli. Le unità di CPU e sono diverse. Per normalizzare le unità, Prezzo on demand del tipo di macchina E2 il rapporto tra CPU predefinita e memoria viene utilizzato come approssimazione per convertire di memoria alle unità 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 dal tuo deployment deve essere all'interno del valori minimi e massimi.
Visualizza suggerimenti VPA per più progetti
Per visualizzare i suggerimenti relativi ai 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 nell'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.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Passaggi successivi
- Scopri di più sull'ottimizzazione dei costi di GKE in Best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.
- Trova suggerimenti e best practice di progettazione 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 del tuo cluster nei periodi di bassa domanda in Ridurre i costi facendo lo scale down dei cluster GKE al di fuori delle ore di punta.
- Scopri di più sull'ottimizzazione dei costi di GKE in Monitoraggio dei cluster GKE per l'ottimizzazione dei costi mediante Monitoring.