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 en función de las funciones utilizadas. Por lo tanto, a menos que especifiques un entorno de ejecución para tu servicio, Cloud Run puede seleccionar el entorno de primera o de segunda generación.
Ten en cuenta que los trabajos de Cloud Run solo usan el entorno de ejecución de segunda generación y que no se puede cambiar.
El entorno de ejecución de primera generación se caracteriza por tiempos de inicio en frío rápidos y por la emulación de la mayoría de las llamadas del sistema operativo, pero no de todas. Originalmente, este era el único entorno de ejecución disponible para los servicios de Cloud Run.
El entorno de ejecución de segunda generación ofrece compatibilidad total con Linux en lugar de emulación de llamadas al sistema. Este entorno de ejecución proporciona lo siguiente:
- Rendimiento de la CPU más rápido
- Rendimiento de red más rápido, sobre todo en caso de 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 sistemas de archivos de red
Aunque el entorno de ejecución de segunda generación suele ser más rápido con cargas sostenidas, tiene tiempos de arranque en frío más largos que la primera generación en la mayoría de los servicios.
Cómo elegir un entorno de ejecución
Deberías usar la primera generación si se da alguna de las siguientes circunstancias:
- Tu servicio de Cloud Run tiene un tráfico con picos y necesita escalar rápidamente a muchas instancias, o bien tu servicio es sensible a los tiempos de arranque en frío.
- Tu servicio de Cloud Run tiene un tráfico poco frecuente que provoca un escalado 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.
Deberías usar la segunda generación si se da alguna de las siguientes circunstancias en tu servicio de Cloud Run:
- Tu servicio debe usar NFS, que solo es compatible con la segunda generación.
- Tu servicio tiene un tráfico bastante constante y tolera arranques en frío algo más lentos.
- Tu servicio tiene cargas de trabajo que requieren muchos recursos de CPU.
- Tu servicio podría beneficiarse de un rendimiento de red más rápido.
- Tu servicio debe usar software que tenga problemas para ejecutarse en la primera generación debido a llamadas al sistema no implementadas.
- Tu servicio necesita la función de cgroup de Linux.
- Tu servicio usa infraestructura de terceros para proteger los contenedores.
Prácticas recomendadas al usar el entorno de ejecución de segunda generación
Te recomendamos que tu contenedor instale un controlador SIGTERM, sobre todo si usas la facturación basada en solicitudes.
Al gestionar SIGTERM, el contenedor tiene la oportunidad de realizar las tareas de limpieza necesarias, como vaciar los registros, antes de salir. Si tu contenedor no detecta SIGTERM, seguirá teniendo 10 segundos para realizar estas tareas, y esos 10 segundos se facturarán.
Cómo comprobar si tu contenedor gestiona SIGTERM
Para determinar si tu contenedor tiene instalado un controlador SIGTERM, sigue estos pasos:
Inicia Cloud Shell. Puedes encontrar
Activar Cloud Shell en el encabezado de la página de documentación en la que te encuentres. Es posible que tengas que autorizarlo y esperar a que se aprovisione. También puedes iniciar una sesión independiente.
Ejecuta el contenedor localmente en Cloud Shell:
docker run IMAGE_URL
Sustituye IMAGE_URL por una referencia a la imagen de contenedor. Por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.Abre otra pestaña en Cloud Shell y obtén una lista de los contenedores que se están ejecutando en la sesión actual de Cloud Shell:
docker container ls
Debe buscar el ID del contenedor devuelto por el comando.
Envía una señal SIGTERM a tu contenedor mediante el ID de contenedor
docker kill -s SIGTERM CONTAINER_ID
Vuelve a la pestaña en la que has invocado
docker run
para ver si el contenedor se ha cerrado (detenido). Si la señal SIGTERM ha provocado que tu contenedor se cierre, significa que tu contenedor está gestionando SIGTERM.
Cómo gestionar SIGTERM
Si tu contenedor no gestiona SIGTERM, la forma más sencilla de añadir un controlador SIGTERM es envolver tu servicio con tini
. De esta forma, el servicio se ejecuta como un subproceso de tini
, que asume el rol del proceso init del contenedor.
Consulta las instrucciones de Docker.
También puedes cambiar tu aplicación para que gestione SIGTERM directamente.
Siguientes pasos
- Para especificar un entorno de ejecución para tus servicios de Cloud Run, consulta Seleccionar un entorno de ejecución.
- Para especificar la memoria de tus servicios de Cloud Run, consulta Límites de memoria.
- Para usar Filestore con Cloud Run, consulta el artículo Usar Filestore con Cloud Run.
- Para usar Cloud Storage FUSE con Cloud Run, consulta el artículo Usar Cloud Storage FUSE con Cloud Run.