Esegui il deployment di uno strumento di gestione della scalabilità automatica per progetto o centralizzato per Spanner


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:

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 nuovi utenti di Google Cloud potrebbero avere diritto a una prova gratuita.

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. In Cloud Shell, clona il seguente repository GitHub:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. 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.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. 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.

    Enable the APIs

  4. 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}"
    
  5. 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
    
  6. 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"
    
  7. 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
    
  8. 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"
    
  9. 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.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the Spanner API.

    Enable the API

  4. 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.

  5. Assegna all'account di servizio terraformer che hai creato il ruolo di proprietario roles/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.

  6. 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.
  1. 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}"
    
  2. 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.

  3. 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.

  4. Importa l'applicazione App Engine esistente nello stato di Terraform:

    terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
    
  5. 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.

  1. In Cloud Shell, elenca le istanze Spanner:

    gcloud spanner instances list
    
  2. Imposta la seguente variabile con il nome dell'istanza di cui vuoi eseguire il ridimensionamento automatico:

    SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
    
  3. 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"
    
  4. Importa l'istanza Spanner nello stato di Terraform:

    terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
    
  5. 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.

  1. Nella console Google Cloud , vai alla pagina Cloud Scheduler.

    Vai a Cloud Scheduler

  2. Seleziona la casella di controllo accanto al job poll-main-instance-metrics creato dal deployment di Autoscaler.

  3. Fai clic su Modifica.

  4. 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.

  5. 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.

    Vai a Esplora log

    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.

  1. Nella console Google Cloud , apri la pagina Esplora log.

    Vai a Esplora log

  2. Fai clic su Anteprima query e inserisci il seguente filtro in Query Builder:

    resource.type="cloud_function"
    resource.labels.function_name=~"tf-.*-function"
    
  3. 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.

  4. 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"
    
  5. 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.

  1. Nella console Google Cloud , vai alla pagina Cloud Scheduler.

    Vai a Cloud Scheduler

  2. Seleziona la casella di controllo accanto al job poll-main-instance-metrics creato dal deployment di Autoscaler.

  3. Fai clic su Modifica.

  4. Nel campo Payload del job, modifica il valore minSize da 1 a 2:

    "minSize": 2
    
  5. Per salvare le modifiche, fai clic su Aggiorna.

  6. Vai alla pagina Esplora log.

    Apri Esplora log

  7. Fai clic su Anteprima query e inserisci il seguente filtro in Query Builder:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  8. Fai clic su Esegui query.

  9. Fai clic su Vai a Ora finché non visualizzi il seguente messaggio di log:

    Scaling spanner instance to 2 NODES

  10. Per verificare che Spanner sia stato scalato a 2 nodi, nella console Google Cloud , vai alla pagina della console Spanner.

    Vai a Spanner

  11. 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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi