In dieser Anleitung wird beschrieben, wie Sie Ihre Cloud Run-Worker-Pools anhand von Prometheus-Messwerten mit Cloud Run External Metrics Autoscaling (CREMA) automatisch skalieren.
Der CREMA-Autoscaler-Dienst führt eine verhältnisbasierte Berechnung mit Daten aus Prometheus durch. Der Autoscaler-Dienst passt die Anzahl der Instanzen dynamisch an, damit Ihr Worker-Pool die richtige Menge an Ressourcen für die aktuelle Arbeitslast hat. CREMA berechnet die CPU-Auslastung Ihres Worker-Pools über einen bestimmten Zeitraum und vergleicht sie mit dem konfigurierten Schwellenwert, um Instanzen anzupassen.
Ziele
In dieser Anleitung wird Folgendes beschrieben:
Einen Cloud Run-Worker-Pool bereitstellen, um eine Hintergrundarbeitslast auszuführen, die Auslastungsmesswerte an Google Cloud Managed Service for Prometheus meldet.
Den Autoscaler-Dienst CREMA bereitstellen, um den Worker-Pool anhand der Prometheus-Messwerte dynamisch zu skalieren.
Testen Sie Ihren CREMA-Dienst, indem Sie die Dienstlogs beobachten und Änderungen der Instanzanzahl in der Google Cloud Console prüfen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Verwenden Sie den Preisrechner.
Hinweis
- Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
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.
Aktivieren Sie die Cloud Run API, die Parameter Manager API, die Artifact Registry API, die Cloud Build API und die Cloud Monitoring API.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. Informationen zum Zuweisen von Rollen.- Installieren und initialisieren Sie die gcloud CLI.
- Aktualisieren Sie die Komponenten:
gcloud components update
- Legen Sie die folgenden Konfigurationsvariablen für CREMA fest, die in dieser Anleitung verwendet werden:
Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud Projekts.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
- Legen Sie Ihre Projekt-ID fest, indem Sie den folgenden Befehl ausführen:
gcloud config set project $PROJECT_ID
- Für den Cloud Run-Skalierungsdienst fallen Kosten an, je nachdem, wie oft Sie die Skalierung auslösen. Weitere Informationen finden Sie im Preisrechner.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zu gewähren, damit Sie die Anleitung ausführen können:
- Repository-Administrator für Artifact Registry (
roles/artifactregistry.repoAdmin) - Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor) - Cloud Run-Administrator (
roles/run.admin) - Dienstkonten erstellen (
roles/iam.serviceAccountCreator) - Dienstkontonutzer (
roles/iam.serviceAccountUser) - Service Usage-Nutzer (
roles/serviceusage.serviceUsageConsumer) - Parameter Manager-Administrator (
roles/parametermanager.admin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Benutzerdefinierte Dienstkonten erstellen
Für diese Anleitung sind die folgenden beiden Dienstkonten mit den Mindestberechtigungen erforderlich, die für die Verwendung der bereitgestellten Ressourcen erforderlich sind:
Dienstkonto des Nutzers: Identität für den Worker-Pool, der eine Hintergrundarbeitslast ausführt. Führen Sie den folgenden Befehl aus, um das Dienstkonto des Nutzers zu erstellen:
gcloud iam service-accounts create $CONSUMER_SA_NAME \ --display-name="Consumer service account"CREMA-Dienstkonto: Identität für den Autoscaler. Führen Sie den folgenden Befehl aus, um das CREMA-Dienstkonto zu erstellen:
gcloud iam service-accounts create $CREMA_SA_NAME \ --display-name="CREMA service account"
Zusätzliche Berechtigungen für benutzerdefinierte Dienstkonten gewähren
Um den Worker-Pool zu skalieren, gewähren Sie die folgenden Berechtigungen für die benutzerdefinierten Dienstkonten:
Gewähren Sie Ihrem CREMA-Dienstkonto die Berechtigung, Daten aus dem Parameter Manager zu lesen:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/parametermanager.parameterViewer"Gewähren Sie Ihrem CREMA-Dienstkonto die Berechtigung, den Worker-Pool zu skalieren:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.developer"Gewähren Sie Ihrem CREMA-Dienstkonto die Rolle „Dienstkontonutzer“:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"Gewähren Sie Ihrem CREMA-Dienstkonto die Berechtigung, Messwerte aufzurufen:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.viewer"Gewähren Sie Ihrem CREMA-Dienstkonto die Berechtigung, Messwerte zu schreiben:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
Cloud Run-Worker-Pool bereitstellen
Stellen Sie einen Worker-Pool mit 0 Instanzen bereit, damit CREMA ihn hochskalieren kann:
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.iam.gserviceaccount.com"
Autoscaler-Dienst CREMA bereitstellen
Stellen Sie den CREMA-Dienst bereit, um Ihren Worker-Pool anhand von Prometheus-Messwerten automatisch zu skalieren.
Autoscaling konfigurieren
In dieser Anleitung wird der Parameter Manager verwendet, um die YAML-Konfigurationsdatei für CREMA zu speichern.
Erstellen Sie einen Parameter im Parameter Manager, um Parameterversionen für CREMA zu speichern:
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAMLErstellen Sie im Stammverzeichnis eine YAML-Datei (
my-crema-config.yaml), um die Autoscaler-Konfiguration zu definieren. Legen Sie den Autoscaling-Schwellenwert auf 50% CPU-Auslastung fest: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: 300Ersetzen Sie PROJECT_ID durch die Google Cloud Projekt-ID.
Laden Sie Ihre lokale YAML-Datei als neue Parameterversion hoch:
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_FILEFühren Sie den folgenden Befehl aus, um zu prüfen, ob der Parameter hinzugefügt wurde:
gcloud parametermanager parameters versions list \ --parameter=$PARAMETER_ID \ --location=$PARAMETER_REGIONDer Parameterpfad sollte angezeigt werden, z. B.
projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1.
Dienst zum Skalieren von Arbeitslasten bereitstellen
Führen Sie den folgenden Befehl mit einem vorgefertigten Container-Image aus, um den Dienst zum Skalieren Ihres Worker-Pools bereitzustellen:
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"
Autoscaling-Dienst testen
Prüfen Sie den Tab Logs des Cloud Run-Dienstes, um zu prüfen, ob der Autoscaling-Dienst ordnungsgemäß funktioniert. Der CREMA-Autoscaler-Dienst skaliert die Worker-Instanzen des Nutzers von 0 hoch.
Jedes Mal, wenn die Messwerte aktualisiert werden, sollten die folgenden Logs in den Logs Ihres Dienstes angezeigt werden:
[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 kennzeichnet jeden Logeintrag mit der Komponente, die ihn ausgegeben hat.
Bereinigen
Löschen Sie alle Ressourcen, die Sie mit dieser Anleitung bereitgestellt haben, um zusätzliche Kosten für Ihr Google Cloud Konto zu vermeiden.
Projekt löschen
Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen , löschen Sie die für die Anleitung erstellten Ressourcen.
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben. Für Cloud Run-Dienste fallen erst Kosten an, wenn sie Anfragen erhalten.
Führen Sie den folgenden Befehl aus, um den Cloud Run-Dienst zu löschen:
gcloud run services delete SERVICE-NAME
Ersetzen Sie SERVICE-NAME durch den Namen Ihres Dienstes.
Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.
Entfernen Sie die Konfiguration der Standardregion
gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:gcloud config unset run/regionEntfernen Sie die Projektkonfiguration:
gcloud config unset projectLöschen Sie andere Google Cloud Ressourcen, die in dieser Anleitung erstellt wurden:
Nächste Schritte
- Weitere Informationen zu Cloud Run-Worker-Pools.
- Weitere Cloud Run-Demos, Anleitungen und Beispiele entdecken
- Andere KEDA-Scaler mit CREMA konfigurieren