En esta página se describe cómo escalar manualmente tu servicio. También se proporcionan instrucciones para un caso práctico habitual: cambiar el número de instancias según una programación mediante tareas de Cloud Scheduler y la API Admin de Cloud Run.
Información general
De forma predeterminada, Cloud Run escala automáticamente hasta un número máximo de instancias especificado o predeterminado en función del tráfico y del uso de la CPU. Sin embargo, en algunos casos prácticos, puede que quieras definir un número específico de instancias mediante el escalado manual.
El escalado manual te permite definir un número específico de instancias, independientemente del tráfico o la utilización, y sin necesidad de volver a implementar. Todo esto te da la opción de escribir tu propia lógica de escalado mediante un sistema externo. Consulta un ejemplo de esto en Escalar en función de una programación.
Ajustes mínimos y máximos a nivel de revisión y escalado manual
Si configura el escalado manual de su servicio, se ignorarán los ajustes de instancias mínimas y máximas a nivel de revisión.
Divisiones del tráfico para el escalado manual
En la siguiente lista se describe cómo se asignan las instancias al dividir el tráfico con el escalado manual. Esto incluye el comportamiento de las revisiones solo de etiquetas de tráfico.
Durante una división del tráfico, a cada revisión se le asignan instancias de forma proporcional, según la división del tráfico, de forma similar a la división del tráfico con instancias mínimas a nivel de servicio.
Si el número de revisiones que reciben tráfico supera el número de instancias manual, algunas de las revisiones no tendrán instancias. El tráfico enviado a esas revisiones recibirá el mismo error que si las revisiones estuvieran inhabilitadas.
En todas las revisiones que reciban tráfico en una división de tráfico, se inhabilitarán 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:
- Si se define un número mínimo de instancias a nivel de revisión, se iniciará el número de instancias especificado, pero no se tendrá en cuenta en el número total de instancias manuales del servicio. La revisión no se escalará automáticamente.
- Si no se define el número mínimo de instancias a nivel de revisión, la revisión se amplía a una instancia como máximo en respuesta al tráfico enviado a la URL de la etiqueta.
Comportamiento de facturación con el escalado manual
Cuando usas el escalado manual, el comportamiento de facturación es similar al que se produce cuando usas la función instancias mínimas.
Es decir, con el escalado manual y la facturación basada en instancias, las instancias inactivas escaladas manualmente se facturan como instancias activas.
Si usas el escalado manual con la facturación basada en solicitudes, las instancias inactivas escaladas manualmente se facturan como instancias mínimas inactivas. Para obtener información completa sobre la facturación, consulta la página de precios.
Roles obligatorios
Para obtener los permisos que necesitas para desplegar servicios de Cloud Run, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Desarrollador de Cloud Run (
roles/run.developer
) en el servicio Cloud Run -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad de servicio -
Lector de Artifact Registry (
roles/artifactregistry.reader
) en el repositorio de Artifact Registry de la imagen de contenedor implementada (si procede)
Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos sobre roles de gestión de identidades y accesos de Cloud Run y permisos de gestión de identidades y accesos de Cloud Run. Si tu servicio de Cloud Run interactúa con APIs, como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad del servicio.Google Cloud Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.
Configurar el escalado
Puedes configurar el modo de escalado mediante la consola Google Cloud , la CLI de Google Cloud, un archivo YAML o una API al crear o actualizar un servicio:
Consola
En la Google Cloud consola, ve a Cloud Run:
Si vas a configurar un servicio nuevo, selecciona Servicios en el menú y haz clic en Implementar contenedor para que se muestre el formulario Crear servicio. Si va a configurar un servicio, haga clic en él para que se muestre el panel de detalles y, a continuación, haga clic en el icono del lápiz situado junto a Escalado en la parte superior derecha del panel de detalles.
Busca el formulario Escalado de servicio (para un servicio nuevo) o el formulario Editar escalado (para un servicio que ya tengas).
En el campo Número de instancias, especifica el número de instancias de contenedor del servicio.
Haga clic en Crear para crear un servicio o en Guardar para guardar un servicio.
gcloud
Para especificar el escalado de un nuevo servicio, usa el comando deploy:
gcloud run deploy SERVICE \ --scaling=INSTANCE_COUNT \ --image IMAGE_URL
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio.
- INSTANCE_COUNT: el número de instancias del servicio.
De esta forma, el servicio se configura para que se escale manualmente. Especifica el valor
0
para inhabilitar el servicio. Especifica el valorauto
para usar el comportamiento de autoescalado predeterminado de Cloud Run. - IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
Especifica el escalado de un servicio que ya tengas con el siguiente comando update:
gcloud run services update SERVICE \ --scaling=INSTANCE_COUNT
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración 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/scalingMode: MODE run.googleapis.com/manualInstanceCount: INSTANCE_COUNT
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio de Cloud Run
- MODE:
manual
para el escalado manual oautomatic
para el comportamiento de escalado automático predeterminado de Cloud Run. - INSTANCE_COUNT: el número de instancias que estás escalando manualmente para el servicio. Especifica el valor
0
para inhabilitar el servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
API REST
Para actualizar las instancias mínimas a nivel de servicio de un servicio concreto, envía una solicitud HTTP PATCH
al endpoint service
de la API Admin de Cloud Run.
Por ejemplo, si usas curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Haz los cambios siguientes:
- ACCESS_TOKEN: un token de acceso válido para una cuenta que
tenga los permisos de gestión de identidades y accesos para actualizar un servicio.
Por ejemplo, si has iniciado sesión en
gcloud
, puedes obtener un token de acceso mediantegcloud auth print-access-token
. Desde una instancia de contenedor de Cloud Run, puedes obtener un token de acceso mediante el servidor de metadatos de la instancia de contenedor. - MANUAL_INSTANCE_COUNT: el número de instancias del servicio.
De esta forma, el servicio se configura para que se escale manualmente. Especifica el valor
0
para inhabilitar el servicio. - SERVICE: el nombre del servicio.
- REGION: la Google Cloud región en la que se ha implementado el servicio.
- PROJECT_ID: el ID del proyecto. Google Cloud
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform:resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "INSTANCE_COUNT"
}
}
Haz los cambios siguientes:
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
- REGION: la Google Cloud región. Por ejemplo,
europe-west1
. - IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - INSTANCE_COUNT: el número de instancias que estás escalando manualmente para el servicio. Este número de instancias se divide entre todas las revisiones con el tráfico especificado en función del porcentaje de tráfico que reciben.
Ver la configuración de escalado de un servicio
Para ver las instancias de configuración de escalado de tu servicio de Cloud Run, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Haz clic en el servicio que te interese para abrir el panel Detalles del servicio.
El ajuste de escalado actual se muestra en la parte superior derecha del panel de detalles del servicio, después de la etiqueta Escalado, junto al icono del lápiz.
gcloud
Usa el siguiente comando para ver la configuración de escalado actual del servicio:
gcloud run services describe SERVICE
Sustituye SERVICE por el nombre de tu servicio.
Busca el campo Scaling: Manual (Instances: )
cerca de la parte superior del texto devuelto por describe
.
YAML
Usa el siguiente comando para descargar la configuración YAML del servicio:
gcloud run services describe SERVICE --format export > service.yaml
La configuración del escalado se incluye en los atributos scalingMode
y manualInstanceCount
.
Inhabilitar un servicio
Cuando inhabilita un servicio, se permite que se completen las solicitudes que se estén procesando en ese momento.
Sin embargo, las solicitudes posteriores a la URL del servicio fallarán con un error Service unavailable
o Service disabled
.
Las solicitudes de revisiones de servicios 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 definir el escalado en cero. Puedes inhabilitar un servicio mediante la Google Cloud consola, la CLI de Google Cloud, un archivo YAML o una API:
Consola
En la Google Cloud consola, ve a Cloud Run:
Haga clic en el servicio que quiera inhabilitar para que se muestre su panel de detalles y, a continuación, haga clic en el icono de lápiz situado junto a Escalado en la parte superior derecha del panel de detalles.
Busca el formulario Editar escalado y selecciona Escalado manual.
En el campo Número de instancias, introduce el valor
0
(cero).Haz clic en Guardar.
gcloud
Para inhabilitar un servicio, usa el siguiente comando para definir el escalado en cero:
gcloud run services update SERVICE --scaling=0
Sustituye SERVICE por el nombre de tu servicio.
YAML
Descarga la configuración YAML de tu servicio:
gcloud run services describe SERVICE --format export > service.yaml
Asigna el valor cero (
0
) al atributomanualInstanceCount
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE annotations: run.googleapis.com/scalingMode: manual run.googleapis.com/manualInstanceCount: `0`
Sustituye 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 REST
Para inhabilitar un servicio, envía una solicitud HTTP PATCH
al endpoint service
de la API Cloud Run Admin.
Por ejemplo, si usas curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"scaling":{"manualInstanceCount":0 }}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount
Haz los cambios siguientes:
- ACCESS_TOKEN: un token de acceso válido para una cuenta que
tenga los permisos de gestión de identidades y accesos para actualizar un servicio.
Por ejemplo, si has iniciado sesión en
gcloud
, puedes obtener un token de acceso mediantegcloud auth print-access-token
. Desde una instancia de contenedor de Cloud Run, puedes obtener un token de acceso mediante el servidor de metadatos de la instancia de contenedor. - SERVICE: el nombre del servicio.
- REGION: la Google Cloud región en la que se ha implementado el servicio.
- PROJECT_ID: el ID del proyecto. Google Cloud
Terraform
Para inhabilitar un servicio, asigna el valor cero (0
) al atributo manual_instance_count
:
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE_NAME"
location = "REGION"
template {
containers {
image = "IMAGE_URL"
}
}
scaling {
scaling_mode = "MANUAL"
manual_instance_count = "0"
}
}
Haz los cambios siguientes:
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
- REGION: la Google Cloud región. Por ejemplo,
europe-west1
. - IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
Ejemplo de escalado basado en programaciones
Un caso de uso habitual del escalado manual es cambiar el número de instancias según un horario predefinido. En este ejemplo, usamos Cloud Scheduler para programar dos trabajos. Cada uno de ellos invoca la API Admin de Cloud Run para escalar el número de instancias. El primer trabajo configura el servicio para que se escale manualmente a 10 instancias durante el horario de oficina (de 9:00 a 17:00, de lunes a viernes). El segundo trabajo configura el servicio para que se reduzca a cero instancias durante las horas de descanso.
Ten en cuenta que, al definir las instancias en cero, tal como se muestra en el ejemplo, se inhabilita el servicio, pero no las tareas de Cloud Scheduler. Esas tareas seguirán ejecutándose y restablecerán (y volverán a habilitar) el servicio a 10 instancias según lo programado.
En este ejemplo, usamos la guía de inicio rápido de Cloud Run para simplificar el proceso, pero puedes usar el servicio que quieras.
Para configurar el escalado manual basado en una programación, sigue estos pasos:
Implementa tu servicio con el siguiente comando:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Haz los cambios siguientes:
- REGION: la región en la que se despliega el servicio de Cloud Run.
- SERVICE: el nombre del servicio de Cloud Run.
Configura tu servicio para que se escale manualmente a 10 instancias con el siguiente comando:
gcloud run services update SERVICE \ --region=REGION \ --scaling=10
Crea una tarea de Cloud Scheduler que escale manualmente las instancias del servicio a 10 instancias durante el horario de apertura:
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='{"scaling":{"manualInstanceCount":10}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Este comando crea un trabajo de Cloud Scheduler que hace una llamada HTTP a la API Admin de Cloud Run y define el número de instancias en
10
. En el ejemplo se usa la cuenta de servicio predeterminada de Compute EnginePROJECT_NUMBER-compute@developer.gserviceaccount.com
para los trabajos de Cloud Scheduler. Puedes usar cualquier cuenta de servicio que tenga permisos para actualizar servicios de Cloud Run.Crea una tarea de Cloud Scheduler que escale manualmente las instancias del servicio a cero durante las horas de inactividad para 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='{"scaling":{"manualInstanceCount":0}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Este comando crea un trabajo de Cloud Scheduler que hace una llamada HTTP a la API Admin de Cloud Run y establece en cero las instancias de escalado manual. De esta forma, se inhabilita el servicio, pero no las tareas de Cloud Scheduler, que seguirán ejecutándose y restableciendo (y volviendo a habilitar) el servicio a 10 instancias según lo programado.