Scalabilità automatica dei pool di worker in base alle metriche di Prometheus

Questo tutorial descrive come scalare automaticamente i pool di worker Cloud Run in base alle metriche di Prometheus utilizzando la scalabilità automatica delle metriche esterne di Cloud Run (CREMA).

Il servizio di scalabilità automatica CREMA esegue un calcolo basato sul rapporto utilizzando i dati di Prometheus. Il servizio di scalabilità automatica regola dinamicamente il conteggio delle istanze per garantire che il pool di worker disponga della quantità di risorse corretta per il carico di lavoro attuale. CREMA calcola l'utilizzo della CPU del pool di worker in un periodo di tempo specifico e lo confronta con la soglia configurata per regolare le istanze.

Obiettivi

In questo tutorial, imparerai a:

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 Google Cloud utenti potrebbero avere diritto a una prova senza costi.

Prima di iniziare

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Abilita le API Cloud Run, Parameter Manager, Artifact Registry, Cloud Build e Cloud Monitoring.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilita le API

  4. Installa e inizializza gcloud CLI.
  5. Aggiorna i componenti:
    gcloud components update
  6. Imposta le seguenti variabili di configurazione per CREMA utilizzate in questo tutorial:
    export PROJECT_ID=PROJECT_ID
    export REGION=us-central1
    export CREMA_SA_NAME=crema-service-account
    export CONSUMER_SA_NAME=consumer-service-account
    export CONSUMER_WORKER_POOL_NAME=worker-pool-consumer
    export CREMA_SERVICE_NAME=my-crema-service
    Sostituisci PROJECT_ID con l'ID del tuo Google Cloud progetto.
  7. Imposta l'ID progetto eseguendo il comando seguente:
    gcloud config set project $PROJECT_ID
  8. Ti vengono addebitati costi per il servizio di scalabilità di Cloud Run in base alla frequenza con cui attivi la scalabilità. Per ulteriori informazioni, stima i costi con il calcolatore prezzi.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea account di servizio personalizzati

Questo tutorial richiede i seguenti due account di servizio con le autorizzazioni minime necessarie per utilizzare le risorse di cui è stato eseguito il provisioning:

  • Account di servizio consumer: identità per il pool di worker che esegue un carico di lavoro in background. Esegui il comando seguente per creare l'account di servizio consumer:

    gcloud iam service-accounts create $CONSUMER_SA_NAME \
      --display-name="Consumer service account"
    
  • Account di servizio CREMA: identità per il gestore della scalabilità automatica. Esegui il comando seguente per creare l'account di servizio CREMA:

    gcloud iam service-accounts create $CREMA_SA_NAME \
      --display-name="CREMA service account"
    

Concedi autorizzazioni aggiuntive agli account di servizio personalizzati

Per scalare il pool di worker, concedi le seguenti autorizzazioni agli account di servizio personalizzati:

  1. Concedi all'account di servizio CREMA l'autorizzazione per leggere da Parameter Manager:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID." \
      --role="roles/parametermanager.parameterViewer"
    
  2. Concedi all'account di servizio CREMA l'autorizzazione per scalare il pool di worker:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID." \
      --role="roles/run.developer"
    
  3. Concedi all'account di servizio CREMA il ruolo Utente account di servizio:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID." \
      --role="roles/iam.serviceAccountUser"
    
  4. Concedi all'account di servizio CREMA l'autorizzazione per visualizzare le metriche:

     gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID." \
       --role="roles/monitoring.viewer"
    
  5. Concedi all'account di servizio CREMA l'autorizzazione per scrivere le metriche:

     gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID." \
       --role="roles/monitoring.metricWriter"
    

Esegui il deployment di un pool di worker Cloud Run

Esegui il deployment di un pool di worker con 0 istanze per fare lo scale up di CREMA:

gcloud run worker-pools deploy $CONSUMER_WORKER_POOL_NAME \
  --image us-docker.pkg.dev/cloudrun/container/worker-pool:latest \
  --instances 0 \
  --region $REGION \
  --memory 4G \
  --cpu 4 \
  --service-account="$CONSUMER_SA_NAME@$PROJECT_ID."

Esegui il deployment del servizio di scalabilità automatica CREMA

Esegui il deployment del servizio CREMA per scalare automaticamente il pool di worker in base alle metriche di Prometheus.

Configura il gestore della scalabilità automatica

Questo tutorial utilizza il Parameter Manager per archiviare il file di configurazione YAML per CREMA.

  1. Crea un parametro in Parameter Manager per archiviare le versioni dei parametri per CREMA:

    PARAMETER_ID=crema-config
    PARAMETER_REGION=global
    gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAML
    
  2. Nella directory principale, crea un file YAML, my-crema-config.yaml, per definire la configurazione del gestore della scalabilità automatica. Imposta la soglia di scalabilità automatica sul 50% di utilizzo della CPU:

    apiVersion: crema/v1
    kind: CremaConfig
    spec:
      pollingInterval: 30
      triggerAuthentications:
        - metadata:
            name: google-crema-auth
          spec:
            podIdentity:
              provider: gcp
      scaledObjects:
        - spec:
            scaleTargetRef:
              name: projects/PROJECT_ID/locations/us-central1/workerPools/worker-pool-consumer
            minReplicaCount: 1
            maxReplicaCount: 20
            triggers:
              - type: prometheus
                metadata:
                  serverAddress: https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus
                  threshold: "0.5"
                  query: |
                    histogram_quantile(
                      0.50,
                      sum by (le) (
                        increase(
                          run_googleapis_com:container_cpu_utilizations_bucket{
                            monitored_resource="cloud_run_worker_pool",
                            worker_pool_name="worker-pool-consumer",
                            location="us-central1",
                            project_id="PROJECT_ID"
                          }[2m]
                        )
                      )
                    )
                authenticationRef:
                  name: google-crema-auth
            advanced:
              horizontalPodAutoscalerConfig:
                behavior:
                  scaleDown:
                    stabilizationWindowSeconds: 300
    

    Sostituisci PROJECT_ID con l' Google Cloud ID progetto.

  3. Carica il file YAML locale come nuova versione del parametro:

    LOCAL_YAML_CONFIG_FILE=my-crema-config.yaml
    PARAMETER_VERSION=1
    
    gcloud parametermanager parameters versions create $PARAMETER_VERSION \
      --location=$PARAMETER_REGION \
      --parameter=$PARAMETER_ID \
      --payload-data-from-file=$LOCAL_YAML_CONFIG_FILE
    
  4. Esegui il comando seguente per verificare che l'aggiunta del parametro sia andata a buon fine:

    gcloud parametermanager parameters versions list \
    --parameter=$PARAMETER_ID \
    --location=$PARAMETER_REGION
    

    Dovresti visualizzare il percorso del parametro, ad esempio projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1.

Esegui il deployment del servizio per scalare i carichi di lavoro

Per eseguire il deployment del servizio per scalare il pool di worker, esegui il comando seguente con un'immagine container predefinita:

CREMA_CONFIG_PARAM_VERSION=projects/$PROJECT_ID/locations/$PARAMETER_REGION/parameters/$PARAMETER_ID/versions/$PARAMETER_VERSION
IMAGE=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0

gcloud run deploy $CREMA_SERVICE_NAME \
  --image=${IMAGE} \
  --region=${REGION} \
  --service-account="${CREMA_SA_NAME}" \
  --no-allow-unauthenticated \
  --no-cpu-throttling \
  --base-image=us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/java25 \
  --labels=created-by=crema \
  --set-env-vars="CREMA_CONFIG=${CREMA_CONFIG_PARAM_VERSION},OUTPUT_SCALER_METRICS=True"

Testa il servizio di scalabilità automatica

Per verificare che il servizio di scalabilità automatica funzioni correttamente, controlla la scheda Log del servizio Cloud Run. Il servizio di scalabilità automatica CREMA aumenta il numero di istanze worker consumer da 0.

Dovresti visualizzare i seguenti log nei log del servizio ogni volta che le metriche vengono aggiornate:

[INFO] [METRIC-PROVIDER] Starting metric collection cycle
[INFO] [METRIC-PROVIDER] Successfully fetched scaled object metrics ...
[INFO] [METRIC-PROVIDER] Sending scale request ...
[INFO] [SCALER] Received ScaleRequest ...
[INFO] [SCALER] Current instances ...
[INFO] [SCALER] Recommended instances ...

Cloud Run etichetta ogni messaggio di log con il componente che lo ha emesso.

Libera spazio

Per evitare addebiti aggiuntivi al tuo Google Cloud account, elimina tutte le risorse di cui hai eseguito il deployment con questo tutorial.

Elimina il progetto

Se hai creato un nuovo progetto per questo tutorial, eliminalo. Se hai utilizzato un progetto esistente e devi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. Nella Google Cloud console, 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 progetto, quindi fai clic su Chiudi per eliminare il progetto.

Elimina le risorse del tutorial

  1. Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial. I servizi Cloud Run non comportano costi finché non ricevono richieste.

    Per eliminare il servizio Cloud Run, esegui il comando seguente:

    gcloud run services delete SERVICE-NAME

    Sostituisci SERVICE-NAME con il nome del tuo servizio.

    Puoi eliminare i servizi Cloud Run anche dalla Google Cloud console.

  2. Rimuovi la configurazione della regione predefinita di gcloud che hai aggiunto durante la configurazione del tutorial:

     gcloud config unset run/region
    
  3. Rimuovi la configurazione del progetto:

     gcloud config unset project
    
  4. Elimina le altre Google Cloud risorse create in questo tutorial:

Passaggi successivi