Parada programada de cluster

Para evitar cobranças Google Cloud por um cluster inativo ou a necessidade de excluir e recriar um cluster para evitar cobranças , use o recurso de interrupção programada do cluster do Dataproc, que interrompe todas as VMs do cluster. Não há cobranças para VMs interrompidas, mas as cobranças continuam para recursos associados, como discos permanentes.

A interrupção de um cluster interrompe todas as VMs do cluster e faz com que todos os jobs em execução falhem. Quando um cluster é interrompido, não é possível atualizá-lo, enviar jobs para ele ou acessar componentes opcionais no cluster usando o gateway de componentes do Dataproc. Depois de interromper um cluster, é possível reiniciar o cluster e retomar o trabalho.

A interrupção programada do cluster está disponível para clusters criados com as versões de imagem 2.2.42+, 2.1.76+ e 2.0.57+ e mais recentes.

Recursos

  • É possível interromper clusters após um período de inatividade especificado, em um horário futuro especificado ou após um período especificado da solicitação de criação do cluster.

  • A interrupção programada do cluster oferece suporte a clusters com workers secundários e clusters de escala zero.

  • É possível atualizar ou cancelar a configuração de interrupção programada do cluster.

Limitações e considerações

  • A interrupção programada do cluster não é compatível com clusters com SSDs locais.
  • Não é possível definir valores de interrupção programada do cluster usando o Google Cloud console.
  • Embora seja possível atualizar uma configuração de interrupção programada do cluster, uma operação de interrupção iniciada continuará. Para verificar se a operação de interrupção foi iniciada, examine os registros do cluster no Cloud Logging.
  • A atualização de uma programação de interrupção em um cluster que já passou do horário de interrupção programado remove a configuração programada. Para reativar a interrupção programada, inclua um horário futuro na solicitação de atualização.

Ações que desativam a interrupção programada do cluster

Enquanto um cluster está em execução, as seguintes ações desativam a interrupção programada do cluster até que a ação de desativação seja revertida:

Cálculo do tempo de inatividade do cluster

Para que um cluster seja considerado inativo, as seguintes condições precisam ser atendidas:

  • a criação do cluster está concluída (o tempo gasto no provisionamento e na inicialização do cluster é excluído do cálculo do tempo de inatividade)
  • nenhum job está em execução no cluster
  • o cluster não está no estado STOPPED

O envio de um job para o cluster ou a interrupção de um cluster redefine o cálculo do tempo de inatividade.

A propriedade do cluster dataproc:dataproc.cluster-ttl.consider-yarn-activity afeta o cálculo do tempo de inatividade do cluster da seguinte maneira:

  • Essa propriedade é ativada (definida como true) por padrão.
  • Quando essa propriedade está ativada, a atividade do YARN e da API Jobs Dataproc precisa estar inativa para iniciar e continuar incrementando o cálculo do tempo de inatividade do cluster.
    • A atividade do YARN inclui aplicativos do YARN pendentes e em execução.
    • A atividade da API Jobs Dataproc inclui jobs pendentes e em execução enviados à API Jobs Dataproc.
  • Quando essa propriedade é definida como false, o cálculo do tempo de inatividade do cluster é iniciado e continua apenas quando a atividade da API Jobs Dataproc está inativa.

Usar a interrupção programada do cluster

CLI da gcloud

É possível definir valores de interrupção programada ao criar um cluster usando a CLI do Google Cloud ou a API Dataproc. Depois de criar o cluster, é possível atualizá-lo para mudar ou excluir os valores de interrupção programada do cluster definidos anteriormente.

Sinalização Descrição Melhor granularidade Valor mín. Valor máx.
--stop-max-idle1 Aplica-se aos comandos de criação e atualização de clusters. Duração entre o momento em que o cluster entra no estado inativo (após a criação ou inicialização) até o momento em que o cluster começa a ser interrompido. Forneça a duração no formato IntegerUnit, em que a unidade pode ser "s, m, h, d" (segundos, minutos, horas, dias, respectivamente). Exemplos: "30m" ou "1d" (30 minutos ou 1 dia a partir do momento em que o cluster fica inativo). 1 segundo 5 minutos 14 dias
--no-stop-max-idle Aplica-se apenas ao comando de atualização do cluster. Cancela a interrupção programada do cluster pela sinalização definida anteriormente --stop-max-idle Não aplicável Não relevante Não aplicável
--stop-expiration-time2 Aplica-se aos comandos de criação e atualização de clusters. Tempo para iniciar a interrupção do cluster em formato de data e hora ISO 8601. É possível gerar a data e hora no formato correto usando o gerador de carimbo de data/hora. Por exemplo, "2017-08-22T13:31:48-08:00" especifica o tempo de expiração 13h21m48s no fuso horário UTC -8:00.1 segundo10 minutos a partir do horário atual 14 dias a partir do horário atual
--stop-max-age2 Aplica-se aos comandos de criação e atualização de clusters. Duração entre o momento do envio da solicitação de criação do cluster e o momento em que o cluster começa a ser interrompido. Forneça a duração em IntegerUnit formato, em que a unidade pode ser "s, m, h, d" (segundos, minutos, horas, dias). Exemplos: "30m": 30 minutos a partir de agora; "1d": 1 dia a partir de agora. 1 segundo 10 minutos 14 dias
Observações:
  1. É possível transmitir a sinalização stop-max-idle com a stop-expiration-time ou stop-max-age sinalização na solicitação de criação ou atualização do cluster. A primeira a se tornar verdadeira entra em vigor para interromper o cluster.
  2. É possível transmitir a sinalização stop-expiration-time ou a sinalização stop-max-age para o comando de criação ou atualização do cluster, mas não ambas.

Exemplo de criação de cluster:

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

Exemplo de atualização de cluster:

Exemplo:

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

API REST

É possível criar ou atualizar valores de interrupção programada em um cluster definindo os campos e valores ClusterLifecycleConfig da API Dataproc listados na tabela a seguir como parte de uma solicitação de API cluster.create ou cluster.patch do Dataproc.

Sinalização Descrição Melhor granularidade Valor mín. Valor máx.
idleStopTtl1 Aplica-se aos comandos de criação e atualização de clusters. Duração entre o momento em que o cluster entra no estado inativo após a criação ou atualização do cluster até o momento em que o cluster começa a ser interrompido. Forneça uma duração em segundos com até nove dígitos fracionários, terminando com 's'. Exemplo: "3.5s". Envie uma solicitação cluster.patch com uma duração vazia para cancelar um valor idleDeleteTtl definido anteriormente. 1 segundo 5 minutos
14 dias
autoStopTime2 Aplica-se aos comandos de criação e atualização de clusters. Tempo para iniciar a interrupção do cluster. Forneça um carimbo de data/hora no RFC 3339 formato UTC "Zulu", preciso em nanossegundos. Exemplo: "2014-10-02T15:01:23.045123456Z". 1 segundo 10 minutos a partir do horário atual 14 dias a partir do horário atual
autoStopTtl2 Duração entre o momento do envio da solicitação de criação ou atualização do cluster e o momento em que o cluster começa a ser interrompido. Forneça uma duração em segundos com até nove dígitos fracionários, terminando com 's'. Exemplo: "3.5s". 1 segundo 10 minutos.
Envie uma solicitação cluster.patch com uma duração vazia para cancelar um valor autoStopTtl definido anteriormente.
14 dias
Observações:
  1. É possível transmitir a sinalização stop-max-idle com a stop-expiration-time ou stop-max-age sinalização na solicitação de criação ou atualização do cluster. A primeira a se tornar verdadeira entra em vigor para interromper o cluster.
  2. É possível transmitir a sinalização stop-expiration-time ou a sinalização stop-max-age para o comando de criação ou atualização do cluster, mas não ambas.

Como usar a interrupção programada com a exclusão programada

Se você usar a interrupção programada do cluster com a exclusão programada do cluster, ao criar ou atualizar um cluster, observe as seguintes restrições:

  • O período stop-max-idle precisa ser menor ou igual ao delete-max-idle período, ou ao período resultante de delete-max-age ou delete-expiration-time.

  • O stop-max-age e o stop-expiration-time precisam ser posteriores ao delete-max-age e ao delete-expiration-time, respectivamente.

Conferir as configurações do cluster de interrupção programada

CLI da gcloud

Use o comando gcloud dataproc clusters list para confirmar que um cluster tem a interrupção programada ativada.

 gcloud dataproc clusters list \
     --region=REGION

Exemplo de resposta:

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

Use o comando gcloud dataproc clusters describe para verificar as configurações de interrupção programada LifecycleConfig do cluster.

gcloud dataproc clusters describe CLUSTER_NAME \
    --region=REGION

Exemplo de resposta:

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

Os valores autoStopTime e idleStopTtl são definidos pelo usuário. O Dataproc gera o idleStartTime valor, que é o horário de início mais recente do cluster.

Embora o Dataproc calcule idleStartTime com base em a cessação da atividade do job, o mecanismo de interrupção programada do cluster considera o idleStartTime e o último horário de início do cluster. Especificamente, se um cluster for interrompido por um usuário ou pelo Dataproc, o cálculo de inatividade para o recurso de interrupção programada será redefinido. Isso significa que a contagem regressiva para uma interrupção programada será reiniciada na próxima inicialização do cluster. No entanto, o idleStartTime não é redefinido quando um cluster interrompido é reiniciado. Ele continua refletindo a última ocorrência de inatividade do job antes de a interrupção.

Portanto, duas condições precisam ser atendidas para que o Dataproc interrompa um cluster com base no idleStopTtl:

  1. O cluster precisa estar inativo durante o período especificado por idleStopTtl desde a última inicialização.
  2. O cluster precisa estar inativo durante o período especificado por idleStopTtl desde a última idleStartTime redefinição.

API REST

Você pode fazer uma clusters.list solicitação para confirmar que um cluster tem a interrupção programada ativada.