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:
Esegue il polling delle origini di eventi esterni, come gli argomenti Apache Kafka o il gestore della scalabilità GitHub Runner.
Calcola il numero di istanze richieste in base alla configurazione YAML.
Aggiorna automaticamente il numero di istanze del pool di worker.
Prima di iniziare
Assicurati di aver configurato un nuovo progetto per Cloud Run, come descritto nella pagina di configurazione.
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.comConfigura 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.
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:
-
Amministratore repository Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Cloud Run Admin (
roles/run.admin) -
Create Service Accounts (
roles/iam.serviceAccountCreator) -
Amministratore Secret Manager (
roles/secretmanager.admin) -
Utente Service Account (
roles/iam.serviceAccountUser) -
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Storage Admin (
roles/storage.admin) -
Amministratore Parameter Manager (
roles/parametermanager.admin)
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 campoauthenticationRefper specificare uno degli oggettiTriggerAuthenticationsper 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:
Crea un parametro in Parameter Manager:
gcloud parametermanager parameters create PARAMETER_ID --location=global --parameter-format=YAMLSostituisci PARAMETER_ID con il nome del parametro.
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_FILESostituisci 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.
- PARAMETER_VERSION: l'ID che vuoi assegnare alla versione del parametro, ad esempio
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:
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.
Concedi al account di servizio CREMA il ruolo
roles/run.developernel 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.
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"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
Scopri come utilizzare i runner GitHub self-hosted nei pool di worker per eseguire i flussi di lavoro definiti nel repository GitHub e scalare il pool di worker con CREMA.
Scopri di più sui pool di worker Cloud Run.