Esegui il deployment di uno strumento di scalabilità automatica centralizzato o per singolo progetto per Cloud Spanner


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:

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 vengono utilizzati 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 possono essere idonei a una prova senza costi aggiuntivi.

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

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva 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 del gestore della scalabilità automatica

In questa sezione preparerai il progetto del gestore della scalabilità automatica per il deployment.

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

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

    Abilita le API

  4. 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}"
    
  5. 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
    
  6. 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"
    
  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 delle chiavi 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 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.

  1. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  3. Attiva l'API Spanner .

    Abilita l'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. 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.

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

  3. Cambia la directory di lavoro nella directory Terraform per progetto:

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Questo comando inizializza anche la directory Terraform per progetto.

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

  1. In Cloud Shell, elenca le tue istanze Spanner:

    gcloud spanner instances list
    
  2. Imposta la variabile seguente con il nome istanza per cui vuoi scalare automaticamente:

    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 il processo di importazione.

Configurazione del gestore della scalabilità automatica

Dopo aver eseguito il deployment del gestore della scalabilità automatica, 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 del gestore della scalabilità automatica.

  3. Fai clic su Modifica.

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

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

    Vai a Esplora log

    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.

  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 Strumento per la creazione di query:

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

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

  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 del gestore della scalabilità automatica.

  3. Fai clic su Modifica.

  4. Nel campo Payload 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 Strumento per la creazione di query:

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

  9. Fai clic su Vai a adesso finché non viene visualizzato il seguente messaggio di log:

    Scaling spanner instance to 2 NODES

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

    Vai a Cloud Spanner

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

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi