El servicio de ajuste de escala automático de CREMA realiza un cálculo basado en la proporción con datos de Prometheus. El servicio de ajuste de escala automático ajusta de forma dinámica el recuento de instancias para garantizar que tu grupo de trabajadores tenga la cantidad correcta de recursos para la carga de trabajo actual. CREMA calcula el uso de CPU de tu grupo de trabajadores durante un período específico y lo compara con el umbral configurado para ajustar las instancias.
Objetivos
En este instructivo, podrás:
Implementar un grupo de trabajadores de Cloud Run para ejecutar una carga de trabajo en segundo plano que informe las métricas de uso al Google Cloud servicio administrado para Prometheus.
Implementar el servicio de ajuste de escala automático de CREMA para ajustar de forma dinámica la escala del grupo de trabajadores según las métricas de Prometheus.
Probar tu servicio de CREMA observando los registros del servicio y verificando los cambios en el recuento de instancias en la Google Cloud consola.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Antes de comenzar
- Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
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.
Habilita las APIs de Cloud Run, Parameter Manager, Artifact Registry, Cloud Build y Cloud Monitoring.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.- Instala e inicializa gcloud CLI.
- Actualiza los componentes, como se indica a continuación:
gcloud components update
- Establece las siguientes variables de configuración para CREMA que se usan en este instructivo:
Reemplaza PROJECT_ID por el ID de tu Google Cloud proyecto.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
- Ejecuta el siguiente comando para configurar el ID del proyecto:
gcloud config set project $PROJECT_ID
- Se te cobrará por el servicio de ajuste de escala de Cloud Run según la frecuencia con la que actives el ajuste de escala. Para obtener más información, calcula los costos con la calculadora de precios.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar el instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Administrador del repositorio de Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor de Cloud Build (
roles/cloudbuild.builds.editor) -
Administrador de Cloud Run (
roles/run.admin) -
Crea cuentas de servicio (
roles/iam.serviceAccountCreator) -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) -
Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Administrador de Parameter Manager (
roles/parametermanager.admin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Crea cuentas de servicio personalizadas
En este instructivo, se requieren las siguientes dos cuentas de servicio con los permisos mínimos necesarios para usar los recursos aprovisionados:
Cuenta de servicio del consumidor: identidad para el grupo de trabajadores que ejecuta una carga de trabajo en segundo plano. Ejecuta el siguiente comando para crear la cuenta de servicio del consumidor:
gcloud iam service-accounts create $CONSUMER_SA_NAME \ --display-name="Consumer service account"Cuenta de servicio de CREMA: identidad para el escalador automático. Ejecuta el siguiente comando para crear la cuenta de servicio de CREMA:
gcloud iam service-accounts create $CREMA_SA_NAME \ --display-name="CREMA service account"
Otorga permisos adicionales a tus cuentas de servicio personalizadas
Para ajustar la escala del grupo de trabajadores, otorga los siguientes permisos en las cuentas de servicio personalizadas:
Otorga permiso a tu cuenta de servicio de CREMA para leer desde Parameter Manager:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/parametermanager.parameterViewer"Otorga a tu cuenta de servicio de CREMA el permiso para ajustar la escala del grupo de trabajadores:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.developer"Otorga a tu cuenta de servicio de CREMA el rol de usuario de la cuenta de servicio:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"Otorga permiso a tu cuenta de servicio de CREMA para ver las métricas:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.viewer"Otorga permiso a tu cuenta de servicio de CREMA para escribir métricas:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$CREMA_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
Implementa un grupo de trabajadores de Cloud Run
Implementa un grupo de trabajadores con 0 instancias para que CREMA aumente la escala:
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"
Implementa el servicio de ajuste de escala automático de CREMA
Implementa el servicio de CREMA para ajustar automáticamente la escala de tu grupo de trabajadores según las métricas de Prometheus.
Configurar el escalador automático
En este instructivo, se usa el Parameter Manager para almacenar el archivo de configuración YAML para CREMA.
Crea un parámetro en Parameter Manager para almacenar versiones de parámetros para CREMA:
PARAMETER_ID=crema-config PARAMETER_REGION=global gcloud parametermanager parameters create $PARAMETER_ID --location=$PARAMETER_REGION --parameter-format=YAMLEn tu directorio raíz, crea un archivo YAML,
my-crema-config.yaml, para definir la configuración del escalador automático. Establece el umbral de ajuste de escala automático en un 50% de uso de 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: 300Reemplaza PROJECT_ID por el Google Cloud ID del proyecto.
Sube tu archivo YAML local como una nueva versión del parámetro:
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_FILEEjecuta el siguiente comando para verificar que la adición del parámetro se haya realizado correctamente:
gcloud parametermanager parameters versions list \ --parameter=$PARAMETER_ID \ --location=$PARAMETER_REGIONDeberías ver la ruta de acceso del parámetro, como
projects/PROJECT_ID/locations/global/parameters/crema-config/versions/1.
Implementa el servicio para ajustar la escala de tus cargas de trabajo
Para implementar el servicio para ajustar la escala de tu grupo de trabajadores, ejecuta el siguiente comando con una imagen de contenedor precompilada:
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"
Prueba tu servicio de ajuste de escala automático
Para verificar que tu servicio de ajuste de escala automático funcione correctamente, consulta la pestaña Registros del servicio de Cloud Run. El servicio de ajuste de escala automático de CREMA aumenta la escala de las instancias de trabajadores del consumidor desde 0.
Deberías ver los siguientes registros en los registros de tu servicio cada vez que se actualicen las métricas:
[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 etiqueta cada mensaje de registro con el componente que lo emitió.
Limpia
Para evitar cargos adicionales en tu Google Cloud cuenta, borra todos los recursos que implementaste con este instructivo.
Borra el proyecto
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y necesitas conservarlo sin los cambios que agregaste en este instructivo, borra los recursos que creaste para el instructivo.
La manera más fácil de eliminar la facturación es borrar el proyecto que tú creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que tú quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Elimina recursos de instructivos
Borra el servicio de Cloud Run que implementaste en este instructivo. Los servicios de Cloud Run no generan costos hasta que reciben solicitudes.
Para borrar tu servicio de Cloud Run, ejecuta el siguiente comando:
gcloud run services delete SERVICE-NAME
Reemplaza SERVICE-NAME por el nombre del servicio.
También puedes borrar los servicios de Cloud Run desde la Google Cloud consola.
Quita la configuración de región predeterminada de
gcloudque agregaste durante la configuración en el instructivo:gcloud config unset run/regionQuita la configuración del proyecto:
gcloud config unset projectBorra otros Google Cloud recursos creados en este instructivo:
¿Qué sigue?
- Obtén más información sobre los grupos de trabajadores de Cloud Run.
- Analiza otras demostraciones, instructivos y muestras de Cloud Run.
- Configura otros escaladores de KEDA con CREMA.