Cómo establecer el tiempo de espera de las tareas para los trabajos

De forma predeterminada, cada tarea se ejecuta durante 10 minutos como máximo: puedes cambiar a un tiempo más corto o a un máximo de 168 horas (7 días). Para las tareas que usan GPUs, el tiempo de espera máximo disponible es de 12 horas (versión preliminar).

Puedes establecer el tiempo de espera de las tareas como se describe en esta página. No hay un tiempo de espera explícito en la ejecución de un trabajo: cuando se completan todas las tareas, la ejecución del trabajo finaliza.

Las unidades especifican una duración. Puedes especificar la duración del tiempo de espera como un valor de número entero en segundos, minutos u horas. Por ejemplo, para establecer la duración del tiempo de espera en 10 minutos y 5 segundos, especifica el valor como 605 segundos.

Si tu trabajo tiene habilitados los reintentos, el parámetro de configuración del tiempo de espera se aplica a cada intento de una tarea. Si el intento de tarea no se completa en este tiempo, se detendrá. Cuanto más tiempo se ejecute un trabajo, más probable será que tenga problemas que provoquen su falla, como fallas de dependencia descendente, errores de memoria insuficiente o problemas de infraestructura. Te recomendamos que habilites los reintentos para todos los trabajos, pero, en especial, para los que tienen tareas de larga duración.

Eventos de mantenimiento

Las tareas que no usan GPU se migran en vivo durante los eventos de mantenimiento. Las tareas que usan GPUs no se pueden migrar en vivo y, en su lugar, se finalizan. Obtén más información.

El proceso de migración conserva el estado de la tarea, con una excepción notable: las conexiones de red de VPC salientes se interrumpen durante los eventos de mantenimiento. Te recomendamos que uses bibliotecas cliente que puedan manejar restablecimientos ocasionales de la conexión.

Cloud Run imprime un mensaje de registro cada vez que se inicia y finaliza una tarea.

Además, si deseas supervisar o controlar los eventos de mantenimiento de una manera específica, puedes detectar el indicador SIGTSTP, que se envía 10 segundos antes de que se migre una tarea. Después de la migración, la tarea recibe una señal SIGCONT de inmediato después de reiniciar la tarea.

La siguiente muestra de Go es una función que detecta estas señales y, luego, imprime una entrada de registro:

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

Trabajos de GPU de larga duración

En algunos casos, como los trabajos de GPU de larga duración, los eventos de mantenimiento pueden provocar la interrupción o finalización de las instancias sin migración en vivo.

Para controlar estos eventos de forma correcta, una opción es detectar el indicador SIGTERM, que Cloud Run envía 10 segundos antes de que finalice la tarea, para guardar el progreso escribiendo puntos de control finales y guardando el estado en el almacenamiento persistente. Consulta Diseña trabajos de GPU resilientes de larga duración para obtener más detalles.

Sin embargo, ten en cuenta que tienes aproximadamente 10 segundos después de SIGTERM antes de que se finalice la tarea. Este tiempo no es suficiente para escribir un punto de control de modelo grande. Trata el controlador SIGTERM como un vaciado de mejor esfuerzo solo para estados pequeños y confía en los puntos de control periódicos como tu protección principal. Elige el intervalo de puntos de control en función de la cantidad de trabajo que puedas perder.

Debido a que las tareas de GPU no se migran en vivo, se espera que una tarea configurada con un tiempo de espera de varias horas se interrumpa al menos una vez antes de completarse. El tiempo de espera de la tarea es un máximo, no una garantía de ejecución ininterrumpida.

Roles obligatorios

Para obtener los permisos que necesitas para configurar los trabajos de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

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 trabajo de Cloud Run interactúa con las APIs deGoogle 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 los permisos de implementación y cómo administrar el acceso.

Establece el tiempo de espera de las tareas

A fin de especificar el tiempo de espera de la tarea para un trabajo de Cloud Run, sigue estos pasos:

Console

  1. En la consola de Google Cloud , ve a la página de Cloud Run:

    Ir a Cloud Run

  2. Selecciona Trabajos en el menú de navegación de Cloud Run:

    1. Si creas un trabajo nuevo, haz clic en Implementar contenedor para completar la página de configuración inicial del trabajo.

    2. Si quieres configurar un trabajo existente, selecciónalo y, luego, haz clic en Ver y editar la configuración del trabajo.

  3. Haz clic en Contenedores, conexiones y seguridad para expandir la página de propiedades del trabajo.

  4. En el campo Tiempo de espera de la tarea, especifica la duración máxima de las tareas de trabajo en el trabajo actual y selecciona una Unidad de tiempo. Solo puedes especificar la duración del tiempo de espera como un valor de número entero en segundos, minutos u horas. Por ejemplo, para establecer una duración de 10 minutos y 5 segundos, en el campo Tiempo de espera de la tarea, especifica 605 y selecciona la Unidad de tiempo como segundos.

  5. Haz clic en Crear o Actualizar.

gcloud

  1. Para un trabajo que estés creando, sigue estos pasos:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    Reemplazar

    • JOB_NAME por el nombre de tu trabajo.
    • IMAGE_URL: Es una referencia a la imagen de contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT por la duración máxima de las tareas de trabajo, mediante la especificación de la cantidad de tiempo y las unidades: por ejemplo, 10m5s es de diez minutos y cinco segundos.
  2. Para un trabajo que estás actualizando:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. Si creas un trabajo nuevo, omite este paso. Si actualizas un trabajo existente, descarga su configuración de YAML:

    gcloud run jobs describe JOB --format export > job.yaml
  2. Actualiza el atributo timeoutSeconds::

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    Reemplaza lo siguiente:

    • JOB_NAME por el nombre de tu trabajo.
    • IMAGE_URL: Es una referencia a la imagen de contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT por la duración máxima de las tareas de trabajo, y especifica la cantidad de tiempo y las unidades Solo puedes especificar la hora como un valor de número entero en segundos, minutos u horas. Por ejemplo, para establecer una duración de 10 minutos y 5 segundos, especifica 605.

    También puedes especificar más opciones de configuración, como variables de entorno o límites de memoria.

  3. Actualiza la configuración del trabajo existente:

    gcloud run jobs replace job.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_job en tu configuración de Terraform:
resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

Visualiza la configuración del tiempo de espera de las tareas

Para ver la configuración actual del tiempo de espera de las tareas de tu trabajo de Cloud Run, usa la consola de Google Cloud o Google Cloud CLI:

Console

  1. En la consola de Google Cloud , ve a la página de trabajos de Cloud Run:

    Ir a Trabajos de Cloud Run

  2. Haz clic en el trabajo para abrir la página Detalles del trabajo.

  3. Haz clic en Ver y editar la configuración del trabajo.

  4. Ubica la configuración del tiempo de espera de las tareas en los detalles de configuración.

gcloud

  1. Ejecuta el comando siguiente:

    gcloud run jobs describe JOB
  2. Busca la configuración de tiempo de espera de las tareas en la configuración que se muestra.