System Administration Question #019e3a4f
Um CronJob está agendado para ser executado por um usuário a cada uma hora. O que acontece no cluster quando chega a hora de este CronJob ser executado?
O Kubelet observa o API Server em busca de objetos CronJob. Quando é hora de um Job ser executado, ele executa o Pod diretamente.
O Kube-scheduler observa o API Server em busca de objetos CronJob, e é por isso que é chamado de kube-scheduler.
O componente CronJob controller cria um Pod e espera até que ele termine para executar.
O componente CronJob controller cria um Job. Então o Job controller cria um Pod e espera até que ele termine para executar.
Official Explanation / Community Explanations
O comportamento correto é que o CronJob controller cria um objeto Job, e então o Job controller cria um Pod para executar a tarefa. O CronJob controller é responsável por gerenciar o agendamento e criar objetos Job nos horários especificados. Cada Job representa uma única execução da tarefa. O Job controller então cria um ou mais Pods para completar o Job, e garante que o Pod seja executado até a conclusão. O CronJob controller não cria Pods diretamente; ele depende do Job controller para lidar com a criação e o ciclo de vida dos Pods.
Como funciona:
- O CronJob controller observa os recursos CronJob no API server. Quando o horário agendado chega, ele cria um objeto Job baseado no modelo de job do CronJob.
- O Job controller, que observa objetos Job, então cria um Pod (ou vários Pods para jobs paralelos) para executar o comando especificado no modelo do Job.
- O Job controller monitora o Pod até que ele termine com sucesso ou falhe, e pode repetir de acordo com o limite de backoff.
- O CronJob controller não espera o Job completar; ele apenas cria o Job e segue para o próximo horário agendado.
Por que a opção correta está certa:
A afirmação "O componente CronJob controller cria um Job. Então o Job controller cria um Pod e espera até que ele termine para executar" descreve com precisão o processo de duas etapas: CronJob -> Job -> Pod. O Job controller espera o Pod terminar, o que faz parte de sua responsabilidade de garantir que o Job seja concluído.
Por que as opções incorretas estão erradas:
- A afirmação "O Kubelet observa o API Server em busca de objetos CronJob. Quando é hora de um Job ser executado, ele executa o Pod diretamente" está incorreta porque o Kubelet não observa objetos CronJob. O Kubelet é um agente que executa em cada nó e gerencia os Pods atribuídos àquele nó. Ele não cria Pods baseados em CronJobs; ele apenas executa Pods que foram agendados para seu nó pelo scheduler.
- A afirmação "O Kube-scheduler observa o API Server em busca de objetos CronJob, e é por isso que é chamado de kube-scheduler" está incorreta. O kube-scheduler é responsável por atribuir Pods a nós, não por gerenciar CronJobs. Seu nome vem do agendamento de Pods em nós, não do tratamento de agendamentos de CronJob.
- A afirmação "O componente CronJob controller cria um Pod e espera até que ele termine para executar" está incorreta porque o CronJob controller não cria Pods diretamente. Ele cria objetos Job, e o Job controller lida com a criação de Pods. Além disso, o CronJob controller não espera o Pod terminar; ele apenas cria o Job e então continua monitorando o agendamento para a próxima execução.