Detención programada del clúster

Para evitar incurrir en Google Cloud cargos por un clúster inactivo o la necesidad de borrar y volver a crear un clúster para evitar incurrir en cargos , usa la función de detención programada de clústeres de Dataproc, que detiene todas las VMs del clúster. No se te cobra por las VMs detenidas, pero los cargos continúan para los recursos asociados, como los discos persistentes.

Si detienes un clúster, se detendrán todas las VMs del clúster y fallarán los trabajos en ejecución. Cuando se detiene un clúster, no puedes actualizarlo, enviar trabajos a él ni acceder a los componentes opcionales en el clúster con la puerta de enlace de componentes de Dataproc. Después de detener un clúster, puedes reiniciarlo y reanudar el trabajo.

La detención programada de clústeres está disponible para los clústeres creados con las versiones de imagen 2.2.42+, 2.1.76+ y 2.0.57+, y versiones posteriores.

Funciones

  • Puedes detener los clústeres después de un período de inactividad especificado, en un momento futuro especificado o después de un período especificado desde la solicitud de creación del clúster.

  • La detención programada de clústeres admite clústeres con trabajadores secundarios y clústeres de escala cero.

  • Puedes actualizar o cancelar la configuración de detención programada del clúster.

Limitaciones y consideraciones

  • La detención programada de clústeres no es compatible con los clústeres con SSD locales.
  • No puedes configurar los valores de detención programada de clústeres con la Google Cloud consola.
  • Aunque puedes actualizar una configuración de detención programada de clústeres, continuará una operación de detención iniciada. Para verificar si se inició la operación de detención, examina los registros del clúster en Cloud Logging.
  • Si actualizas una programación de detención en un clúster que ya pasó la hora de detención programada, se quitará la configuración de detención programada. Para volver a habilitar la detención programada, incluye una hora futura en tu solicitud de actualización.

Acciones que inhabilitan la detención programada de clústeres

Mientras se ejecuta un clúster, las siguientes acciones inhabilitan la detención programada de clústeres hasta que se revierta la acción de inhabilitación:

Cálculo del tiempo de inactividad del clúster

Para que un clúster se considere inactivo, se deben cumplir las siguientes condiciones:

  • La creación del clúster finalizó (el tiempo que se tarda en aprovisionar y iniciar el clúster se excluye del cálculo del tiempo de inactividad).
  • No se ejecutan trabajos en el clúster.
  • El clúster no está en estado STOPPED.

Si envías un trabajo al clúster o detienes un clúster, se restablece el cálculo del tiempo de inactividad.

La propiedad de clúster dataproc:dataproc.cluster-ttl.consider-yarn-activity afecta el cálculo del tiempo de inactividad del clúster de la siguiente manera:

  • Esta propiedad está habilitada (establecida en true) de forma predeterminada.
  • Cuando esta propiedad está habilitada, la actividad de YARN y de la API de trabajos de Dataproc debe estar inactiva para iniciar y continuar incrementando el cálculo del tiempo de inactividad del clúster.
    • La actividad de YARN incluye aplicaciones de YARN pendientes y en ejecución.
    • La actividad de la API de trabajos de Dataproc incluye trabajos pendientes y en ejecución enviados a la API de trabajos de Dataproc.
  • Cuando esta propiedad se establece en false, el cálculo del tiempo de inactividad del clúster comienza y continúa solo cuando la actividad de la API de trabajos de Dataproc está inactiva.

Usa la detención programada de clústeres

gcloud CLI

Puedes configurar los valores de detención programada cuando creas un clúster con el Google Cloud CLI o la API de Dataproc. Después de crear el clúster, puedes actualizarlo para cambiar o borrar los valores de detención programada de clústeres que se establecieron anteriormente en el clúster.

Marcar Descripción Mayor nivel de detalle Valor mín. Valor máx.
--stop-max-idle1 Se aplica a los comandos de creación y actualización de clústeres. El tiempo que transcurre desde que el clúster entra en estado inactivo (después de la creación o el inicio) hasta que comienza a detenerse. Proporciona la duración en formato IntegerUnit, en el que la unidad puede ser "s, m, h, d" (segundos, minutos, horas, días, respectivamente). Ejemplos: "30m" o "1d" (30 minutos o 1 día desde que el clúster entra en estado inactivo). 1 segundo 5 minutos 14 días
--no-stop-max-idle Solo se aplica al comando de actualización de clústeres. Cancela la detención programada de clústeres con la marca --stop-max-idle establecida anteriormente. No aplicable No aplicable No aplicable
--stop-expiration-time2 Se aplica a los comandos de creación y actualización de clústeres. El momento en que se comienza a detener el clúster en el formato de fecha y hora ISO 8601. Puedes generar la fecha y hora en el formato correcto con el generador de marcas de tiempo. Por ejemplo, “2017-08-22T13:31:48-08:00” indica la hora de vencimiento 13:21:48 en la zona horaria UTC-8:00.1 segundo10 minutos desde la hora actual 14 días desde la hora actual
--stop-max-age2 Se aplica a los comandos de creación y actualización de clústeres. El tiempo que transcurre desde que se envía la solicitud de creación del clúster hasta que este comienza a detenerse. Proporciona la duración en IntegerUnit formato, en el que la unidad puede ser "s, m, h, d" (segundos, minutos, horas, días). Ejemplos: "30m" (30 minutos desde ahora) o "1d" (1 día desde ahora). 1 segundo 10 minutos 14 días
Notas:
  1. Puedes pasar la marca stop-max-idle con la marca stop-expiration-time o stop-max-age en tu solicitud de creación o actualización del clúster. La primera que sea cierta tendrá efecto para detener el clúster.
  2. Puedes pasar la marca stop-expiration-time o la stop-max-age al comando de creación o actualización de clúster, pero no ambas.

Ejemplo de creación de clústeres:

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --stop-expiration-time=TIME \
    ... other flags ...

Ejemplo de actualización de clústeres:

Por ejemplo:

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --stop-max-idle=DURATION \
    --no-stop-max-age \
    ... other flags

API de REST

cluster.patch

Marcar Descripción Mayor nivel de detalle Valor mín. Valor máx.
idleStopTtl1 Se aplica a los comandos de creación y actualización de clústeres. El tiempo que transcurre desde que el clúster entra en estado inactivo después de que se crea o actualiza hasta que el clúster comienza a detenerse. Muestra la duración en segundos con hasta nueve dígitos fraccionarios, terminados en 's'. Ejemplo: “3.5s”. Envía una solicitud cluster.patch con una duración vacía para cancelar un valor idleDeleteTtl ya establecido. 1 segundo 5 minutos
14 días
autoStopTime2 Se aplica a los comandos de creación y actualización de clústeres. El momento en que se comienza a detener el clúster. Proporciona una marca de tiempo en RFC 3339 formato UTC "Zulu", precisa hasta nanosegundos. Ejemplo: "2014-10-02T15:01:23.045123456Z". 1 segundo 10 minutos desde la hora actual 14 días desde la hora actual
autoStopTtl2 El tiempo que transcurre desde que se envía la solicitud de creación o actualización del clúster hasta que este comienza a detenerse. Muestra la duración en segundos con hasta nueve dígitos fraccionarios, terminados en “s”. Ejemplo: “3.5s”. 1 segundo 10 minutos.
Envía una solicitud cluster.patch con una duración vacía para cancelar un valor autoStopTtl ya establecido.
14 días
Notas:
  1. Puedes pasar la marca stop-max-idle con la marca stop-expiration-time o stop-max-age en tu solicitud de creación o actualización del clúster. La primera que sea cierta tendrá efecto para detener el clúster.
  2. Puedes pasar la marca stop-expiration-time o la stop-max-age al comando de creación o actualización de clúster, pero no ambas.

Usa la detención programada con la eliminación programada

Si usas la detención programada de clústeres con la eliminación programada de clústeres, cuando crees o actualices un clúster, ten en cuenta las siguientes restricciones:

  • El período stop-max-idle debe ser más corto o igual al delete-max-idle período, o al período que resulta de delete-max-age o delete-expiration-time.

  • stop-max-age y stop-expiration-time deben ser posteriores a delete-max-age y delete-expiration-time, respectivamente.

Visualiza la configuración de clústeres de la detención programada

gcloud CLI

Puedes usar el comando gcloud dataproc clusters list para confirmar que un clúster tiene habilitada la detención programada.

 gcloud dataproc clusters list \
     --region=REGION

Resultado de muestra:

...
NAME         WORKER_COUNT ... SCHEDULED_STOP
CLUSTER_ID   NUMBER       ... enabled
...

Puedes usar el comando gcloud dataproc clusters describe para verificar la configuración de detención programada del clúster LifecycleConfig.

gcloud dataproc clusters describe CLUSTER_NAME \
    --region=REGION

Resultado de muestra:

...
lifecycleConfig:
  autoStopTime: '2018-11-28T19:33:48.146Z'
  idleStopTtl: 1800s
  idleStartTime: '2018-11-28T18:33:48.146Z'
...

El usuario establece los valores autoStopTime y idleStopTtl. Dataproc genera el idleStartTime valor, que es la última hora de inicio del clúster inactivo.

Si bien Dataproc calcula idleStartTime en función de la cesación de la actividad del trabajo, el mecanismo para detener el clúster programado considera tanto idleStartTime como la última hora de inicio del clúster. En particular, si un usuario o Dataproc detienen un clúster, se restablece el cálculo de inactividad para la función de detención programada. Esto significa que la cuenta regresiva para una detención programada se reinicia cuando se inicia el clúster. Sin embargo, el idleStartTime no se restablece cuando se reinicia un clúster detenido. Continúa reflejando la última ocurrencia de inactividad del trabajo antes de la detención.

Por lo tanto, se deben cumplir dos condiciones para que Dataproc detenga un clúster en función de idleStopTtl:

  1. El clúster debe haber estado inactivo durante el período especificado por idleStopTtl desde la última vez que se inició.
  2. El clúster debe haber estado inactivo durante el período especificado por idleStopTtl desde el último idleStartTime restablecimiento.

API de REST

Puedes realizar una clusters.list solicitud para confirmar que un clúster tiene habilitada la detención programada.