Definir el número mínimo de instancias de los servicios

En esta página se describe cómo habilitar las instancias inactivas de un servicio configurando un número mínimo de instancias mediante el comportamiento de autoescalado de Cloud Run predeterminado. Para escalar tu servicio manualmente, consulta la sección sobre escalado manual.

Si necesitas tener más control sobre el comportamiento de autoescalado de tu servicio, puedes definir un número mínimo de instancias para evitar que los contenedores tarden en iniciarse y reducir la latencia del servicio. En el caso de los servicios de Cloud Run, Cloud Run reduce de forma predeterminada el número de instancias en función del número de solicitudes entrantes.

Sin embargo, si tu servicio requiere una latencia reducida, sobre todo al pasar de cero instancias activas, puedes cambiar este comportamiento predeterminado especificando un número mínimo de instancias de contenedor que se mantengan activas y listas para atender solicitudes. Consulta Consejos generales para el desarrollo para obtener más información sobre esta optimización.

Cloud Run elimina las instancias que no están procesando solicitudes (inactivas). Si se define un número mínimo de instancias, Cloud Run mantiene en ejecución al menos ese número de instancias, aunque no estén procesando solicitudes. Las instancias activas que superen el número min-instances podrían quedar inactivas si no reciben solicitudes.

Por ejemplo, si min-instances es 10 y el número de instancias activas es 0, el número de instancias inactivas es 10. Cuando el número de instancias activas aumenta a 6, el número de instancias inactivas disminuye a 4.

Ten en cuenta que, si un servicio no ha servido tráfico recientemente, la métrica de instancias activas puede indicar que no hay ninguna instancia activa, aunque hayas especificado una o más instancias mínimas.

Las instancias mínimas se pueden reiniciar en cualquier momento.

Facturación

Las instancias que se mantienen en ejecución mediante la función de número mínimo de instancias generan costes de facturación.

En el siguiente diagrama se muestra cómo funciona la facturación durante el ciclo de vida de una instancia cuando se configuran instancias mínimas para un servicio o una revisión:

Llama a la API Admin de Cloud Run desde la consola Google Cloud .
Imagen 1. Una instancia de ejemplo que recibe y procesa tres solicitudes.

En función de la configuración de facturación, el servicio se factura de la siguiente manera:

  • En el caso de la facturación basada en solicitudes, se te cobra una tarifa más baja cuando las instancias están inactivas y esperan a procesar solicitudes. Si el número mínimo de instancias es 0, no se te cobrará cuando las instancias estén inactivas.
  • En el caso de la facturación basada en instancias, se te cobra la tarifa predeterminada durante todo el ciclo de vida de la instancia. El tiempo que transcurre entre el inicio y el cierre incluye los momentos en los que una instancia está procesando solicitudes o está inactiva. Es decir, aunque min instances se haya definido en 0, se te seguirá facturando la tarifa predeterminada. Esta opción es adecuada si necesitas CPU fuera de las solicitudes. Si min instances se define como 0, se te cobrará la tarifa predeterminada.

Como estos cargos son predecibles, Google recomienda comprar un descuento por compromiso de uso.

Aplicar instancias mínimas a nivel de servicio en lugar de a nivel de revisión

Puede configurar el número mínimo de instancias a nivel de servicio o de revisión. Google recomienda que apliques instancias mínimas a nivel de servicio y que evites combinar instancias mínimas a nivel de servicio y de revisión. Consulta más información sobre el comportamiento cuando configuras los ajustes de escalado a nivel de servicio y de revisión.

Si aplicas instancias mínimas a nivel de revisión, los ajustes se aplicarán al implementar la revisión. Si aplicas esta función a nivel de servicio, el ajuste se aplicará sin necesidad de implementar una nueva revisión.

Revisiones e instancias mínimas

Cuando se definen instancias mínimas a nivel de servicio, las solicitudes entrantes se distribuyen entre todas las revisiones que están sirviendo tráfico proporcionalmente al reparto del tráfico.

Cuando se define un número mínimo de instancias a nivel de revisión, las instancias mínimas se inician siempre que se haga referencia a la revisión en una división del tráfico o se le asigne una etiqueta de tráfico. Esto significa que la instancia se factura cuando procesa solicitudes y también cuando espera solicitudes entrantes.

Revisiones etiquetadas e instancias mínimas de nivel de servicio

Si se inicia una revisión con una etiqueta asignada, la instancia se contabiliza en las instancias mínimas a nivel de servicio si forma parte de una división del tráfico.

Enrutamiento de solicitudes con instancias mínimas

Cuando configuras un número mínimo de instancias, Cloud Run distribuye las solicitudes entrantes de forma uniforme entre todas las instancias aprovisionadas. Es importante entender este comportamiento para gestionar los costes, sobre todo si usas la facturación basada en solicitudes o si tienes previsto mantener instancias de reserva activa inactivas. Para minimizar los costes, defina el número mínimo de instancias como el número de instancias necesarias para atender su tráfico habitual.

Roles obligatorios

Para obtener los permisos que necesitas para configurar e implementar servicios de Cloud Run, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Si vas a desplegar un servicio o una función a partir de código fuente, también debes tener otros roles concedidos en tu proyecto y en la cuenta de servicio de Cloud Build.

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 un número mínimo de instancias a nivel de servicio

De forma predeterminada, las instancias de contenedor tienen desactivadas las instancias mínimas a nivel de servicio, con un valor de 0. Puedes cambiar este valor predeterminado mediante laGoogle Cloud consola, la CLI de Google Cloud o un archivo YAML:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. 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. Busca el formulario Escalado de servicios.

  3. Si vas a configurar un servicio, haz clic en él para que se muestre su panel de detalles y, a continuación, haz clic en Editar la configuración de escalado del nivel de servicio en la parte superior derecha del panel de detalles.

  4. En el campo Número mínimo de instancias, especifica el número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes.

  5. Haz clic en Crear para crear un servicio o en Implementar para implementar un servicio.

gcloud

Actualiza el número mínimo de instancias de un servicio determinado con el siguiente comando:

gcloud run services update SERVICE --min MIN-VALUE

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • MIN-VALUE: el número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes. Especifica default para borrar cualquier ajuste de instancia mínimo.

También puedes definir el número mínimo de instancias durante la implementación con el siguiente comando:

gcloud run deploy --image IMAGE_URL --min MIN-VALUE

Haz los cambios siguientes:

  • 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 formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • MIN-VALUE: el número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes. Especifica default para borrar cualquier ajuste de instancia mínima.

YAML

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

  1. 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
  2. Actualice el atributo run.googleapis.com/minScale:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
        run.googleapis.com/minScale: 'MIN_INSTANCE'

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run
    • MIN-INSTANCE: número de instancias que se mantendrán activas y listas para recibir solicitudes.
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Bibliotecas de cliente

Para actualizar las instancias mínimas a nivel de servicio de tu servicio desde el código, sigue estos pasos:

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": { "minInstanceCount": MIN-VALUE }}' \
https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.minInstanceCount

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 mediante gcloud 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.
  • MIN-VALUE: número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes.
  • SERVICE: el nombre del servicio.
  • REGION: la Google Cloud región del servicio.
  • PROJECT-ID: el ID del proyecto. Google Cloud

Ver las instancias mínimas a nivel de servicio

Para ver la configuración actual de las instancias mínimas a nivel de servicio de tu servicio de Cloud Run, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interese para abrir el panel Detalles del servicio.

  3. El ajuste actual se muestra en la parte superior derecha del panel de detalles del servicio, junto a Escalado.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busque el valor de Escalado: automático (Mín.: MIN_VALUE; Máx.: MAX_VALUE) en la configuración devuelta.

Configurar un número mínimo de instancias a nivel de revisión

Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.

De forma predeterminada, las instancias de contenedor tienen min-instances desactivado, con un ajuste de 0. Puedes cambiar este valor predeterminado mediante la consola, la CLI de Google Cloud o un archivo YAML cuando crees un servicio o despliegues una revisión: Google Cloud

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.

  3. Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • En el campo Número mínimo de instancias, especifica el número de instancias de contenedor que se deben mantener activas y listas para recibir solicitudes.
  5. Haz clic en Crear o en Implementar.

gcloud

Para actualizar min-instance de un servicio concreto, usa el siguiente comando:

gcloud run services update SERVICE --min-instances MIN-VALUE

Haz los cambios siguientes:

  • SERVICE: el nombre de tu servicio.
  • MIN-VALUE: el número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes. Especifica default para borrar cualquier ajuste de instancia mínimo.

También puedes definir min-instance durante la implementación con el siguiente comando:

gcloud run deploy --image IMAGE_URL --min-instances MIN-VALUE

Haz los cambios siguientes:

  • 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 formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • MIN-VALUE: el número de instancias de contenedor que se mantendrán activas y listas para recibir solicitudes. Especifica default para borrar cualquier ajuste de instancia mínimo.

YAML

  1. 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
  2. Actualice el atributo autoscaling.knative.dev/minScale::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/minScale: 'MIN-INSTANCE'
          name: REVISION

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu servicio de Cloud Run
    • MIN-INSTANCE: número de instancias que se mantendrán activas y listas para recibir solicitudes.
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

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 recurso google_cloud_run_v2_service en tu configuración de Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-min-instances"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      # Min instances
      min_instance_count = 1
    }
  }
}

El recurso google_cloud_run_v2_service anterior especifica un número mínimo de instancias de 1 en template.scaling. Sustituye 1 por el número mínimo de instancias que quieras.

Ver las instancias mínimas a nivel de revisión

Para ver la configuración actual de instancias mínimas a nivel de revisión de tu servicio de Cloud Run, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio que te interese para abrir el panel Detalles del servicio.

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles de la derecha, el ajuste Revisión de instancias mínimas se encuentra en la pestaña Contenedor.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca el valor de Min instances: en la configuración devuelta.

Ejemplos

En las secciones siguientes se muestra el comportamiento del servicio al configurar instancias mínimas.

Usar instancias mínimas o máximas a nivel de servicio y de revisión

En la siguiente tabla se muestra el comportamiento si combinas instancias mínimas a nivel de servicio e instancias mínimas o máximas a nivel de revisión:

Ajuste de configuración Comportamiento
Se definen tanto las instancias mínimas del nivel de servicio como las instancias mínimas del nivel de revisión. El valor efectivo de la revisión es el mayor de las instancias mínimas a nivel de revisión y las instancias mínimas a nivel de servicio.
Se definen tanto las instancias mínimas del nivel de servicio como las instancias máximas del nivel de revisión. El valor efectivo de la revisión es el menor de las instancias máximas a nivel de revisión y las instancias mínimas a nivel de servicio.

Esto se aplica incluso si el número máximo de instancias a nivel de revisión impide que el servicio alcance el número de instancias mínimas configuradas a nivel de servicio.

Usar instancias mínimas a nivel de servicio con división del tráfico

Si usas la división del tráfico, las instancias mínimas a nivel de servicio se dividen entre las revisiones en función de la proporción de la división del tráfico. Por ejemplo, si el número mínimo de instancias a nivel de servicio es 10, una división del tráfico del 50 % asigna 5 instancias mínimas a nivel de servicio a cada revisión.

En la siguiente tabla se muestran ejemplos de escenarios de configuración:

Ejemplo de caso práctico Ejemplo de configuración Comportamiento resultante
No hay ajustes a nivel de revisión Número mínimo de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 0
  • Instancia mínima de la revisión B: 0
  • División del tráfico: 60/40
La revisión A recibe 6 instancias de las instancias mínimas a nivel de servicio proporcionales a la división del tráfico. La revisión B recibe 4 instancias del mínimo de instancias a nivel de servicio, proporcionalmente al reparto del tráfico.
Recibir más instancias que el mínimo a nivel de servicio debido a las instancias mínimas a nivel de revisión Número mínimo de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 6
  • Instancia mínima de la revisión B: 0
  • División del tráfico: 50/50
La revisión A recibe 6 instancias del número mínimo de instancias a nivel de revisión. La revisión B recibe 5 instancias de las instancias mínimas a nivel de servicio proporcionales a la división del tráfico. Esto supera el número mínimo de instancias del nivel de servicio y es intencionado.
Recibes menos instancias que el mínimo de nivel de servicio debido al número máximo de instancias a nivel de revisión. Número mínimo de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 0
  • Número máximo de instancias de la revisión A: 3
  • Instancia mínima de la revisión B: 0
  • División del tráfico: 50/50
La revisión A recibe 3 instancias de las instancias mínimas a nivel de servicio en función de la división del tráfico, pero está limitada a las instancias máximas de su nivel de revisión.
La revisión B recibe 5 instancias de las instancias mínimas a nivel de servicio proporcionales a la división del tráfico. Esto da como resultado 8 instancias de nivel de servicio, ya que se pierden 2 debido al número máximo de instancias de nivel de revisión de la revisión A.
El número mínimo de instancias a nivel de servicio es mayor que el número de revisiones en la división del tráfico y hay una cantidad fraccionaria de instancias proporcional a la división del tráfico Número mínimo de instancias a nivel de servicio: 3 La revisión A obtiene 1 instancia mínima y la revisión B obtiene 2 instancias mínimas. El número de instancias del servicio es 3.

Determinar el número mínimo de instancias necesarias

Si el número mínimo de instancias es superior al que se requiere para tu tráfico habitual, es posible que muchas instancias se activen ligeramente y que cada una procese algunas solicitudes. Por ejemplo, si tu servicio suele requerir 200 instancias para la carga máxima, pero el número mínimo de instancias se ha configurado en 600, las solicitudes entrantes se distribuirán entre las 600 instancias. Como resultado, muchas de estas 600 instancias se activan parcialmente y cada una gestiona una pequeña parte del tráfico, en lugar de que unas 200 instancias estén muy activas y las 400 restantes permanezcan completamente inactivas.

Para minimizar los costes (con una mayor utilización en menos instancias), asigna a las instancias mínimas un valor que se ajuste al número real de instancias necesarias para atender tu tráfico habitual.

Además, cuando el autoescalado aprovisiona instancias adicionales por encima del número mínimo de instancias configurado, Cloud Run prefiere enrutar las solicitudes entrantes primero a las instancias mínimas configuradas antes de enviar solicitudes a las instancias autoescaladas. Con la facturación basada en solicitudes, este enrutamiento preferente a las instancias mínimas configuradas reduce los costes, ya que se llenan las instancias mínimas configuradas antes de usar las instancias autoescaladas. Ten en cuenta que este enrutamiento preferente también puede provocar que las instancias mínimas configuradas tengan una utilización mayor que las instancias autoescaladas, en función de la cantidad de tráfico.