Asignación de CPU (servicios)

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.

Ilustración de los modos de asignación de CPU

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 si la instancia está procesando una solicitud.

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

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

    Ir a Cloud Run

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

  3. 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.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • 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.
  5. 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

Puedes descargar y ver las configuraciones del servicio existente mediante el comando gcloud run services describe --format export, que genera resultados limpios en formato YAML. Luego, puedes modificar los campos que se describen a continuación y subir el YAML modificado mediante el comando gcloud run services replace. Asegúrate de modificar los campos tal como se indica en la documentación.

  1. Para ver y descargar la configuración, ejecuta el siguiente comando:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 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 o false 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
  3. Reemplaza el servicio por la configuración nueva mediante 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.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-cpu-allocation"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        # If true, garbage-collect CPU when once a request finishes
        cpu_idle = false
      }
    }
  }
}

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

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

    Ir a Cloud Run

  2. Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Revisiones.

  4. En el panel de detalles a la derecha, la configuración de CPU aparece en la pestaña Contenedor.

Línea de comandos

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca la configuración de CPU en la configuración mostrada.