En esta página, se describe cómo escalar tu servicio de forma manual. También proporciona instrucciones para un caso de uso común, que cambia el recuento de instancias según un programa con trabajos de Cloud Scheduler y la API de Cloud Run Admin.
Descripción general
De forma predeterminada, Cloud Run aumenta automáticamente la escala a una cantidad máxima especificada o predeterminada de instancias según el tráfico y el uso de CPU. Sin embargo, en algunos casos de uso, es posible que desees establecer una cantidad específica de instancias con el escalamiento manual.
El escalamiento manual te permite establecer un recuento de instancias específico, independientemente del tráfico o el uso, y sin necesidad de volver a implementar. Todo esto te brinda la opción de escribir tu propia lógica de escalamiento con un sistema externo. Consulta Escalamiento basado en programas para ver un ejemplo de esto.
Cómo alternar entre el ajuste de escala automático y manual
Cambiar los modos de escalamiento afecta el recuento de instancias y la configuración de instancias mínima a nivel de servicio y máxima, como se muestra en la siguiente tabla:
Dirección del interruptor de escalamiento | Recuento de instancias | Cantidad mínima y máxima de instancias |
---|---|---|
De automático a manual | Si no se especifica el recuento de instancias en el comando que cambia de modo, se hereda la configuración de instancias mínimas a nivel del servicio. | Después del cambio, no se establecerán las instancias mínimas ni máximas a nivel del servicio. |
De manual a automático | El recuento de instancias manual no se establece | Debes especificar ambas instancias mínimas y máximas a nivel del servicio, o ninguna de ellas. (Si especificas solo uno, se muestra un error). Si no especificas ninguno de estos en el comando que cambia de modo, las instancias mínimas y máximas a nivel del servicio heredan el recuento de instancias manual. |
Configuración mínima y máxima a nivel de revisión y escalamiento manual
Si configuras tu servicio para el escalamiento manual, se ignorará cualquier configuración de instancias mínima a nivel de la revisión y máxima.
Divisiones de tráfico para el ajuste de escala manual
En la siguiente lista, se describe cómo se asignan las instancias cuando se divide el tráfico con el escalamiento manual. Esto incluye el comportamiento de las revisiones de solo etiqueta de tráfico.
Durante una división del tráfico, a cada revisión se le asignan instancias de manera proporcional, según la división del tráfico, de manera similar a la división del tráfico con instancias mínimas a nivel de servicio.
Si la cantidad de revisiones que reciben tráfico supera el recuento de instancias manual, algunas de las revisiones no tendrán instancias. El tráfico que se envíe a esas revisiones recibirá el mismo error que si las revisiones estuvieran inhabilitadas.
Para todas las revisiones que reciben tráfico en una división del tráfico, se inhabilitan las instancias mínimas y máximas a nivel de revisión.
Si una revisión está activa solo debido a las etiquetas de tráfico, haz lo siguiente:
- Si se establecen instancias mínimas a nivel de revisión, se iniciará la cantidad especificada de instancias, pero no se registrará en el recuento total de instancias manuales del servicio. La revisión no se ajustará automáticamente.
- Si no se establecen instancias mínimas a nivel de la revisión, la revisión se escala a una instancia como máximo, en respuesta al tráfico enviado a la URL de la etiqueta.
Comportamiento de facturación con el ajuste de escala manual
Cuando usas el ajuste de escala manual, el comportamiento de facturación es similar al que se produce cuando usas la función de instancias mínimas.
Es decir, con el escalamiento manual y la facturación basada en instancias, las instancias inactivas ajustadas de forma manual se facturan como instancias activas.
Si usas el ajuste de escala manual con la facturación basada en solicitudes, las instancias inactivas ajustadas de forma manual se facturan como instancias mínimas inactivas. Para obtener detalles completos de la facturación, consulta la página de precios.
Roles obligatorios
Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Desarrollador de Cloud Run (
roles/run.developer
) en el servicio de Cloud Run -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio -
Lector de Artifact Registry (
roles/artifactregistry.reader
) en el repositorio de Artifact Registry de la imagen de contenedor implementada (si corresponde)
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs deGoogle Cloud , como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta permisos de implementación y administra el acceso.
Configura el escalamiento
Puedes configurar el modo de escalamiento con la consola de Google Cloud, Google Cloud CLI, el archivo YAML o la API cuando crees o actualices un servicio:
Console
En la Google Cloud consola, ve a Cloud Run:
Si quieres configurar un servicio nuevo, haz clic en Implementar contenedor y selecciona Servicio para mostrar el formulario Crear servicio. Si quieres configurar un servicio existente, haz clic en el servicio para mostrar su panel de detalles y, luego, haz clic en el ícono de lápiz junto a Escalamiento en la parte superior derecha del panel de detalles.
Ubica el formulario Ajuste de escala del servicio (para un servicio nuevo) o el formulario Editar escalamiento para un servicio existente.
En el campo Cantidad de instancias, especifica la cantidad de instancias de contenedor para el servicio.
Haz clic en Crear para un servicio nuevo o en Guardar para un servicio existente.
gcloud
Para especificar el escalamiento de un servicio nuevo, usa el comando deploy:
gcloud beta run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Reemplaza lo siguiente:
- SERVICE por el nombre de tu servicio
- INSTANCE_COUNT con la cantidad de instancias del servicio.
Esto establece el servicio en el ajuste de escala manual. Especifica un valor de
0
para inhabilitar el servicio. Especifica un valor deauto
para usar el comportamiento predeterminado de escalamiento automático de Cloud Run. - IMAGE_URL por una referencia a la imagen del contenedor, como
us-docker.pkg.dev/cloudrun/container/hello:latest
Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
Especifica el escalamiento de un servicio existente con el siguiente comando update:
gcloud beta run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
Actualiza los atributos
scalingMode
ymanualInstanceCount
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Reemplaza lo siguiente:
- SERVICE por el nombre del servicio de Cloud Run
- MODE con
manual
para el escalamiento manual oautomatic
para el comportamiento predeterminado del ajuste de escala automático de Cloud Run - INSTANCE_COUNT con la cantidad de instancias que escalas manualmente para el servicio. Especifica un valor de
0
para inhabilitar el servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
API de REST
Para actualizar la cantidad mínima de instancias a nivel de servicio para un servicio determinado, envía una solicitud HTTP PATCH
al extremo service
de la API de Cloud Run Admin.
Por ejemplo, con curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
Reemplaza lo siguiente:
- ACCESS_TOKEN por un token de acceso válido para una cuenta que tenga los permisos de IAM para actualizar un servicio.
Por ejemplo, si accediste a
gcloud
, puedes recuperar un token de acceso congcloud auth print-access-token
. Desde una instancia de contenedor de Cloud Run, puedes recuperar un token de acceso a través del servidor de metadatos de instancias de contenedor. - MANUAL_INSTANCE_COUNT con la cantidad de instancias del servicio.
Esto establece el servicio en el ajuste de escala manual. Especifica un valor de
0
para inhabilitar el servicio. - SERVICE por el nombre del servicio
- REGION por la Google Cloud región en la que se implementa el servicio
- PROJECT_ID por el Google Cloud ID del proyecto.
Cómo ver la configuración de escalamiento de tu servicio
Para ver las instancias de configuración de escalamiento de tu servicio de Cloud Run, sigue estos pasos:
Console
En la Google Cloud consola, ve a Cloud Run:
Haz clic en el servicio que te interesa para abrir el panel Detalles del servicio.
La configuración de escalamiento actual se muestra en la parte superior derecha del panel de detalles del servicio, después de la etiqueta Escalamiento, junto al ícono de lápiz.
gcloud
Usa el siguiente comando para ver la configuración de escalamiento actual del servicio:
gcloud beta run services describe SERVICE
SERVICE por el nombre del servicio
Busca el campo Scaling: Manual (Instances: )
cerca de la parte superior del texto que se muestra desde describe
.
YAML
Usa el siguiente comando para descargar la configuración de YAML del servicio:
gcloud run services describe SERVICE --format export > service.yaml
La configuración de escalamiento se incluye en los atributos scalingMode
y manualInstanceCount
.
Inhabilitar un servicio
Cuando inhabilitas un servicio, se permite que se completen las solicitudes que se están procesando.
Sin embargo, cualquier otra solicitud a la URL del servicio fallará con un error Service unavailable
o Service disabled
.
Las solicitudes para revisar las revisiones que solo están activas debido a las etiquetas de tráfico no se ven afectadas porque esas revisiones no están inhabilitadas.
Para inhabilitar un servicio, debes establecer el escalamiento en cero. Puedes inhabilitar un servicio con la consola de Google Cloud, Google Cloud CLI, el archivo YAML o la API:
Console
En la Google Cloud consola, ve a Cloud Run:
Haz clic en el servicio que quieres inhabilitar para mostrar su panel de detalles y, luego, haz clic en el ícono de lápiz junto a Escalamiento en la parte superior derecha del panel de detalles.
Busca el formulario Editar escalamiento y selecciona Ajuste de escala manual.
En el campo etiquetado como Cantidad de instancias, ingresa el valor
0
(cero).Haz clic en Guardar.
gcloud
Para inhabilitar un servicio, usa el siguiente comando para establecer la escala en cero:
gcloud beta run services update SERVICE --scaling=0
SERVICE por el nombre del servicio
YAML
Descarga la configuración de YAML de tu servicio:
gcloud run services describe SERVICE --format export > service.yaml
Establece el atributo
manualInstanceCount
en cero (0
):apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
SERVICE por el nombre de tu servicio de Cloud Run.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
API de REST
Para inhabilitar un servicio, envía una solicitud HTTP PATCH
al extremo service
de la API de Cloud Run Admin.
Por ejemplo, con curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.manualInstanceCount
Reemplaza lo siguiente:
- ACCESS_TOKEN por un token de acceso válido para una cuenta que tenga los permisos de IAM para actualizar un servicio.
Por ejemplo, si accediste a
gcloud
, puedes recuperar un token de acceso congcloud auth print-access-token
. Desde una instancia de contenedor de Cloud Run, puedes recuperar un token de acceso a través del servidor de metadatos de instancias de contenedor. - SERVICE por el nombre del servicio
- REGION por la Google Cloud región en la que se implementa el servicio
- PROJECT_ID por el Google Cloud ID del proyecto.
Ejemplo de escalamiento basado en programas
Un caso de uso común del ajuste de escala manual es cambiar el recuento de instancias según un programa predefinido. En este ejemplo, usamos Cloud Scheduler para programar dos trabajos, cada uno de los cuales invoca la API de Cloud Run Admin para escalar la cantidad de instancias. La primera tarea establece el servicio para que se escale de forma manual a 10 instancias durante el horario de atención (de 9:00 a.m. a 5:00 p.m., de lunes a viernes). La segunda tarea establece el servicio para que escale a cero instancias durante las horas de descanso.
Ten en cuenta que establecer las instancias en cero, como se muestra en el ejemplo, inhabilita el servicio, pero no los trabajos de Cloud Scheduler. Esas tareas seguirán ejecutándose y restablecerán (y volverán a habilitar) el servicio en 10 instancias según lo programado.
En este ejemplo, usamos la guía de inicio rápido de Cloud Run para simplificar, pero puedes usar el servicio que elijas.
Para configurar el ajuste de escala manual basado en el programa, haz lo siguiente:
Implementa tu servicio con el siguiente comando:
gcloud beta run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Reemplaza las siguientes variables:
- REGION por la región en la que se implementa el servicio de Cloud Run.
- SERVICE por el nombre del servicio de Cloud Run.
Configura tu servicio para el ajuste de escala manual a 10 instancias con el siguiente comando:
gcloud beta run services update SERVICE \ --region=REGION \ --scaling=10
Crea un trabajo de Cloud Scheduler que escale manualmente las instancias del servicio hasta 10 instancias durante el horario comercial:
gcloud scheduler jobs create http hello-start-instances \ --location=REGION \ --schedule="0 9 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":10}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Este comando crea un trabajo de Cloud Scheduler que realiza una llamada HTTP a la API de Cloud Run Admin y establece la cantidad de instancias en
10
. En el ejemplo, se usa la cuenta de servicio predeterminada de Compute EnginePROJECT_NUMBER-compute@developer.gserviceaccount.com
para las tareas de Cloud Scheduler. Puedes usar cualquier cuenta de servicio que tenga permisos para actualizar los servicios de Cloud Run.Crea un trabajo de Cloud Scheduler que escale manualmente las instancias del servicio a cero instancias durante las horas de descanso, lo que inhabilitará el servicio:
gcloud scheduler jobs create http hello-stop-instances \ --location=REGION \ --schedule="0 17 * * MON-FRI" \ --time-zone=America/Los_Angeles \ --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/ locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \ --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \ --http-method=PUT \ --message-body='{"launchStage":"BETA","scaling":{"manualInstanceCount":0}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Este comando crea un trabajo de Cloud Scheduler que realiza una llamada HTTP a la API de Cloud Run Admin y establece en cero las instancias de escalamiento manual. Esto inhabilita de manera efectiva el servicio, pero no los trabajos de Cloud Scheduler, que seguirán ejecutándose y restableciendo (y habilitando nuevamente) el servicio a 10 instancias según lo programado.