Establece instancias mínimas para los servicios

Esta página describe cómo habilitar instancias inactivas para un servicio configurando instancias mínimas utilizando el comportamiento predeterminado de autoescalado de Cloud Run. Para ajustar manualmente la escala de tu servicio, consulta ajuste de escala manual.

Si necesitas más control sobre el comportamiento del ajuste de escala automático de tu servicio, puedes establecer una cantidad mínima de instancias para evitar tiempos de inicio lentos del contenedor y reducir la latencia del servicio. En los servicios de Cloud Run, de forma predeterminada, Cloud Run reduce la escala de la cantidad de instancias según el número de solicitudes entrantes.

Sin embargo, si tu servicio requiere una latencia reducida, especialmente cuando se escala desde cero instancias activas, puedes cambiar este comportamiento predeterminado si especificas una cantidad mínima de instancias de contenedor que se deben mantener en espera y listas para entregar solicitudes. Consulta Sugerencias generales para el desarrollo a fin de obtener más detalles sobre esta optimización.

Cloud Run quita las instancias que no procesan solicitudes (inactivas). Con un número mínimo de instancias configurado, Cloud Run mantiene en ejecución al menos la cantidad mínima de instancias, incluso si no están procesando solicitudes. Las instancias activas por encima del número min-instances podrían volverse inactivas, si no reciben solicitudes.

Por ejemplo, si min-instances es 10 y la cantidad de instancias activas es 0, entonces la cantidad de instancias inactivas es 10. Cuando la cantidad de instancias activas aumenta a 6, la cantidad de instancias inactivas disminuye a 4.

Ten en cuenta que, si un servicio no entregó tráfico recientemente, la métrica de instancias activas puede indicar que no hay instancias activas, incluso si especificaste una o más para la cantidad mínima de instancias.

La cantidad mínima de instancias se puede reiniciar en cualquier momento.

Prácticas recomendadas para la alta disponibilidad

Para asegurarte de que tu servicio siga teniendo una alta disponibilidad, considera configurar al menos 3 instancias mínimas.

Limitaciones de la cantidad mínima de instancias

La cantidad mínima de instancias es un objetivo de mejor esfuerzo para mantener las instancias en espera y listas. Es posible que experimentes disminuciones temporales por debajo de las instancias mínimas configuradas debido a los siguientes riesgos no mitigados, incluso si configuras 3 o más instancias:

  • Capacidad de zona o región: En caso de agotamiento severo de la capacidad en una zona o región, es posible que el sistema no pueda iniciar o ejecutar instancias.
  • Reequilibrio de infraestructura: Ocasionalmente, la infraestructura subyacente se reequilibra, lo que puede causar un retraso temporal en la puesta en marcha de instancias de reemplazo. Puedes obtener más información sobre cómo se finalizan las instancias en la documentación sobre el cierre de instancias.
  • Fallas de la aplicación: Si tu contenedor falla durante el inicio o no pasa las verificaciones de estado de forma constante, el sistema intentará iniciar instancias de forma continua para alcanzar el mínimo, pero la cantidad de instancias en buen estado y listas para entregar contenido permanecerá por debajo del límite inferior configurado.
  • Límites de cuota y facturación: Si tu proyecto alcanza los límites de cuota de CPU o memoria, o si la facturación está inhabilitada, la plataforma detendrá el ajuste de escala y podría finalizar las instancias independientemente de la configuración de instancias mínimas.

Facturación

Las instancias que se mantienen en ejecución utilizando la función de instancias mínimas generan costos de facturación.

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

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

Según la configuración de facturación establecida, el servicio se factura de la siguiente manera:

  • En el caso de la facturación basada en solicitudes, se te factura a una tarifa más baja cuando las instancias están inactivas y esperan para procesar solicitudes. Si min instances está configurado en 0, no se le facturará cuando las instancias estén inactivas.
  • En el caso de la facturación basada en instancias, se te factura la tarifa predeterminada durante todo el ciclo de vida de la instancia. El tiempo de inicio y cierre incluye los momentos en que una instancia está procesando solicitudes o está inactiva. En otras palabras, incluso si min instances está configurado en 0, se le seguirá facturando la tarifa predeterminada. Esta opción funciona bien si necesita CPU fuera de las solicitudes. Si min instances se establece en 0, se le facturará la tarifa predeterminada.
Dado que estos cargos son predecibles, Google recomienda adquirir un descuento por compromiso de uso.

Aplica instancias mínimas a nivel de servicio en comparación con a nivel de revisión

Puedes 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 evites combinar instancias mínimas a nivel de servicio y de revisión. Obtenga más información sobre el comportamiento cuando configure los ajustes de escalado a nivel de servicio y a nivel de revisión.

Si aplicas instancias mínimas a nivel de revisión, la configuración entrará en vigor cuando se implemente la revisión. Si aplicas esta función a nivel del servicio, la configuración entra en vigor sin necesidad de implementar una revisión nueva.

Revisiones y número mínimo de instancias

Cuando se establece la cantidad mínima de instancias a nivel del servicio, las solicitudes entrantes se distribuyen a todas las revisiones que entregan tráfico de manera proporcional a la división del tráfico.

Cuando se establecen instancias mínimas a nivel de revisión, se inician instancias mínimas cada vez que se ejecuta la revisión a la que se hace referencia en una división del tráfico o tiene una etiqueta de tráfico asignada. Esto significa que la instancia se factura tanto al procesar solicitudes como al esperar solicitudes entrantes.

Revisiones etiquetadas e instancias mínimas a nivel de servicio

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

Enrutamiento de solicitudes con instancias mínimas

Cuando estableces instancias mínimas, Cloud Run distribuye las solicitudes entrantes de manera uniforme entre todas estas instancias aprovisionadas. Comprender este comportamiento es importante para administrar los costos, en especial con la facturación basada en solicitudes o si planeas mantener instancias de reserva activa inactivas. Para minimizar los costos, establezca el número mínimo de instancias en el número de instancias necesarias para atender su tráfico típico.

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:

Si implementas un servicio o una función desde el código fuente, también debes tener roles adicionales otorgados en tu proyecto y en la cuenta de servicio de Cloud Build.

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 lasGoogle Cloud APIs, 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 los permisos de implementación y cómo administrar el acceso.

Configura instancias mínimas a nivel de servicio

De forma predeterminada, las instancias de contenedor tienen las instancias mínimas a nivel de servicio desactivadas, con una configuración de 0. Puedes cambiar este valor predeterminado usando la consolaGoogle Cloud , Google Cloud CLI o un archivo YAML:

Console

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

    Ir a Cloud Run

  2. Selecciona Servicios en el menú de navegación de Cloud Run y haz clic en Implementar contenedor para configurar un servicio nuevo. Si quieres configurar un servicio existente, haz clic en él.

  3. Si quieres configurar un servicio existente, haz clic en la pestaña Escalado.

  4. En la sección Escalamiento del servicio, especifica la cantidad mínima de instancias de contenedor en el campo Cantidad mínima de instancias.

  5. Haga clic en Crear para un nuevo servicio. Haz clic en Ver diferencia y volver a implementar y, luego, en Implementar cambios para un servicio existente.

gcloud

Actualice el número mínimo de instancias para un servicio determinado utilizando el siguiente comando:

gcloud run services update SERVICE --min MIN-VALUE

Reemplaza lo siguiente:

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

Como alternativa, puedes configurar la cantidad mínima de instancias durante la implementación con el siguiente comando:

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

Reemplaza lo siguiente:

  • 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 debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • MIN-VALUE: Es la cantidad de instancias de contenedor que se mantendrán en espera, listas para recibir solicitudes. Especifica default para borrar cualquier configuración de número mínimo de instancias

YAML

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

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

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

    Reemplaza lo siguiente:

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

    gcloud run services replace service.yaml

    El comando gcloud run services replace usa de forma predeterminada el archivo service.yaml si está presente.

Bibliotecas cliente

Para actualizar las instancias mínimas a nivel de servicio de tu servicio desde el código, haz lo siguiente:

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

Reemplaza lo siguiente:

  • ACCESS_TOKEN: Es 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 con gcloud 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.
  • MIN-VALUE: Es la cantidad de instancias de contenedor que se mantendrán en espera, listas para recibir solicitudes.
  • SERVICE: El nombre del servicio
  • REGION: La Google Cloud región del servicio.
  • PROJECT-ID: Es el ID del proyecto de Google Cloud .

Visualiza el nivel mínimo de instancias en el nivel de servicio

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

Console

  1. En la consola de Google Cloud , ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

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

  3. Haz clic en la pestaña Ajuste.

  4. Busque la configuración Número mínimo de instancias en la sección Escalado del servicio.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Localice el valor de Scaling: Auto (Min: MIN_VALUE, Max: MAX_VALUE) en la configuración devuelta.

Configura la cantidad mínima de instancias a nivel de revisión

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

De forma predeterminada, las instancias de contenedor tienen min-instances desactivado, con una configuración de 0.

El escalado a nivel de revisión solo está disponible para los servicios que previamente tenían configurada esta función.

Console

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

    Ir a Cloud Run

  2. Selecciona Servicios en el menú de navegación de Cloud Run y haz clic en Implementar contenedor para configurar un servicio nuevo. Si quieres configurar un servicio existente, haz clic en él.

  3. Si configuras un servicio nuevo, completa la página de configuración del servicio inicial y, luego, haz clic en Contenedores, Herramientas de redes, Seguridad para expandir la página de configuración del servicio.

  4. Si quieres configurar un servicio existente, haz clic en la pestaña Escalado.

  5. En la sección Revisión de escalado, especifique el número mínimo de instancias de contenedor en el campo Número mínimo de instancias.

  6. Haz clic en Crear para un servicio nuevo. Haz clic en Ver diferencia y volver a implementar y, luego, en Implementar cambios para un servicio existente.

gcloud

Puedes actualizar el valor de min-instance de un servicio determinado mediante el siguiente comando:

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

Reemplaza lo siguiente:

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

También puedes configurar el valor de min-instance durante la implementación mediante el siguiente comando:

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

Reemplaza lo siguiente:

  • 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 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, listas para recibir solicitudes. Especifica default para borrar cualquier configuración de número mínimo de instancias

YAML

  1. 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
  2. Actualiza 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

    Reemplaza lo siguiente:

    • SERVICE: El nombre de tu servicio de Cloud Run
    • MIN-INSTANCE: el número de instancias que se mantendrán calientes, listas para recibir solicitudes.
    • REVISION: Un nombre de revisión nuevo o bórralo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir con los siguientes criterios:
      • Comienza con SERVICE-
      • Solo contiene 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

    El comando gcloud run services replace usa de forma predeterminada el archivo service.yaml si está presente.

Terraform

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Agrega 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 bajo template.scaling. Reemplaza 1 por tu propia cantidad mínima de instancias.

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

El ajuste de escala a nivel de revisión solo está disponible para los servicios que ya tenían configurada la función.

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

Console

  1. En la consola de Google Cloud , ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

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

  3. Haz clic en la pestaña Ajuste.

  4. Busque la configuración Número mínimo de instancias en la sección Escalado de revisión.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca el valor de Instancias mínimas: en la configuración que se muestra.

Ejemplos

En las siguientes secciones, se muestra el comportamiento del servicio cuando se configuran instancias mínimas.

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

La siguiente tabla muestra el comportamiento si se combinan instancias mínimas o máximas a nivel de servicio e instancias mínimas o máximas a nivel de revisión. Ten en cuenta que, cuando ambos parámetros entran en conflicto, el parámetro de configuración de instancias máximas limita y anula el parámetro de configuración de instancias mínimas.

Parámetros de configuración Comportamiento
Se establecen las instancias mínimas a nivel de servicio y a nivel de revisión. El valor efectivo para la revisión es el mayor entre las instancias mínimas a nivel de revisión y las instancias mínimas a nivel de servicio.
Se establecen las instancias mínimas a nivel de servicio y las instancias máximas a nivel de revisión. El valor efectivo para la revisión es el menor entre las instancias máximas a nivel de revisión y las instancias mínimas a nivel de servicio.

Esto es verdadero incluso si la cantidad máxima de instancias a nivel de revisión evita que el servicio alcance la cantidad de instancias configuradas para instancias mínimas a nivel de servicio.
La cantidad máxima de instancias del servicio se establece en un valor inferior a la cantidad mínima de instancias de una revisión. El valor efectivo de las instancias de la revisión está limitado al máximo del servicio.
Las instancias mínimas del servicio se establecen en un valor mayor que las instancias máximas de una revisión. El valor efectivo de las instancias de la revisión está limitado al máximo de la revisión.

Usa instancias mínimas de nivel de servicio con división de tráfico

Si usas la división del tráfico, las instancias mínimas a nivel de servicio se dividen entre las revisiones según la proporción de la división del tráfico. Por ejemplo, si las instancias mínimas a nivel de servicio equivalen a 10, una división del tráfico de 50/50 asigna 5 instancias mínimas a nivel de servicio a cada revisión.

En la siguiente tabla, se muestran situaciones de configuración de muestra:

Caso práctico de muestra Configuración de ejemplo Comportamiento resultante
No hay configuración de nivel de revisión Cantidad mínima de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 0
  • Instancias mínimas 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 de las instancias mínimas a nivel de servicio proporcionales a la división del tráfico.
Recibe más instancias que las instancias mínimas en el nivel de servicio debido a las instancias mínimas en el nivel de revisión Cantidad mínima de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 6
  • Instancias mínimas de la revisión B: 0
  • División del tráfico: 50/50
La revisión A recibe 6 instancias de las instancias mínimas 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 mínimo de instancias en el nivel de servicio y está previsto.
Recibes instancias mínimas en el nivel de servicio debido a la cantidad máxima de instancias a nivel de revisión. Cantidad mínima de instancias a nivel de servicio: 10
  • Instancias mínimas de la revisión A: 0
  • Instancias máximas de la revisión A: 3
  • Instancias mínimas de la revisión B: 0
  • División del tráfico: 50/50
La revisión A recibe 3 instancias de instancias mínimas a nivel de servicio que genera la división del tráfico, pero se limita a su cantidad máxima de instancias.
La revisión B recibe 5 instancias de instancias mínimas a nivel de servicio proporcionales a la división del tráfico. Esto da como resultado 8 instancias a nivel de servicio, ya que 2 se pierden debido a la cantidad máxima de instancias a nivel de revisión de la revisión A.
El mínimo de instancias en el nivel de servicio es mayor que la cantidad de revisiones en la división del tráfico y hay una cantidad fraccionaria de instancias proporcional a la división del tráfico Instancias mínimas de nivel de servicio: 3 La revisión A obtiene 1 instancia mínima y la revisión B obtiene 2 instancias mínimas. El recuento de instancias para el servicio es 3.

Determina la cantidad mínima de instancias necesarias

Si la cantidad mínima de instancias se establece en un valor superior al que se requiere para tu tráfico habitual, es posible que muchas instancias se activen ligeramente y cada una procese algunas solicitudes. Por ejemplo, si tu servicio generalmente requiere 200 instancias para la carga máxima, pero las instancias mínimas están configuradas en 600, las solicitudes entrantes se distribuirán entre las 600 instancias. Esto hace que muchas de estas 600 instancias se vuelvan algo activas, y cada una maneja una pequeña porción del tráfico, en lugar de que alrededor de 200 instancias estén muy activas y las 400 restantes permanezcan completamente inactivas.

Para minimizar los costos (con una mayor utilización en menos instancias), establece las instancias mínimas en un valor que se alinee estrechamente con la cantidad real de instancias necesarias para atender tu tráfico típico.

Además, cuando el ajuste de escala automático aprovisiona instancias adicionales por encima de las instancias mínimas configuradas, Cloud Run prefiere enrutar las solicitudes entrantes primero a las instancias mínimas configuradas antes de enviar solicitudes a las instancias con ajuste de escala automático. Con la facturación basada en solicitudes, este enrutamiento preferencial a las instancias mínimas configuradas reduce el costo, ya que completa las instancias mínimas configuradas antes de usar las instancias con ajuste de escala automático. Ten en cuenta que este enrutamiento preferencial también puede hacer que las instancias mínimas configuradas tengan un uso mayor que las instancias con ajuste de escala automático, según la cantidad de tráfico.