Esegui il deployment di uno strumento del gestore della scalabilità automatica distribuito per Spanner


Questo tutorial mostra come configurare l'infrastruttura dello strumento del gestore della scalabilità automatica per Spanner usando una topologia di deployment distribuita. Nella presentata in questo tutorial, tutti i componenti Il gestore della scalabilità automatica si trova in un unico progetto, ad eccezione di Cloud Scheduler, e la funzione corrispondente.

Questo tutorial è destinato a IT, Operations e Site Reliability Engineering team che vogliono ridurre i costi operativi e ottimizzare il costo i propri deployment Spanner. Questo documento fa parte di una serie:

La topologia di deployment distribuito riunisce i seguenti vantaggi caratteristiche dei deployment centralizzati e per progetto:

  • Team che possiedono le istanze Spanner, chiamate applicazione possono gestire i parametri di configurazione del gestore della scalabilità automatica con i job Cloud Scheduler di loro proprietà.
  • Al di fuori dei parametri di configurazione, un team centrale gestisce il resto dell'infrastruttura del gestore della scalabilità automatica, riducendo al minimo l'overhead di gestione.

Architettura

Il seguente diagramma mostra l'architettura di Autoscaler in una topologia di deployment distribuita:

Topologia di implementazione distribuita.

Per una spiegazione dei componenti del gestore della scalabilità automatica e di ciascuno dei nel flusso degli eventi, consulta Scalabilità automatica di Spanner.

Funzione di inoltro

Cloud Scheduler può pubblicare messaggi solo in argomenti nello stesso progetto. Per la topologia distribuita, questo tutorial introduce una componente intermedio chiamato funzione di inoltro.

La funzione Forwarder prende i messaggi pubblicati su Pub/Sub da Cloud Scheduler, controlla la loro sintassi JSON e li inoltra all'argomento Pub/Sub Poller. L'argomento può appartenere a un progetto separato in Cloud Scheduler.

Il seguente diagramma mostra i componenti utilizzati per il meccanismo di inoltro:

Meccanismo di inoltro.

Come mostrato nel diagramma precedente, le istanze Spanner si trovano nei progetti denominate Application 1 e Application 2:

  1. Cloud Scheduler è lo stesso progetto di Spanner di Compute Engine.
  2. (2a) Cloud Scheduler pubblica i suoi messaggi nell'argomento Forwarder nei progetti Application 1 e Application 2.

    (2b) La funzione di inoltro legge i messaggi Argomento forwarding.

    (2c) La funzione di inoltro inoltra i messaggi ai sondaggi che si trova nel progetto del gestore della scalabilità automatica.

  3. La funzione Sondaggio legge i messaggi dall'argomento e la continua, come descritto in Scalabilità automatica di Spanner.

Obiettivi

  • Esegui il deployment del gestore della scalabilità automatica utilizzando un modello di deployment distribuito.
  • 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 basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Se segui le istruzioni di questo tutorial, i costi associati il funzionamento dei componenti del gestore della scalabilità automatica deve essere zero o vicino allo zero. Tuttavia, questa stima non include i costi per le istanze Spanner. Per un esempio di come calcolare i costi delle istanze Spanner consulta la sezione 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 una topologia di deployment distribuita, oltre a un progetto del gestore della scalabilità automatica, e configurare un secondo progetto, che in questo tutorial è chiamato Progetto applicazione. Il progetto applicazione contiene le risorse dell'applicazione, incluso Spanner. In questo tutorial, configurerai e abiliterai la fatturazione e le API per questi due progetti separatamente.

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

    Activate Cloud Shell

  2. In Cloud Shell, clona il repository seguente:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Esporta le variabili per le directory di lavoro:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/autoscaler-project"
    export APP_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/app-project"
    

Preparazione del progetto del gestore della scalabilità automatica

In questa sezione, preparerai il deployment del progetto, che contiene dell'infrastruttura centralizzata del gestore della scalabilità automatica, ad eccezione di Cloud Scheduler.

  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, and Cloud Build APIs.

    Enable the APIs

  4. In Cloud Shell, imposta le variabili di ambiente con l'ID Progetto del gestore della scalabilità automatica:

    export AUTO_SCALER_PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${AUTO_SCALER_PROJECT_ID}"
    
  5. Impostare la regione e la zona e la località di App Engine (per Firestore) per l'infrastruttura del gestore della scalabilità automatica:

     export AUTO_SCALER_REGION=us-central1
     export AUTO_SCALER_ZONE=us-central1-c
     export AUTO_SCALER_APP_ENGINE_LOCATION=us-central
    
  6. Crea un account di servizio:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    

    Terraform utilizza questo account per creare tutte le risorse nella tua infrastruttura.

  7. Assegna il ruolo di proprietario del progetto all'account di servizio:

     gcloud projects add-iam-policy-binding "${AUTO_SCALER_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crea un file chiave per l'account di servizio:

     gcloud iam service-accounts keys create \
        --iam-account "terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Se il progetto non dispone di un Firestore un'istanza, creane una:

     gcloud app create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
     gcloud alpha firestore databases create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    

Deployment del gestore della scalabilità automatica

In questa sezione, eseguirai il deployment dei componenti che compongono il gestore della scalabilità automatica utilizzando File Terraform nelle directory seguenti:

Directory Contenuti della directory
terraform/ Configurazione di primo livello, che include tutte le opzioni di deployment e i moduli riutilizzabili.
terraform/cloud-functions/distributed/autoscaler-project/ Configurazione per il progetto in cui si trova il gestore della scalabilità automatica. Delegati al modulo del gestore della scalabilità automatica.
terraform/modules/autoscaler-functions Configurazione delle funzioni Cloud Run di Poller e Scaler e argomenti Pub/Sub.
  1. In Cloud Shell, imposta l'ID progetto, la regione, la zona e la località di App Engine variabili di ambiente Terraform corrispondenti:

    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Passa alla directory del progetto di scalabilità di Terraform e inizializzalo:

    cd "${AUTOSCALER_DIR}"
    terraform init
    
  3. Crea l'infrastruttura del gestore della scalabilità automatica:

    terraform apply -parallelism=2
    

    Dopo aver verificato le risorse, digita yes quando richiesto.

    Quando esegui questo comando in Cloud Shell, potresti riscontrare 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
    

Preparazione del progetto dell'applicazione

In questa sezione, nel progetto che contiene lo Spanner alle istanze VM, prepari il deployment di Cloud Scheduler Argomento e funzione del forwarding.

  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, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.

    Enable the APIs

  4. In Cloud Shell, imposta le variabili di ambiente con l'ID del progetto dell'applicazione:

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    gcloud config set project "${APP_PROJECT_ID}"
    
  5. Imposta la regione e la zona e la località App Engine per il progetto dell'applicazione:

    export APP_REGION=us-central1
    export APP_ZONE=us-central1-c
    export APP_APP_ENGINE_LOCATION=us-central
    
  6. Crea un account di servizio che Terraform userà per creare 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 "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Crea un file chiave per l'account di servizio:

     gcloud iam service-accounts keys create \
        --iam-account "terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com"  "${APP_DIR}/key.json"
    
  9. Crea un'applicazione per abilitare Cloud Scheduler:

    gcloud app create --region="${APP_APP_ENGINE_LOCATION}"
    

    Non è necessario creare un database Firestore perché viene archiviato nel progetto del gestore della scalabilità automatica.

Esegui il deployment dell'infrastruttura del progetto dell'applicazione

I componenti Terraform che compongono il progetto dell'applicazione sono i seguenti: directory:

In questa sezione utilizzerai i file Terraform per eseguire il deployment dei componenti che compongono il progetto dell'applicazione.

  1. In Cloud Shell, imposta l'ID progetto, la regione, la zona Località App Engine nell'ambiente Terraform corrispondente variabili:

      export TF_VAR_project_id="${APP_PROJECT_ID}"
      export TF_VAR_region="${APP_REGION}"
      export TF_VAR_zone="${APP_ZONE}"
      export TF_VAR_location="${APP_APP_ENGINE_LOCATION}"
    
  2. Imposta l'ID progetto per la posizione in cui è archiviato lo stato del gestore della scalabilità automatica:

    export TF_VAR_state_project_id="${AUTO_SCALER_PROJECT_ID}"
    

    Lo stato del gestore della scalabilità automatica include i timestamp in cui sono stati attivati gli eventi di scalabilità per ogni istanza.

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

    Se non vuoi creare una nuova istanza Spanner perché ne hai già una da monitorare con Autoscaler, imposta il nome dell'istanza nella seguente variabile:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

    Scopri di più su come impostare Terraform per gestire il tuoSpanner consulta Importazione delle istanze Spanner

  4. Cambia la directory nella directory del progetto dell'app Terraform e inizializzalo:

    cd "${APP_DIR}"
    terraform init
    
  5. Crea l'infrastruttura nel progetto dell'applicazione:

    terraform import module.scheduler.google_app_engine_application.app "${APP_PROJECT_ID}"
    terraform apply -parallelism=2
    

    Verifica che l'elenco di risorse che Terraform crei sia corretto, quindi digita yes quando richiesto.

    Quando esegui questo comando in Cloud Shell, potresti riscontrare seguente messaggio di errore: "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
    

Autorizza le funzioni Cloud Run del forwarding a pubblicare nell'argomento Poller

  1. In Cloud Shell, torna al gestore della scalabilità automatica Terraform del progetto e assicurati che le variabili Terraform siano impostate correttamente:

    cd "${AUTOSCALER_DIR}"
    
    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Imposta le variabili Terraform per gli account di servizio del forwarding. Aggiorna e aggiungi gli account di servizio come richiesto:

     export TF_VAR_forwarder_sa_emails='["serviceAccount:forwarder-sa@'"${APP_PROJECT_ID}"'.iam.gserviceaccount.com"]'
      terraform apply -parallelism=2
    

    Verifica che l'elenco di risorse che Terraform crei sia corretto, quindi 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 Terraform per Google. In questo caso, riprova con seguente comando:

    terraform apply -parallelism=1.
    

Verifica del deployment in corso...

Quando l'infrastruttura per il gestore della scalabilità automatica è pronta, puoi configurarne i parametri. Per saperne di più, consulta Configurare il gestore della scalabilità automatica.

Poiché in questo tutorial crei un deployment distribuito, i log hanno seguenti proprietà:

  • I log delle funzioni di Polling e Scaler vengono visualizzati in Esplora log per il progetto Autoscaler.
  • I log relativi agli errori di sintassi nella configurazione JSON del payload di Cloud Scheduler vengono visualizzati in Esplora log per ogni progetto di applicazione. Ciò consente al team responsabile di una Risolvere i problemi di configurazione dell'istanza Spanner in modo indipendente.

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