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à giusta di risorse 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:
Deploy di un pool di worker Cloud Run per eseguire un carico di lavoro in background che riporta le metriche di utilizzo a Google Cloud Managed Service per Prometheus.
Esegui il deployment del servizio di scalabilità automatica CREMA per scalare dinamicamente il pool di worker in base alle metriche di Prometheus.
Testa il servizio CREMA osservando i log di servizio e verificando le modifiche al conteggio delle istanze nella console Google Cloud .
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.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.- Installa e inizializza gcloud CLI.
- Aggiorna i componenti:
gcloud components update
- Imposta le seguenti variabili di configurazione per CREMA utilizzate in questo tutorial:
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud .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
- Imposta l'ID progetto eseguendo questo comando:
gcloud config set project $PROJECT_ID
- I costi del servizio di scalabilità di Cloud Run vengono addebitati in base alla frequenza con cui attivi lo scaling. Per ulteriori informazioni, stima i costi con il calcolatore dei prezzi.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Amministratore repository Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Cloud Run Admin (
roles/run.admin) -
Crea service account (
roles/iam.serviceAccountCreator) -
Utente Service Account (
roles/iam.serviceAccountUser) -
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Parameter Manager Admin (
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 service account personalizzati
Questo tutorial richiede i seguenti due service account con le autorizzazioni minime richieste per utilizzare le risorse di cui è stato eseguito il provisioning:
Account di servizio consumer: identità per il pool di worker che esegue un workload in background. Esegui questo comando 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 questo comando per creare ilaccount di serviziot CREMA:
gcloud iam service-accounts create $CREMA_SA_NAME \ --display-name="CREMA service account"
Concedere autorizzazioni aggiuntive ai service account personalizzati
Per scalare il pool di worker, concedi le seguenti autorizzazioni sui service account personalizzati:
Concedi al tuo account di servizio CREMA l'autorizzazione di lettura da Parameter Manager:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/parametermanager.parameterViewer"Concedi al tuo 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.iam.gserviceaccount.com" \ --role="roles/run.developer"Concedi al tuo 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.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"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.iam.gserviceaccount.com" \ --role="roles/monitoring.viewer"Concedi al account di servizio CREMA l'autorizzazione a scrivere metriche:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --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 consentire a CREMA di fare lo scale up:
gcloud beta 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.iam.gserviceaccount.com"
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 lo strumento di scalabilità automatica
Questo tutorial utilizza Parameter Manager per archiviare il file di configurazione YAML per CREMA.
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=YAMLNella 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: 300Sostituisci PROJECT_ID con l'ID progetto Google Cloud .
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_FILEEsegui questo comando per verificare che l'aggiunta del parametro sia stata eseguita correttamente:
gcloud parametermanager parameters versions list \ --parameter=$PARAMETER_ID \ --location=$PARAMETER_REGIONDovresti 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 questo comando 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 beta 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"
Testare 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 le 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.
Esegui la pulizia
Per evitare addebiti aggiuntivi al tuo account Google Cloud , elimina tutte le risorse che hai implementato 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 che hai creato per il tutorial.
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del tutorial
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 questo comando:
gcloud run services delete SERVICE-NAME
Sostituisci SERVICE-NAME con il nome del servizio.
Puoi eliminare i servizi Cloud Run anche dalla consoleGoogle Cloud .
Rimuovi la configurazione della regione predefinita
gcloudche hai aggiunto durante la configurazione del tutorial:gcloud config unset run/regionRimuovi la configurazione del progetto:
gcloud config unset projectElimina le altre Google Cloud risorse create in questo tutorial:
Passaggi successivi
- Scopri di più sui pool di worker Cloud Run.
- Esplora altre demo, tutorial ed esempi di Cloud Run.
- Configura altri scalatori KEDA con CREMA.