Selecciona un entorno de ejecución para los servicios

Todas las instancias de Cloud Run se ejecutan en un entorno de zona de pruebas. La tecnología de zona de pruebas y las funciones disponibles difieren según el entorno de ejecución seleccionado.

El entorno de ejecución de primera generación se basa en gVisor y cuenta con tiempos de inicio en frío rápidos y emulación de la mayoría de las llamadas al sistema operativo, pero no todas.

El entorno de ejecución de segunda generación es una microVM y proporciona compatibilidad total con Linux en lugar de la emulación de llamadas al sistema. Este entorno de ejecución proporciona lo siguiente:

  • Rendimiento de CPU más rápido
  • Rendimiento más rápido de la red, especialmente en pérdida de paquetes
  • Compatibilidad total con Linux, incluida la compatibilidad con todas las llamadas al sistema, los espacios de nombres y los cgroups
  • Compatibilidad con el sistema de archivos de red

Si bien el entorno de ejecución de segunda generación generalmente funciona más rápido con una carga sostenida, tiene horas de inicio en frío más largos que el de primera generación para algunos servicios.

Ambos entornos de ejecución tienen el mismo precio. Consulta la página de precios de Cloud Run para obtener más detalles.

Selecciona un entorno de ejecución para un servicio de Cloud Run

Los servicios de Cloud Run no tienen un entorno de ejecución especificado de forma predeterminada, lo que significa que Cloud Run selecciona el entorno de ejecución según las funciones que se usaron. Si no especificas un entorno de ejecución para el servicio, Cloud Run puede seleccionar el entorno de primera o segunda generación.

Los trabajos y los grupos de trabajadores de Cloud Run solo usan el entorno de ejecución de segunda generación, y esto no se puede cambiar.

Cómo elegir un entorno de ejecución

Debes usar la primera generación si se cumple alguna de las siguientes condiciones:

  • Tu servicio de Cloud Run tiene tráfico inestable y necesita escalar horizontalmente a muchas instancias, o tu servicio es sensible a los tiempos de inicio en frío.
  • El servicio de Cloud Run tiene tráfico poco frecuente que causa un escalamiento horizontal frecuente desde cero.
  • Quieres usar menos de 512 MiB de memoria. El entorno de ejecución de segunda generación requiere al menos 512 MiB de memoria.

Debes usar la segunda generación si se aplica alguna de las siguientes opciones a tu servicio de Cloud Run:

  • El servicio debe usar NFS, que solo es compatible con la segunda generación.
  • Tu servicio tiene tráfico bastante estable y tolera los inicios en frío más lentos.
  • El servicio tiene cargas de trabajo de uso intensivo de CPU.
  • Tu servicio podría beneficiarse de un rendimiento de red más rápido.
  • Tu servicio usa la salida de VPC directa para enviar tráfico a una red de VPC y requiere el mejor rendimiento de red posible.
  • El servicio debe usar un software que tenga problemas para ejecutarse en la primera generación debido a llamadas al sistema no implementadas.
  • Tu servicio necesita la funcionalidad cgroup de Linux.
  • Tu servicio usa infraestructura de terceros para proteger los contenedores.

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 y actualiza el entorno de ejecució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.

La configuración predeterminada de los servicios de Cloud Run no se especifica, lo que significa que Cloud Run selecciona un entorno de ejecución adecuado. Como alternativa, puedes especificar un entorno de ejecución. Para usar la segunda generación, debes especificar al menos 512 MiB de memoria.

Puedes configurar el entorno de ejecución con la Google Cloud consola, la línea de comandos de gcloud o un archivo YAML cuando creas un servicio nuevo o implementas una revisión nueva:

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 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 y, luego, haz clic en Contenedores, volúmenes, redes y seguridad para expandir la página de configuración del servicio.

  4. Haz clic en la pestaña Contenedor.

    imagen

    • Selecciona el entorno de ejecución deseado con los botones de opción. Mantén la opción “Configuración predeterminada” para permitir que Cloud Run seleccione un entorno de ejecución adecuado.
  5. Haz clic en Crear o Implementar.

gcloud

Puedes actualizar el entorno de ejecución de un servicio determinado mediante el siguiente comando:

gcloud run services update SERVICE --execution-environment ENVIRONMENT

Reemplaza SERVICE por el nombre de tu servicio y ENVIRONMENT por el entorno de ejecución deseado. Especifica el valor gen1 para la primera generación o gen2 para la segunda generación.

También puedes configurar el entorno de ejecución durante la implementación mediante el siguiente comando:

gcloud run deploy --image IMAGE_URL --execution-environment ENVIRONMENT

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.
  • ENVIRONMENT: Es el entorno de ejecución deseado. Especifica el valor gen1 para la primera generación o gen2 para la segunda generación.

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. Establece la anotación run.googleapis.com/execution-environment:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: ENVIRONMENT

    Reemplaza lo siguiente:

    • SERVICE: El nombre de tu servicio de Cloud Run.
    • ENVIRONMENT: Es el entorno de ejecución seleccionado. Especifica el valor gen1 para la primera generación o gen2 para la segunda generación.

    Quita la anotación run.googleapis.com/execution-environment para el comportamiento predeterminado.

  3. 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 tu configuración de Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-execution-environment"
  location = "REGION"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    execution_environment = "ENVIRONMENT"
  }
}

Reemplaza lo siguiente:

  • REGION: La Google Cloud región Por ejemplo, europe-west1.
  • ENVIRONMENT: EXECUTION_ENVIRONMENT_GEN1 para la primera generación o EXECUTION_ENVIRONMENT_GEN2 para la segunda generación.

Visualiza la configuración del entorno de ejecución

Para ver la configuración actual del entorno de ejecución del 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 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 del entorno de ejecución se muestra en la pestaña Contenedor.

gcloud

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Ubica la configuración del entorno de ejecución en la configuración que se muestra.

Cierres ordenados

Cuando se cierra una instancia de Cloud Run, recibe un indicador SIGTERM para habilitar un cierre ordenado de 10 segundos.

Control de la señal SIGTERM

Recomendamos que tu contenedor instale un controlador SIGTERM, en especial si usas la facturación basada en solicitudes.

El manejo de SIGTERM le da a tu contenedor la oportunidad de realizar cualquier tarea de limpieza necesaria, como vaciar los registros antes de salir. Si el contenedor no detecta SIGTERM, aún tendrá 10 segundos para realizar estas tareas. Esos 10 segundos se facturan.

Cómo verificar si el contenedor controla SIGTERM

Para determinar si el contenedor tiene un controlador SIGTERM instalado, haz lo siguiente:

  1. Inicie Cloud Shell. Puedes encontrar Activa el botón Cloud Run Activar Cloud Shell en el encabezado de la página de documentación en la que te encuentras. Es posible que debas autorizarlo y esperar a que se aprovisione. También puedes iniciar una sesión independiente.

  2. Ejecuta el contenedor de forma local en Cloud Shell:

    docker run IMAGE_URL

    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 sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

  3. Abre otra pestaña en Cloud Shell y obtén una lista de los contenedores que se ejecutan en la sesión actual de Cloud Shell:

    docker container ls

    Debes ubicar el ID del contenedor que muestra el comando.

  4. Con el ID del contenedor, envía a tu contenedor una señal SIGTERM

    docker kill -s SIGTERM CONTAINER_ID
  5. Regresa a la pestaña en la que invocaste docker run para comprobar si el contenedor se cerró (detuvo). Si la señal SIGTERM hizo que el contenedor se salir, el contenedor controla SIGTERM.

Cómo controlar SIGTERM

Si el contenedor no controla SIGTERM, la forma más sencilla de agregar un controlador SIGTERM es unir el servicio con tini. Esto hace que tu servicio se ejecute como un subproceso de tini, que toma el rol del proceso init del contenedor. Consulta las instrucciones de Docker para obtener instrucciones.

Como alternativa, puedes cambiar la aplicación para que controle directamente SIGTERM.

¿Qué sigue?