Scalabilità automatica dei pool di worker con metriche esterne

Questa pagina descrive come scalare automaticamente i pool di worker Cloud Run utilizzando metriche esterne basate sugli eventi. La scalabilità automatica delle metriche esterne di Cloud Run (CREMA) abilita questa funzionalità sfruttando la scalabilità automatica basata sugli eventi basata su Kubernetes (KEDA) per scalare i carichi di lavoro in base a origini di eventi esterni.

Per i gestori della scalabilità supportati e la compatibilità con Cloud Run, consulta Scalabilità automatica delle metriche esterne di Cloud Run (CREMA) nella Google Cloud documentazione diGitHub.

Informazioni sul servizio di scalabilità automatica

Per scalare automaticamente i pool di worker, esegui il deployment del servizio di scalabilità automatica CREMA su Cloud Run. Questo servizio esegue le seguenti azioni:

  1. Esegue il polling delle origini di eventi esterni, come gli argomenti Apache Kafka o il gestore della scalabilità GitHub Runner.

  2. Calcola il numero di istanze richieste in base alla configurazione YAML.

  3. Aggiorna automaticamente il numero di istanze del pool di worker.

Prima di iniziare

  1. Assicurati di aver configurato un nuovo progetto per Cloud Run, come descritto nella pagina di configurazione.

  2. Abilita le API Artifact Registry, Cloud Build, API Cloud Run Admin, Secret Manager e Parameter Manager:

    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        run.googleapis.com \
        secretmanager.googleapis.com \
        parametermanager.googleapis.com
    
  3. Configura un carico di lavoro basato su eventi o richieste, come GitHub Runners o Apache Kafka. Per verificare che l'origine del carico di lavoro sia supportata, consulta l'elenco di compatibilità CREMA nella Google Cloud documentazione diGitHub.

  4. Consulta il Calcolatore prezzi per stimare i costi. Ti vengono addebitati costi per il servizio di scalabilità di Cloud Run in base alla frequenza con cui attivi la scalabilità.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per scalare automaticamente il pool di worker, chiedi all'amministratore di concederti i seguenti ruoli IAM per il 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 un account di servizio personalizzato

Crea un account di servizio personalizzato con le autorizzazioni minime richieste per utilizzare le risorse di cui è stato eseguito il provisioning necessarie per il carico di lavoro. Per configurare il account di servizio:

gcloud iam service-accounts create CREMA_SERVICE_ACCOUNT \
  --display-name="CREMA Service Account"

Sostituisci CREMA_SERVICE_ACCOUNT con un nome per il account di servizio personalizzato, ad esempio crema-service-account. Questo comando crea un account di servizio nel formato crema-service-account@example-project.iam.gserviceaccount.com.

Crea il file di configurazione CREMA

Per definire la logica di scalabilità, crea un file di configurazione YAML nella directory principale. Questo file indica al servizio CREMA quali origini esterne monitorare, come eseguire l'autenticazione con le risorse e quali pool di worker scalare.

Esempio YAML

L'esempio seguente mostra il file di configurazione per scalare un pool di worker Cloud Run (example-workerpool) utilizzando le metriche di GitHub Runner. Utilizza un secret di Secret Manager denominato github_runner_token per eseguire l'autenticazione con GitHub per la lettura delle metriche.

  apiVersion: crema/v1
  kind: CremaConfig
  metadata:
    name: gh-demo
  spec:
    triggerAuthentications:
      - metadata:
          name: github-trigger-auth
        spec:
          gcpSecretManager:
            secrets:
              - parameter: personalAccessToken
                id: github_runner_token
                version: latest
    scaledObjects:
      - spec:
          scaleTargetRef:
            name: projects/example-project/locations/us-central1/workerpools/example-workerpool
          triggers:
            - type: github-runner
              name: example-runner
              metadata:
                owner: repo-owner
                runnerScope: repo
                repos: repo-name
                targetWorkflowQueueLength: 1
              authenticationRef:
                name: github-trigger-auth
          advanced:
            horizontalPodAutoscalerConfig:
              behavior:
                scaleDown:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 100
                      periodSeconds: 10
                scaleUp:
                  stabilizationWindowSeconds: 10
                  policies:
                    - type: Pods
                      value: 2
                      periodSeconds: 10
        pollingInterval: 10

La configurazione YAML utilizza i seguenti parametri di alto livello:

  • triggerAuthentications: determina in che modo CREMA esegue l'autenticazione del servizio esterno, ad esempio utilizzando un token archiviato in Secret Manager.

  • scaledObjects: definisce il mapping tra il pool di worker Cloud Run e la risorsa metrica esterna. Questo parametro include:

    • scaleTargetRef: i servizi Cloud Run o i pool di worker da scalare.

    • triggers: la metrica esterna specifica utilizzata per la scalabilità. Se l'origine della metrica esterna richiede l'autenticazione, imposta il campo authenticationRef per specificare uno degli oggetti TriggerAuthentications per le credenziali.

  • pollingInterval: controlla l'intervallo (in secondi) in cui CREMA aggiorna le metriche. Se ometti questo parametro, CREMA non esegue il polling automaticamente e devi attivare manualmente un controllo della scalabilità utilizzando una richiesta POST al servizio.

Per ulteriori informazioni sulla definizione delle metriche di configurazione di base e avanzate, consulta il riferimento alla configurazione nella Google Cloud documentazione diGitHub.

Per l'elenco completo delle definizioni di configurazione per i gestori della scalabilità compatibili, consulta Gestori della scalabilità nella documentazione di KEDA.

Archivia la configurazione CREMA in Parameter Manager

Per archiviare le versioni dei parametri per il servizio di scalabilità automatica CREMA:

  1. Crea un parametro in Parameter Manager:

    gcloud parametermanager parameters create PARAMETER_ID --location=global  --parameter-format=YAML
    

    Sostituisci PARAMETER_ID con il nome del parametro.

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

    gcloud parametermanager parameters versions create PARAMETER_VERSION \
      --location=global \
      --parameter=PARAMETER_ID \
      --payload-data-from-file=LOCAL_YAML_CONFIG_FILE
    

    Sostituisci quanto segue:

    • PARAMETER_VERSION: l'ID che vuoi assegnare alla versione del parametro, ad esempio 1.
    • LOCAL_YAML_CONFIG_FILE: il percorso del file di configurazione YAML.

Per saperne di più, consulta Crea un parametro.

Concedi autorizzazioni aggiuntive al account di servizio CREMA

Per scalare il pool di worker specificato nella configurazione YAML, concedi le seguenti autorizzazioni al account di servizio personalizzato:

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME \
      --role="roles/parametermanager.parameterViewer"
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del tuo Google Cloud progetto.

    • CREMA_SERVICE_ACCOUNT_NAME: il nome del tuo service account CREMA.

  2. Concedi al account di servizio CREMA il ruolo roles/run.developer nel pool di worker. In questo modo, il servizio CREMA può modificare il numero di istanze del pool di worker in risposta alle modifiche delle metriche:

    WORKER_POOL_NAME=WORKER_POOL_NAME
    WORKER_POOL_REGION=WORKER_POOL_REGION
    gcloud beta run worker-pools add-iam-policy-binding $WORKER_POOL_NAME \
      --region=$WORKER_POOL_REGION \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/run.developer"
    

    Sostituisci quanto segue:

    • WORKER_POOL_NAME: il nome del pool di worker.
    • WORKER_POOL_REGION: la regione del pool di worker.
  3. Concedi al account di servizio CREMA l'autorizzazione per scrivere le metriche:

     gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
       --role="roles/monitoring.metricWriter"
    
  4. Concedi al service account CREMA il ruolo Utente account di servizio:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:CREMA_SERVICE_ACCOUNT_NAME" \
      --role="roles/iam.serviceAccountUser"
    

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:

gcloud beta run deploy SERVICE_NAME\
  --image=us-central1-docker.pkg.dev/cloud-run-oss-images/crema-v1/autoscaler:1.0 \
  --region=SERVICE_REGION \
  --service-account="CREMA_SERVICE_ACCOUNT_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=projects/PROJECT_ID/locations/PARAMETER_REGION/parameters/PARAMETER_ID/versions/PARAMETER_VERSION,OUTPUT_SCALER_METRICS=True"

Sostituisci quanto segue:

  • SERVICE_NAME: il nome del servizio di scalabilità automatica.

  • SERVICE_REGION: la regione del servizio.

  • CREMA_SERVICE_ACCOUNT_NAME: il nome del tuo service account CREMA.

  • PROJECT_ID: l'ID del tuo Google Cloud progetto.

  • PARAMETER_REGION, PARAMETER_ID e PARAMETER_VERSION: valori archiviati in Parameter Manager.

Puoi anche eseguire il deployment del servizio CREMA utilizzando un'immagine container personalizzata creata dal codice sorgente con Cloud Build.

Testa il servizio CREMA

Per verificare che il servizio di scalabilità automatica funzioni correttamente, controlla la scheda Log del servizio Cloud Run.

Ogni volta che le metriche vengono aggiornate, dovresti visualizzare i seguenti log nei log del servizio:

Ogni messaggio di log è etichettato con il componente che lo ha emesso.

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

Passaggi successivi