Questo tutorial mostra come configurare l'infrastruttura dello strumento del gestore della scalabilità automatica per Cloud Spanner. Questo tutorial illustra due modi per configurare l'infrastruttura in base ai tuoi requisiti:
- Una topologia di deployment per progetto. Consigliamo questa topologia ai team indipendenti che vogliono gestire la propria configurazione e la propria infrastruttura del gestore della scalabilità automatica. Una topologia di deployment per progetto è anche un buon punto di partenza per testare le funzionalità del gestore della scalabilità automatica.
- Una topologia di deployment centralizzata. Consigliamo questa topologia ai team che gestiscono la configurazione e l'infrastruttura di una o più istanze Spanner mantenendo centralmente i componenti e la configurazione per il gestore della scalabilità automatica. Nella topologia centralizzata, oltre a un progetto del gestore della scalabilità automatica, devi configurare un secondo progetto, che in questo tutorial è denominato Progetto di applicazione. Il progetto di applicazione contiene le risorse dell'applicazione, tra cui Cloud Spanner. In questo tutorial puoi configurare e abilitare separatamente la fatturazione e le API per questi due progetti.
Il presente documento fa parte di una serie:
- Scalabilità automatica di Cloud Spanner
- Esegui il deployment di uno strumento di scalabilità automatica centralizzato o in base al progetto per Cloud Spanner (questo documento)
- Esegui il deployment di uno strumento di scalabilità automatica distribuito per Cloud Spanner
Questa serie è rivolta ai team IT, Operations e Site Reliability Engineering (SRE) che vogliono ridurre l'overhead operativo e ottimizzare i costi dei deployment di Cloud Spanner.
Obiettivi
- Esegui il deployment del gestore della scalabilità automatica utilizzando una topologia di deployment centralizzata o per progetto.
- Importa le istanze Cloud Spanner esistenti nello stato di Terraform.
- Configura il gestore della scalabilità automatica.
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 del gestore della scalabilità automatica quando implementi questo tutorial devono essere pari a zero o prossimi a zero. Tuttavia, questa stima non include i costi per le istanze Cloud Spanner. Per un esempio di come calcolare i costi delle istanze di Cloud Spanner, consulta Scalabilità automatica di Cloud Spanner.
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
-
Nella console Google Cloud, attiva 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 del gestore della scalabilità automatica
In questa sezione preparerai il progetto del gestore della scalabilità automatica per il deployment.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
Abilita le API Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Cloud Spanner, Pub/Sub, Cloud Functions, Cloud Build, and Cloud Scheduler.
In Cloud Shell, imposta le variabili di ambiente con l'ID del progetto Autoscaler:
export PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${PROJECT_ID}"
Imposta la regione e la zona e la località di App Engine (per Cloud Scheduler e Firestore per l'infrastruttura del gestore della scalabilità automatica:
export REGION=us-central1 export ZONE=us-central1-c export APP_ENGINE_LOCATION=us-central
Crea un account di servizio per Terraform da utilizzare per creare tutte le risorse nella 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 delle chiavi 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 stai eseguendo il deployment del gestore della scalabilità automatica in modalità per progetto, puoi passare a Deployment del gestore della scalabilità automatica.
Nella topologia di deployment centralizzata, tutti i componenti del gestore della scalabilità automatica risiedono nello stesso progetto. Le istanze Spanner possono essere posizionate in progetti diversi.
In questa sezione configurerai il progetto dell'applicazione in cui si trova l'istanza di Spanner. L'istanza Spanner gestisce 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 del gestore della scalabilità automatica.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
Attiva l'API Spanner .
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.
Concedi all'account di servizio
terraformer
a cui hai creato il ruolo di proprietario (roles/owner
) nel progetto di 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 gli 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 eseguirai il deployment dei componenti che costituiscono il gestore della scalabilità automatica 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 ciascuna delle 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 di argomenti Cloud Functions per pollice e scaler e argomenti Pub/Sub |
terraform/modules/scheduler/ |
Configurazione di Cloud Scheduler per l'attivazione del polling. |
terraform/modules/spanner/ |
Configurazione del database Cloud 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 devi configurare un'istanza esistente affinché il gestore della scalabilità automatica possa monitorare o creare e configurare una nuova istanza.
Se hai già un'istanza Spanner, imposta il nome dell'istanza nella variabile seguente:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Se vuoi creare una nuova istanza Spanner per testare il gestore della scalabilità automatica, 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 di Spanner, consulta Importazione delle istanze Spanner.
Cambia la directory di lavoro nella directory Terraform per progetto:
cd "${AUTOSCALER_DIR}" terraform init
Questo comando inizializza anche la directory Terraform per progetto.
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, in cui ti viene chiesto di verificare che l'elenco di risorse da creare per 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 del provider Google Terraform. In questo caso, riprova utilizzando il seguente comando:
terraform apply -parallelism=1.
Importazione delle istanze Spanner
Se hai istanze Spanner esistenti che vuoi importare per consentire a Terraform di gestirle, segui le istruzioni in questa sezione. In caso contrario, vai a Configurazione del gestore della scalabilità automatica.
In Cloud Shell, elenca le tue istanze Spanner:
gcloud spanner instances list
Imposta la variabile seguente con il nome istanza per cui vuoi scalare automaticamente:
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 il processo di importazione.
Configurazione del gestore della scalabilità automatica
Dopo aver eseguito il deployment del gestore della scalabilità automatica, 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 del gestore della scalabilità automatica.Fai clic su Modifica.
Modifica i parametri del gestore della scalabilità automatica mostrato 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 viene definito utilizzando un array JSON. Ogni elemento dell'array rappresenta un'istanza di Spanner che condivide la stessa pianificazione dei job del gestore della scalabilità automatica.
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.
Il gestore della scalabilità automatica è ora configurato ed è pronto per iniziare a monitorare e scalare le istanze nella successiva esecuzione pianificata del job.
Se sono presenti errori di sintassi nel payload JSON, puoi esaminarli nella console Google Cloud alla pagina Esplora log come voci di log della funzione
tf-poller-function
.Di seguito è riportato un esempio di errore che potresti vedere:
SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse
Per evitare errori di sintassi, utilizza un editor in grado di riformattare e convalidare il codice JSON.
Monitoraggio del gestore della scalabilità automatica
In questo passaggio configurerai il monitoraggio sulle funzioni Cloud Functions per polling e scaler.
Nella console Google Cloud, apri la pagina Esplora log.
Fai clic su Anteprima query e inserisci il seguente filtro in Strumento per la creazione di query:
resource.type="cloud_function" resource.labels.function_name=~"tf-.*-function"
Fai clic su Esegui query.
In Risultati query, puoi visualizzare tutti i messaggi delle funzioni del gestore della scalabilità automatica. 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 Functions dello scaler, fai clic sulla casella Anteprima query e sostituisci il filtro precedente nella casella di testo Query Builder con il seguente:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Fai clic su Esegui query.
In Risultati delle query, a causa del filtro applicato al payload di testo, vedrai solo i messaggi della funzione di scaler relativi a suggerimenti e decisioni di scalabilità.
Utilizzando una 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 verificherai il funzionamento del gestore della scalabilità automatica modificando la dimensione minima dell'istanza e monitorando i log.
Quando esegui il deployment del gestore della scalabilità automatica con un database di test, il gestore della scalabilità automatica viene configurato in modo da utilizzare NODES
come unità per la capacità di calcolo. Puoi verificare se lo strumento funziona modificando l'impostazione della dimensione minima (minSize
) su 2. Se lo strumento viene eseguito come previsto, l'istanza di Cloud Spanner fa lo scale out a 2 nodi. Se hai utilizzato un database esistente per questo tutorial, potresti vedere 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 del gestore della scalabilità automatica.Fai clic su Modifica.
Nel campo Payload 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 Strumento per la creazione di query:
resource.type="cloud_function" resource.labels.function_name="tf-scaler-function"
Fai clic su Esegui query.
Fai clic su Vai a adesso finché non viene visualizzato il seguente messaggio di log:
Scaling spanner instance to 2 NODES
Per verificare che Cloud Spanner abbia fatto lo scale out a 2 nodi, nella console Google Cloud vai alla pagina della console di Cloud Spanner.
Fai clic sull'istanza
autoscale-test
.Nella panoramica, verifica che il numero di nodi sia ora 2. Questo test rapido dimostra un evento di scale out modificando i parametri del gestore della scalabilità automatica. Puoi eseguire un test di carico con uno strumento come YCSB per simulare l'attivazione di un evento di scalabilità in base all'utilizzo da parte del gestore della scalabilità automatica.
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
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Scopri di più sull'architettura del gestore della scalabilità automatica.
- Scopri come eseguire il deployment del gestore della scalabilità automatica in modalità distribuita.
- Scopri di più sulle soglie consigliate di Cloud Spanner.
- Scopri di più sulle metriche di utilizzo della CPU e sulle metriche di latenza di Cloud Spanner.
- Scopri di più sulle best practice per la progettazione dello schema di Cloud Spanner.
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Cloud Architecture Center.