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 del gestore della scalabilità automatica per Spanner. Questo tutorial illustra due modi per configurare l'infrastruttura in base alle tue esigenze:

  • Una topologia di deployment per progetto. Consigliamo questa topologia per i team indipendenti che vogliono gestire la propria configurazione e la propria 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 dalla topologia centralizzata, oltre a un progetto del gestore della scalabilità automatica, e configurare un secondo progetto, che in questo tutorial è chiamato 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 è destinata a IT, Operations e Site Reliability Engineering (SRE) team che vogliono ridurre i costi operativi e ottimizzare i costi deployment Spanner.

Obiettivi

  • Esegui il deployment del gestore della scalabilità automatica utilizzando una topologia di deployment per singolo progetto o centralizzata.
  • Importa le istanze Spanner esistenti nello stato di Terraform.
  • Configurare 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 nuovi utenti di Google Cloud potrebbero essere idonei per 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 delle istanze Spanner. Ad esempio, calcolare i costi delle istanze Spanner, vedi 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 del gestore della scalabilità automatica

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 progetto Autoscaler:

    export PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${PROJECT_ID}"
    
  5. Impostare 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 che Terraform può usare 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. Creare un account di servizio file chiave:

    gcloud iam service-accounts keys create \
        --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Se il progetto non ha un Firestore un'istanza, 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 centralizzato, tutti i componenti del gestore della scalabilità automatica risiedono nello stesso progetto. Le istanze Spanner possono essere situate in progetti diversi.

In questa sezione, configuri il progetto dell'applicazione in cui risiede l'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 a quest'ultimo 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 compongono 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 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 Poller e Scaler e argomenti Pub/Sub
terraform/modules/scheduler/ Configurazione di Cloud Scheduler per l'attivazione del 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 configurerai un'istanza esistente che il gestore della scalabilità automatica monitora, o creare e configurare 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 i test 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 Spanner, consulta Importare le istanze Spanner.

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

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Questo comando inizializza anche la directory Terraform per ogni 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 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 riscontrare messaggio di errore seguente:

    "Error: cannot assign requested address"

    Questo errore è un problema noto nel provider Google di Terraform. In questo caso, riprova con 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. Altrimenti, vai a Configurazione del gestore della scalabilità automatica.

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

    gcloud spanner instances list
    
  2. Imposta la seguente variabile con il nome dell'istanza per cui vuoi applicare la scalabilità automatica:

    SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
    
  3. Crea un file di configurazione Terraform vuoto google_spanner_instance risorsa:

    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 comando 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 di Autoscaler.

  3. Fai clic su Modifica.

  4. Modifica i parametri per il gestore della 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 informazioni sui parametri e sui loro valori predefiniti, consulta README per il componente Sondaggio.

  5. Per salvare le modifiche, fai clic su Aggiorna.

    Il gestore della scalabilità automatica è ora configurato ed è pronto per iniziare a monitorare e scalare di istanze VM nella successiva esecuzione pianificata del job.

    Se sono presenti errori di sintassi nel tuo payload JSON, puoi esaminarli nella Console Google Cloud nella pagina Esplora log come voci di log della tf-poller-function personalizzata.

    Vai a Esplora log

    Di seguito è riportato un esempio di errore che potresti riscontrare:

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

Monitoraggio del gestore della scalabilità automatica

In questo passaggio configurerai il monitoraggio sulle funzioni Cloud Run di Poller 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 delle query puoi vedere tutti i messaggi del gestore della scalabilità automatica funzioni. Poiché l'poller funziona solo ogni 2 minuti, potrebbe essere necessario eseguire 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 delle query, a causa del filtro applicato al testo vengono visualizzati solo i messaggi della funzione Scaler relativi suggerimenti e decisioni sulla scalabilità.

    Utilizzo di query di filtro o filtri simili che puoi creare metriche basate su log. Queste metriche sono utili per funzioni come la registrazione della frequenza 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 il monitoraggio dei 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 funziona modificando l'impostazione della dimensione minima (minSize) a 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, vai alla pagina della console Spanner nella console Google Cloud.

    Vai a Spanner

  11. Fai clic sull'istanza autoscale-test.

    Nella panoramica, verifica che il numero di nodi sia ora 2. Questo rapido test dimostra un evento di scale out modificando il gestore della scalabilità automatica parametri. 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