De forma predeterminada, las instancias de Cloud Run solo tienen asignación de CPU durante el procesamiento de la solicitud y el inicio y el apagado del contenedor. (Consulta Ciclo de vida de la instancia). Puedes cambiar este comportamiento para que la CPU siempre se asigne y esté disponible incluso cuando no hay solicitudes entrantes. Configurar la CPU para que se asigne siempre puede ser útil para ejecutar tareas en segundo plano de corta duración y otras tareas de procesamiento asíncrono.
Incluso si la CPU siempre está asignada, el ajuste de escala automático de Cloud Run aún sigue activo y puede finalizar las instancias si no son necesarias para controlar el tráfico entrante o la utilización de CPU actual fuera de las solicitudes. Una instancia nunca permanecerá inactiva durante más de 15 minutos después de procesar una solicitud, a menos que se mantenga activa mediante instancias mínimas.
La combinación de CPU asignada siempre con una cantidad de instancias mínimas da como resultado una cantidad de instancias en funcionamiento con acceso completo a los recursos de CPU, lo que permite casos de uso de procesamiento en segundo plano. Cuando se usa este patrón, Cloud Run aplica el ajuste de escala automático de instancia, incluso si un servicio usa la CPU fuera de cualquier solicitud.
Si usas sondeos de verificación de estado, la CPU se asigna para cada sondeo. Consulta los sondeos de verificación de estado del contenedor para obtener detalles de facturación.
Impacto en los precios
Si eliges que la CPU se asigne solo durante el procesamiento de solicitudes, se te cobrará por solicitud y solo cuando la instancia procese una solicitud. Si eliges la configuración siempre asignada de la CPU, se te cobrará por todo el ciclo de vida de la instancia. Consulta las tablas de precios de Cloud Run para obtener más información.
El recomendador de Google observa de forma automática el tráfico que recibe tu servicio de Cloud Run en el último mes y te recomendará cambiar de CPU asignada durante las solicitudes a CPU siempre asignada, si es más económico.
Cómo elegir la asignación de CPU adecuada
La elección de la asignación de CPU adecuada para tu caso de uso depende de varios factores, como los patrones de tráfico, la ejecución en segundo plano y el costo, cada uno de los cuales se describe en las siguientes secciones.
Consideraciones sobre los patrones de tráfico
- Se recomienda que la CPU solo se asigne durante el procesamiento de solicitudes cuando el tráfico entrante es esporádico, inestable o tiene incrementos bruscos.
- Se recomienda que la CPU esté siempre asignada cuando el tráfico entrante es estable y varía de forma lenta.
Consideraciones de ejecución en segundo plano
Seleccionar que la CPU esté siempre asignada te permite ejecutar tareas en segundo plano de corta duración y otros trabajos de procesamiento asíncrono después de mostrar respuestas. Por ejemplo:
- Aprovechar agentes de supervisión como OpenTelemetry que pueden ejecutarse en segundo plano
- Usar Goroutines de Go, async de Node.js, subprocesos de Java.js y corrutinas de Kotlin.
- Usar frameworks de aplicaciones que se basan en la programación incorporada/funcionalidades en segundo plano
Las instancias inactivas, incluidas las que se mantienen preparadas con las instancias mínimas, se pueden cerrar en cualquier momento. Si necesitas terminar las tareas pendientes antes de que finalice el contenedor, puedes atrapar SIGTERM para dar a una instancia un tiempo de gracia de 10 segundos antes de que se detenga.
Considera usar Cloud Tasks para ejecutar tareas asíncronas. Cloud Tasks reintenta las tareas con errores de forma automática y admite tiempos de ejecución de hasta 30 minutos.
Consideraciones de costo
Si actualmente usas la CPU asignada solo durante el procesamiento de solicitudes, laCPU asignada siempre es probablemente más económica si se dan las siguientes situaciones:
- El servicio de Cloud Run procesa una gran cantidad de solicitudes actuales a una velocidad bastante estable
- No ves muchas instancias “inactivas” cuando observas la métrica de recuento de instancias.
Puedes usar la calculadora de precios para estimar las diferencias de costo.
Escalamiento asignado siempre de CPU desde cero
El escalamiento desde cero solo puede activarse mediante una solicitud, por lo que un servicio que no procesa solicitudes no puede escalar desde cero. Para estas cargas de trabajo, puedes establecer instancias mínimas > 0, o incluir una “solicitud de activación” en tu diseño a fin de reiniciar el procesamiento después de reducir la escala a cero.
Escalamiento asignado siempre a cero de CPU
Dado que ninguna instancia tiene un 0% de CPU, si se observa todo el uso de CPU, nunca se escalaría a cero. Esto significa que la decisión de escalar de uno a cero solo se puede tomar si se verifica que la instancia está procesando una solicitud.
Funciones obligatorias
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
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta Roles de IAM de Cloud Run y Permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs de Google 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 y actualiza la asignación de CPU
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.
Si eliges la opción de CPU siempre asignada, debes especificar al menos 512 MiB de memoria.
De forma predeterminada, la CPU solo se asigna durante el procesamiento de solicitudes para cada instancia de contenedor. Puedes cambiar esta configuración predeterminada mediante la consola de Google Cloud, la línea de comandos de gcloud o un archivo YAML cuando creas un servicio nuevo o implementas una revisión nueva:
Consola
En la consola de Google Cloud ve a Cloud Run:
Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en implementar y editar la nueva revisión.
Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y haz clic en Contenedor, herramientas de redes, seguridad para expandir la página de configuración del servicio.
Haz clic en la pestaña Contenedor.
- En Asignación de CPU y precios, selecciona la asignación de CPU que desees. Selecciona CPU solo se asigna durante el procesamiento de solicitudes para que tus instancias reciban CPU solo cuando reciben solicitudes. Selecciona CPU siempre se asigna para asignar CPU durante toda la vida útil de las instancias.
Haz clic en Crear o Implementar.
Línea de comandos
Puedes actualizar la asignación de CPU. A fin de configurar las CPU que se asignarán siempre a un servicio determinado, sigue estos pasos:
gcloud run services update SERVICE --no-cpu-throttling
SERVICE por el nombre del servicio
Para configurar la asignación de CPU solo durante el procesamiento de la solicitud, sigue estos pasos:
gcloud run services update SERVICE --cpu-throttling
También puedes configurar la asignación de CPU durante la implementación. Para configurar que las CPU se asignen siempre, sigue estos pasos:
gcloud run deploy --image IMAGE_URL --no-cpu-throttling
Para configurar la asignación de CPU solo durante el procesamiento de la solicitud, sigue estos pasos:
gcloud run deploy --image IMAGE_URL --cpu-throttling
Reemplaza IMAGE_URL por una referencia a la imagen de 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 formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
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 el atributo
cpu
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/cpu-throttling: 'BOOLEAN' name: REVISION
Reemplazar
- SERVICE por el nombre del servicio de Cloud Run
- BOOLEAN con
true
para establecer la asignación de CPU solo durante el procesamiento de solicitudes ofalse
a fin de establecer la CPU siempre asignada. - REVISION por 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
- Comienza con
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
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 la configuración de Terraform, en template.containers.resources
.
Visualiza la configuración de asignación de CPU
Para ver la configuración de asignación de CPU actual del servicio de Cloud Run, sigue estos pasos:
Consola
En la consola de Google Cloud ve a Cloud Run:
Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.
Haz clic en la pestaña Revisiones.
En el panel de detalles a la derecha, la configuración de CPU aparece en la pestaña Contenedor.
Línea de comandos
Usa el siguiente comando:
gcloud run services describe SERVICE
Busca la configuración de CPU en la configuración mostrada.