De forma predeterminada, Cloud Run se optimiza para obtener un alto rendimiento con un objetivo de uso del 60% para la CPU y la simultaneidad, y escala la cantidad de instancias automáticamente para controlar todas las solicitudes entrantes. Sin embargo, en algunos casos de uso, es posible que desees configurar qué factores de escalamiento usar, como solo la CPU, y establecer objetivos personalizados para el uso.
Cloud Run proporciona controles de escalamiento para darte más propiedad sobre los comportamientos de escalamiento de tu servicio, lo que te permite tomar decisiones fundamentadas sobre el escalamiento de tu carga de trabajo según tus requisitos. Puedes habilitar el comportamiento de escalamiento mejorado si conservas los objetivos de uso predeterminados o configuras los siguientes objetivos de uso personalizados:
- Uso objetivo para el escalamiento basado en la CPU
- Uso objetivo para el escalamiento basado en la simultaneidad
Con los controles de escalamiento, puedes optimizar los costos y mejorar la previsibilidad de tus servicios. Para obtener más información sobre el comportamiento de ajuste de escala automático predeterminado de los servicios de Cloud Run, consulta Información acerca del ajuste de escala automático de instancias en los servicios de Cloud Run.
Límites de configuración
Se aplican los siguientes límites a los objetivos de escalamiento personalizados:
| Controlador de escalamiento | % predeterminado | % mínimo configurable | % máximo configurable |
|---|---|---|---|
CPU target utilization |
60% | 10% | 95% |
Concurrency target utilization |
60% | 10% | 95% |
Habilita el comportamiento de escalamiento mejorado
El escalador automático de Cloud Run responde de cerca a los objetivos que configuras, incluso para los servicios con una cantidad baja de instancias. Considera habilitar esta función para mejorar la previsibilidad del escalamiento, incluso si deseas mantener los objetivos de uso predeterminados del 60% para la CPU y la simultaneidad.
Para habilitar esta función, puedes usar gcloud CLI o YAML cuando implementas una revisión nueva.
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.
gcloud
Para establecer los valores de uso de CPU objetivo y uso de simultaneidad objetivo de una revisión determinada, ejecuta el siguiente comando gcloud beta run services update:
gcloud beta run services update SERVICE --scaling-cpu-target=0.6 \ --scaling-concurrency-target=0.6
Reemplaza SERVICE por el nombre del servicio.
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
Agrega los atributos
run.googleapis.com/scaling-cpu-targetyrun.googleapis.com/scaling-concurrency-target.apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: '0.6' run.googleapis.com/scaling-concurrency-target: '0.6'
Reemplaza SERVICE por el nombre del servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Configura objetivos personalizados
Define objetivos de uso personalizados para optimizar los costos o mejorar el rendimiento de tus cargas de trabajo. Para ello, configura objetivos de uso de CPU y simultaneidad específicos dentro de los límites de configuració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.
Puedes configurar los controles de escalamiento con gcloud CLI o YAML cuando implementas una revisión nueva.
gcloud
Para actualizar los valores de uso de CPU objetivo y uso de simultaneidad objetivo de una revisión determinada,
ejecuta el comando gcloud beta run services update.
Para actualizar el uso de CPU objetivo, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET
Reemplaza lo siguiente:
SERVICE: Es el nombre de tu servicio.
CPU_TARGET: Es el objetivo para el uso de CPU. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
Para actualizar el uso de simultaneidad objetivo, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-concurrency-target=CONCURRENCY_TARGET
Reemplaza lo siguiente:
SERVICE: Es el nombre de tu servicio.
CONCURRENCY_TARGET: Es el objetivo para el uso de simultaneidad. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
Para actualizar el uso de CPU objetivo y el uso de simultaneidad objetivo, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-cpu-target=CPU_TARGET \ --scaling-concurrency-target=CONCURRENCY_TARGET
Reemplaza lo siguiente:
- SERVICE: Es el nombre de tu servicio.
- CPU_TARGET: Es el objetivo para el uso de CPU. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
- CONCURRENCY_TARGET: Es el objetivo para el uso de simultaneidad. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
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
Para actualizar el uso de CPU objetivo y el uso de simultaneidad objetivo, agrega los atributos
run.googleapis.com/scaling-cpu-targetyrun.googleapis.com/scaling-concurrency-target:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: 'CPU_TARGET' run.googleapis.com/scaling-concurrency-target: 'CONCURRENCY_TARGET'
Reemplaza lo siguiente:
- SERVICE: Es el nombre de tu servicio.
- CPU_TARGET: Es el objetivo para el uso de CPU. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
- CONCURRENCY_TARGET: Es el objetivo para el uso de simultaneidad. Especifica un valor de 0.1 a 0.95. Solo puedes configurar hasta dos dígitos después del punto decimal.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Inhabilita los controles de escalamiento
Puedes inhabilitar el uso de CPU objetivo o el uso de simultaneidad objetivo, pero no ambos. Un controlador de escalamiento siempre debe estar activo. Para inhabilitar los controles de escalamiento, restablece los valores de uso predeterminados en lugar de inhabilitarlos. Cuando inhabilitas un controlador de escalamiento, Cloud Run ignora esa métrica mientras toma decisiones de escalamiento.
Puedes inhabilitar los controles de escalamiento con gcloud CLI o YAML cuando implementas una revisión nueva.
gcloud
Puedes inhabilitar el uso de CPU objetivo o el uso de simultaneidad objetivo ejecutando el gcloud beta run services update comando.
Para escalar solo por CPU, inhabilita el objetivo de simultaneidad ejecutando el siguiente comando:
gcloud beta run services update SERVICE --scaling-concurrency-target=disabled
Reemplaza SERVICE por el nombre del servicio.
Para escalar solo por simultaneidad, inhabilita el objetivo de CPU ejecutando el siguiente comando:
gcloud beta run services update SERVICE --scaling-cpu-target=disabled
Reemplaza SERVICE por el nombre del servicio.
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
Para escalar solo por CPU, inhabilita el objetivo de simultaneidad configurando el atributo
run.googleapis.com/scaling-concurrency-targetendisabled:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-concurrency-target: disabled
Reemplaza SERVICE por el nombre del servicio.
Para escalar solo por simultaneidad, inhabilita el objetivo de CPU configurando el atributo
run.googleapis.com/scaling-cpu-targetendisabled:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: annotations: run.googleapis.com/scaling-cpu-target: disabled
Reemplaza SERVICE por el nombre del servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Restablece los valores predeterminados
Cuando restableces los valores de uso de CPU objetivo o uso de simultaneidad objetivo a los valores predeterminados, inhabilitas la función de controles de escalamiento. Puedes restablecer los controles de escalamiento a los valores predeterminados con gcloud CLI o YAML cuando implementas una revisión nueva.
gcloud
Para restablecer el uso de CPU objetivo y el uso de simultaneidad objetivo a sus valores predeterminados,
ejecuta el comando gcloud beta run services update.
Para restablecer el uso de CPU objetivo a su valor predeterminado, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-cpu-target=default
Reemplaza SERVICE por el nombre del servicio.
Para restablecer el uso de simultaneidad objetivo a su valor predeterminado, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-concurrency-target=default
Reemplaza SERVICE por el nombre del servicio.
Para restablecer el uso de CPU objetivo y el uso de simultaneidad objetivo a sus valores predeterminados, ejecuta el siguiente comando:
gcloud beta run services update SERVICE --scaling-cpu-target=default \ --scaling-concurrency-target=default
Reemplaza SERVICE por el nombre del servicio.
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
Para restablecer el uso de CPU y el uso de simultaneidad a sus objetivos predeterminados, quita los atributos
run.googleapis.com/scaling-cpu-targetyrun.googleapis.com/scaling-concurrency-targetde tu archivo YAML:apiVersion: serving.knative.dev/v1 kind: Service metadata: annotations: run.googleapis.com/launch-stage: BETA name: SERVICE spec: template: metadata: # Remove the scaling target annotations to restore defaults ...
Reemplaza SERVICE por el nombre del servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Visualiza la configuración de escalamiento
Puedes ver tu configuración de escalamiento con gcloud CLI o YAML.
Console
En la Google Cloud consola de, ve a la página Servicios de Cloud Run:
Haz clic en tu servicio para abrir el panel Detalles del servicio.
Haz clic en la pestaña Revisiones.
En el panel de detalles a la derecha, consulta la configuración de Métricas de ajuste de escala automático que aparece en la pestaña Contenedores.
gcloud
Usa el siguiente comando:
gcloud run services describe SERVICE
Reemplaza SERVICE por el nombre del servicio.
Busca el valor de la configuración de Uso de CPU objetivo: y Uso de simultaneidad objetivo: en la configuración que se muestra.
Prácticas recomendadas
Puedes optimizar los costos y evitar el escalamiento excesivo si disminuyes la cantidad de instancias, o puedes mejorar el rendimiento si realizas un escalamiento más agresivo en respuesta a controladores específicos. Para determinar los objetivos de uso óptimos para tu carga de trabajo, usa las siguientes estrategias:
Antes de ajustar los objetivos, identifica qué métrica activa el escalamiento de tu servicio. Sigue estos pasos para identificar la métrica de escalamiento:
Ve al Explorador de métricas en la Google Cloud consola para revisar el gráfico de supervisión del uso de CPU y simultaneidad.
Busca y selecciona la métrica
run.googleapis.com/scaling/recommended_instancesy configura Agregación en Sin agregar para ver la métrica agrupada por controlador de escalamiento.
El controlador con el valor más alto es el que controla la cantidad de instancias de tu servicio. Si deseas que un controlador diferente tenga prioridad o si deseas escalar de forma más o menos agresiva, ajusta el objetivo de uso para ese controlador específico.
Ajusta los objetivos de forma incremental y espera unos minutos entre los ajustes para observar el efecto en el rendimiento.
Usa la división del tráfico para probar objetivos de escalamiento nuevos. Para ello, dirige un pequeño porcentaje de tu tráfico a una revisión separada antes de implementarlos en todo el servicio.
Acerca de los objetivos de uso bajos
Si reduces el objetivo de uso al mínimo de 0.1 (10%), se modificará significativamente la forma en que se escala tu servicio.
Estos son algunos beneficios de establecer un objetivo de uso bajo:
Alta disponibilidad del servicio: Tu servicio se escala mucho antes, lo que mantiene un gran búfer de capacidad inactiva para controlar los aumentos repentinos de tráfico sin afectar la latencia.
Escalamiento más rápido con cantidades bajas de instancias: Los servicios se escalan de manera más confiable antes de alcanzar cuellos de botella de uso alto.
Estos son algunos inconvenientes de establecer objetivos de uso bajos:
- Posibilidad de aumento de costos: Ejecutas más instancias de las estrictamente necesarias para tu carga actual, lo que genera una facturación más alta.
- Decisiones de escalamiento más frecuentes: Con usos más bajos, Cloud Run tiene una tolerancia menor y no espera tanto antes de escalar.
¿Qué sigue?
- Para obtener información sobre otras opciones de escalamiento, consulta Escalamiento manual.
- Para administrar la cantidad máxima de instancias de los servicios de Cloud Run, consulta Configura una cantidad máxima de instancias.
- Para administrar la cantidad máxima de solicitudes simultáneas controladas por cada instancia, consulta Configura la simultaneidad.
- Si deseas optimizar la configuración de simultaneidad, consulta las sugerencias de desarrollo para ajustar la simultaneidad.
- Si quieres especificar que una instancia inactiva se siga ejecutando a fin de minimizar la latencia o los inicios en frío en las primeras solicitudes, consulta Usa
min-instancepara habilitar instancias inactivas.