Questo tutorial mostra come configurare l'infrastruttura dello strumento Autoscaler per Spanner. Questo tutorial illustra due modi per configurare l'infrastruttura in base ai tuoi requisiti:
- Una topologia di deployment per progetto. Consigliamo questa topologia per i team indipendenti che vogliono gestire la propria configurazione e infrastruttura di Autoscaler. Una topologia di deployment per progetto è anche un buon punto di partenza per testare le funzionalità di Autoscaler.
- Una topologia di deployment centralizzata. Consigliamo questa topologia per i team che gestiscono la configurazione e l'infrastruttura di una o più istanze Spanner, mantenendo al contempo i componenti e la configurazione di Autoscaler in un unico posto. Nella topology centralizzata, oltre a un progetto Autoscaler, devi configurare un secondo progetto, denominato in questo tutorial Progetto applicazione. Il progetto dell'applicazione contiene le risorse dell'applicazione, incluso Spanner. In questo tutorial, configurerai e abiliterai la fatturazione e le API per questi due progetti separatamente.
Questo documento fa parte di una serie:
- Spanner con scalabilità automatica
- Esegui il deployment di uno strumento di scalabilità automatica per progetto o centralizzato per Spanner (questo documento)
- Eseguire il deployment di uno strumento di ridimensionamento automatico distribuito per Spanner
Questa serie è rivolta ai team IT, Operations e Site Reliability Engineering (SRE) che vogliono ridurre l'overhead operativo e ottimizzare il costo degli implementazioni di Spanner.
Obiettivi
- Esegui il deployment di Autoscaler utilizzando una topologia di deployment per progetto o centralizzata.
- Importa le istanze Spanner esistenti nello stato di Terraform.
- Configura Autoscaler.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
I costi associati al funzionamento dei componenti di Autoscaler quando implementi questo tutorial dovrebbero essere nulli o quasi. Tuttavia, questa stima non include i costi per le istanze Spanner. Per un esempio di come calcolare i costi delle istanze Spanner, consulta Scalabilità automatica di Spanner.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
-
In the Google Cloud console, activate Cloud Shell.
In Cloud Shell, clona il seguente repository GitHub:
git clone https://github.com/cloudspannerecosystem/autoscaler
Esporta le variabili per le directory di lavoro in cui si trovano i file di configurazione Terraform per ogni topologia:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
Preparazione del progetto Autoscaler
In questa sezione prepari il progetto Autoscaler per il deployment.
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.
Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, Cloud Build, and Cloud Scheduler APIs.
In Cloud Shell, imposta le variabili di ambiente con l'ID del tuo progetto Autoscaler:
export PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${PROJECT_ID}"
Imposta la regione e la zona e la località App Engine (per Cloud Scheduler e Firestore per l'infrastruttura di Autoscaler:
export REGION=us-central1 export ZONE=us-central1-c export APP_ENGINE_LOCATION=us-central
Crea un account di servizio da utilizzare da Terraform per creare tutte le risorse della tua infrastruttura:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Assegna il ruolo di proprietario del progetto (
roles/owner
) all'account di servizio:gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Crea un file della chiave dell'account di servizio:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Se il tuo progetto non ha ancora un'istanza Firestore, creane una:
gcloud app create --region="${APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
Preparazione del progetto dell'applicazione
Se esegui il deployment di Autoscaler in modalità per progetto, puoi andare a Eseguire il deployment di Autoscaler.
Nella topologia di deployment centralizzata, tutti i componenti di Autoscaler risiedono nello stesso progetto. Le istanze Spanner possono essere situate in progetti diversi.
In questa sezione, configuri il progetto dell'applicazione in cui risiede la tua istanza Spanner. L'istanza Spanner serve una o più applicazioni specifiche. In questo tutorial, si presume che i team responsabili di queste applicazioni siano separati dal team responsabile dell'infrastruttura e della configurazione di Autoscaler.
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.
Enable the Spanner API.
In Cloud Shell, imposta le variabili di ambiente:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
Sostituisci INSERT_YOUR_APP_PROJECT_ID con l'ID del progetto dell'applicazione.
Assegna all'account di servizio
terraformer
che hai creato il ruolo di proprietarioroles/owner
nel progetto dell'applicazione:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
La concessione di questo ruolo all'account di servizio consente di creare risorse.
Imposta l'ID progetto dell'applicazione nella variabile di ambiente Terraform corrispondente:
export TF_VAR_app_project_id="${APP_PROJECT_ID}"
Deployment del gestore della scalabilità automatica
In questa sezione esegui il deployment dei componenti che costituiscono Autoscaler utilizzando moduli Terraform preconfigurati. I file Terraform che definiscono questi moduli si trovano nelle seguenti directory:
Directory | Contenuti della directory |
---|---|
terraform/ |
Configurazione di primo livello, che include tutte le opzioni di deployment e i moduli riutilizzabili. |
terraform/cloud-functions/per-project/ |
Istruzioni per l'opzione di deployment per progetto. |
terraform/modules/autoscaler-functions/ |
Configurazione delle funzioni Cloud Run di Polling e Scaler e degli argomenti Pub/Sub |
terraform/modules/scheduler/ |
Configurazione di Cloud Scheduler per attivare l'polling. |
terraform/modules/spanner/ |
Configurazione del database Spanner |
terraform/cloud-functions/centralized/ |
Istruzioni per l'opzione di deployment centralizzato. |
In Cloud Shell, imposta l'ID progetto, la regione e la zona nelle variabili di ambiente Terraform corrispondenti:
export TF_VAR_project_id="${PROJECT_ID}" export TF_VAR_region="${REGION}" export TF_VAR_zone="${ZONE}"
In questo passaggio, configuri un'istanza esistente da monitorare dal gestore della scalabilità automatica o crei e configuri una nuova istanza.
Se hai già un'istanza Spanner, imposta il nome della tua istanza nella seguente variabile:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Se vuoi creare una nuova istanza Spanner per testare Autoscaler, imposta la seguente variabile:
export TF_VAR_terraform_spanner=true
L'istanza Spanner creata da Terraform è denominata
autoscale-test
.Per saperne di più su come configurare Terraform per gestire l'istanza Spanner, consulta Importare le istanze Spanner.
Cambia la directory di lavoro nella directory per progetto di Terraform:
cd "${AUTOSCALER_DIR}" terraform init
Questo comando inizializza anche la directory per progetto di Terraform.
Importa l'applicazione App Engine esistente nello stato di Terraform:
terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
Crea l'infrastruttura del gestore della scalabilità automatica:
terraform apply -parallelism=2
Viene visualizzato il seguente messaggio che ti chiede di verificare che l'elenco delle risorse da creare con Terraform sia corretto:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Dopo aver verificato le risorse, digita
yes
quando richiesto.Quando esegui questo comando in Cloud Shell, potresti visualizzare il seguente messaggio di errore:
"Error: cannot assign requested address"
Questo errore è un problema noto nel provider Google di Terraform. In questo caso, riprova con il seguente comando:
terraform apply -parallelism=1.
Importazione delle istanze Spanner
Se hai istanze Spanner esistenti che vuoi importare per consentirne la gestione da parte di Terraform, segui le istruzioni riportate in questa sezione. In caso contrario, vai a Configurare il gestore della scalabilità automatica.
In Cloud Shell, elenca le istanze Spanner:
gcloud spanner instances list
Imposta la seguente variabile con il nome dell'istanza di cui vuoi eseguire il ridimensionamento automatico:
SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
Crea un file di configurazione Terraform con una risorsa
google_spanner_instance
vuota:echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
Importa l'istanza Spanner nello stato di Terraform:
terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
Al termine dell'importazione, aggiorna il file di configurazione Terraform per l'istanza con l'attributo istanza effettivo:
terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \ | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \ > "${SPANNER_INSTANCE_NAME}.tf"
Se hai altre istanze Spanner da importare, ripeti la procedura di importazione.
Configurazione dell'autoscaler
Dopo aver eseguito il deployment di Autoscaler, devi configurarne i parametri.
Nella console Google Cloud , vai alla pagina Cloud Scheduler.
Seleziona la casella di controllo accanto al job
poll-main-instance-metrics
creato dal deployment di Autoscaler.Fai clic su Modifica.
Modifica i parametri per lo strumento di scalabilità automatica mostrati nel campo del payload.
Di seguito è riportato un esempio di payload:
[ { "projectId": "my-spanner-project", "instanceId": "spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "NODES", "minSize": 1, "maxSize": 3 },{ "projectId": "different-project", "instanceId": "another-spanner1", "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling", "units": "PROCESSING_UNITS", "minSize": 500, "maxSize": 3000, "scalingMethod": "DIRECT" } ]
Il payload è definito utilizzando un array JSON. Ogni elemento dell'array rappresenta un'istanza Spanner che condivide la stessa pianificazione dei job di Autoscaler.
Per ulteriori dettagli sui parametri e sui relativi valori predefiniti, consulta la sezione
README
per il componente Poller.Per salvare le modifiche, fai clic su Aggiorna.
A questo punto, lo strumento di scalabilità automatica è configurato e pronto per iniziare a monitorare e scalare le istanze nella successiva esecuzione pianificata del job.
Se il payload JSON contiene errori di sintassi, puoi esaminarli nella consoleGoogle Cloud nella pagina Esplora log come voci di log della funzione
tf-poller-function
.Di seguito è riportato un esempio di errore che potresti visualizzare:
SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse
Per evitare errori di sintassi, utilizza un editor che possa riformattare e convalidare il JSON.
Monitoraggio del gestore della scalabilità automatica
In questo passaggio, configuri il monitoraggio delle funzioni Cloud Run di Polling e Scaler.
Nella console Google Cloud , apri la pagina Esplora log.
Fai clic su Anteprima query e inserisci il seguente filtro in Query Builder:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Fai clic su Esegui query.
In Risultati della query, puoi vedere tutti i messaggi delle funzioni di Autoscaler. Poiché il poller viene eseguito solo ogni 2 minuti, potrebbe essere necessario eseguire nuovamente la query per ricevere i messaggi di log.
Per visualizzare solo i messaggi delle funzioni Cloud Run di Scaler, fai clic sulla casella Anteprima query e sostituisci il filtro precedente nella casella di testo Query Builder con quanto segue:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Fai clic su Esegui query.
In Risultati della query, a causa del filtro applicato al payload del testo, vengono visualizzati solo i messaggi della funzione Scaler relativi a suggerimenti e decisioni di scalabilità.
Utilizzando la query di filtro o filtri simili, puoi creare metriche basate su log. Queste metriche sono utili per funzioni come la registrazione della frequenza degli eventi di scalabilità automatica o nei grafici e nei criteri di avviso di Cloud Monitoring.
Test del gestore della scalabilità automatica
In questa sezione, verifichi il funzionamento di Autoscaler modificando la dimensione minima dell'istanza e monitorando i log.
Quando esegui il deployment di Autoscaler con un database di test, Autoscaler è configurato per utilizzare
NODES
come unità di misura della capacità di calcolo. Puoi verificare se lo strumento è in funzione modificando l'impostazione della dimensione minima (minSize
) su 2. Se lo strumento funziona come previsto, l'istanza Spanner viene scalata fino a 2 nodi. Se hai utilizzato un database esistente per questo tutorial, potresti visualizzare valori diversi.
Nella console Google Cloud , vai alla pagina Cloud Scheduler.
Seleziona la casella di controllo accanto al job
poll-main-instance-metrics
creato dal deployment di Autoscaler.Fai clic su Modifica.
Nel campo Payload del job, modifica il valore
minSize
da1
a2
:"minSize": 2
Per salvare le modifiche, fai clic su Aggiorna.
Vai alla pagina Esplora log.
Fai clic su Anteprima query e inserisci il seguente filtro in Query Builder:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Fai clic su Esegui query.
Fai clic su Vai a Ora finché non visualizzi il seguente messaggio di log:
Scaling spanner instance to 2 NODES
Per verificare che Spanner sia stato scalato a 2 nodi, nella console Google Cloud , vai alla pagina della console Spanner.
Fai clic sull'istanza
autoscale-test
.Nella sezione Panoramica, verifica che il numero di nodi sia ora 2. Questo rapido test mostra un evento di scalabilità verso l'esterno modificando i parametri di Autoscaler. Puoi eseguire un test di carico con uno strumento come YCSB per simulare l'attivazione di un evento di ridimensionamento da parte del gestore della scalabilità automatica in base all'utilizzo.
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Scopri di più sull'architettura di Autoscaler.
- Scopri come distribuire Autoscaler in modalità distribuita.
- Scopri di più sulle soglie consigliate di Spanner.
- Scopri di più sulle metriche di utilizzo della CPU e sulle metriche di latenza di Spanner.
- Scopri di più sulle best practice per la progettazione dello schema di Spanner.
- Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.