Pular para o conteúdo principal

Questão de Sistemas Operacionais — Contêineres (Docker, Kubernetes, etc.) — VUNESP 2023

Sistemas OperacionaisContêineres (Docker, Kubernetes, etc.)
Código
vu197357
Banca
VUNESP
Órgão
TJM SP
Ano
2023
Cargo
Tec CPDJ ( )

Considere o seguinte arquivo YAML de manifesto de um CronJob do Kubernetes:

 

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          – name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            – /bin/sh
            – -c
            – date; echo Hello
          restartPolicy: OnFailure

 

Esse CronJob executa uma tarefa

  1. Aa cada minuto.
  2. Buma vez por dia, às 01:28 horas.
  3. Cuma vez por mês.
  4. Dapenas quando ocorre uma falha no cluster.
  5. Eapenas uma vez, dentro da data retornada pelo comando date do sistema operacional.
Revelar gabarito e comentário

GabaritoA — a cada minuto.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

CronJob no Kubernetes: agendamento de tarefas

Gabarito: letra A. O campo schedule: "* * * * *" segue a sintaxe de cron do Unix, em que cada asterisco representa, respectivamente, minuto, hora, dia do mês, mês e dia da semana. Com todos os campos em *, a tarefa é executada a cada minuto — é exatamente o que a alternativa A afirma.

O CronJob é um recurso do Kubernetes que cria Jobs em intervalos regulares, conforme uma agenda definida no formato cron. Esse formato é o mesmo usado pelo utilitário cron do Linux: cinco campos separados por espaço, cada um com um significado específico. Entender essa sintaxe é essencial para responder questões sobre agendamento, pois a banca costuma explorar justamente a interpretação dos asteriscos e dos números.

Vamos decompor o campo schedule do manifesto:

Campo

Posição

Valor

Significado

minuto

*

todos os minutos

hora

*

todas as horas

dia do mês

*

todos os dias do mês

mês

*

todos os meses

dia da semana

*

todos os dias da semana

Quando todos os campos são *, a expressão significa "em todos os minutos de todas as horas de todos os dias" — ou seja, a cada minuto. É a forma mais frequente de agendamento e a mais simples de reconhecer.

Na prática, o CronJob hello criará um Pod a cada minuto que executa o comando date; echo Hello e, como a restartPolicy é OnFailure, o contêiner será reiniciado apenas se o comando falhar. Isso reforça que a execução é periódica e independente de falhas.

A pegadinha desta questão está em confundir a sintaxe do cron com outros significados: o * não representa "uma vez" nem "qualquer data específica", mas sim "todos os valores possíveis" para aquele campo. Por isso, a alternativa B (que interpreta 1.28 como horário) e a E (que associa ao comando date) são distratores clássicos.

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa A afirma que o CronJob executa a tarefa a cada minuto. Isso está correto porque o campo schedule usa a sintaxe cron padrão, e * * * * * significa "todos os minutos, de todas as horas, de todos os dias do mês, de todos os meses, em todos os dias da semana". Ou seja, a execução ocorre a cada minuto, sem restrição de hora, dia ou mês.

Alternativa B — ❌ Incorreta

A alternativa B afirma que a tarefa é executada uma vez por dia, às 01:28 horas. Isso está errado porque o valor 1.28 no manifesto refere-se à tag da imagem Docker (busybox:1.28), não a um horário. A sintaxe cron * * * * * não contém nenhum número que possa ser interpretado como hora ou minuto específico — todos os campos são asteriscos, indicando "todos".

Alternativa C — ❌ Incorreta

A alternativa C afirma que a tarefa é executada uma vez por mês. Isso está errado porque, na sintaxe cron, o campo de mês (4º campo) é *, o que significa "todos os meses". Para que fosse uma vez por mês, seria necessário especificar um valor no campo de dia do mês (3º campo), como 0 0 1 * * (à meia-noite do primeiro dia de cada mês).

Alternativa D — ❌ Incorreta

A alternativa D afirma que a tarefa é executada apenas quando ocorre uma falha no cluster. Isso está errado porque o CronJob é um agendador baseado em tempo, não em eventos de falha. A restartPolicy: OnFailure apenas define o comportamento de reinício do contêiner dentro do Pod caso o comando falhe, mas não é o gatilho para a execução do Job. O gatilho é exclusivamente o agendamento cron.

Alternativa E — ❌ Incorreta

A alternativa E afirma que a tarefa é executada apenas uma vez, dentro da data retornada pelo comando date do sistema operacional. Isso está errado porque o comando date é apenas o primeiro comando executado dentro do contêiner (para imprimir a data atual), e não tem relação com o agendamento. O CronJob executa o Job repetidamente conforme o schedule, independentemente do que o comando date retorna.

PEGA ESSA DICA!

Para questões de CronJob, decore a ordem dos campos cron: minuto, hora, dia do mês, mês, dia da semana. Se todos forem *, é a cada minuto. Se houver números, interprete cada posição. E lembre-se: valores como 1.28 em image são tags de imagem, não horários.

Gabarito: letra A

Link permanente: /questoes/vu197357