25 de março de 2024
CronJobs no seu ambiente Kubernetes
Gestão de cargas de trabalho com Cronjobs no Kubernetes
Kubernetes rapidamente se tornou a ferramenta padrão para a gestão de infraestruturas containerizadas. Kubernetes conta com uma variedade de recursos de carga de trabalho disponíveis para controlar e gerenciar pods e contêineres, sendo os mais comuns:
- Deployments
- ReplicaSets
- StatefulSets
Estes são utilizados tanto para criar sistemas quanto para controlar o comportamento desejado das diferentes partes. Embora esses recursos tenham diferentes propósitos e funcionalidades, todos compartilham a operação de manter os sistemas em funcionamento em caso de falha, avaliando o estado dos contêineres, e reiniciando ou reprogramando (“rescheduling”) as partes relevantes quando necessário.
No entanto, há outros recursos de carga de trabalho disponíveis:
- Job
- Cronjobs
- Work queues
Nesta entrada de blog, nos concentramos nos Cronjobs: sua função e as opções de customização disponíveis.
O que é um cron?
Os “crons” são uma utilidade comum do Linux / UNIX que é utilizada para programar tarefas (geralmente scripts ou comandos) para que sejam executadas periodicamente em horas, datas ou intervalos fixos. São úteis para tarefas periódicas e recorrentes, tais como sondagens, envio de e-mails, coleta de estatísticas ou criação de backups de bancos de dados.
O que é um Job (no Kubernetes)?
Um Job cria um Pod, o qual irá rastrear para garantir que termine com sucesso. Se o pod falhar, o Job continuará criando Pods até que o(s) Pod(s) termine(m) com sucesso. No arquivo YAML correspondente, é designado um número específico de finalizações bem-sucedidas. O Job fará o acompanhamento das finalizações bem-sucedidas até que a quantidade designada de Pods seja completada, após o que o Job será concluído.
O que é um CronJob (no Kubernetes)?
Um CronJob é uma tarefa que garante que um Job seja criado em horas, datas ou intervalos específicos. Eles oferecem a possibilidade de:
Containerizar crons:
Isso garante uma confiabilidade aprimorada na execução de crons. Sendo crons executados de modo serverless, se um servidor pertinente cair, os CronJobs continuam sendo executados.
Amplas opções de customização:
Permite uma ampla customização da tarefa em questão, o que garante a flexibilidade da tarefa inerente. Na seção seguinte, juntamente com um exemplo, avaliaremos o manifesto de um recurso CronJob.
Aqui está um exemplo de job:
Como com todos os outros recursos, esses valores devem ser estipulados:
- ApiVersion: versão utilizada pelo cluster
- Kind: CronJob
- Metadata: informações pertinentes ao CronJob, como: (há mais variáveis disponíveis neste bloco, embora não sejam necessárias)
- Name: $${nome desejado para o CronJob}
- Namespace: ${namespace onde você hospedará o CronJob}
- Spec: dentro deste bloco necessário, alguns valores são necessários e outros opcionais:
Necessários
- Schedule: especifica a data, horas ou intervalos nos quais executar o Job
(Para mais informações sobre a transcrição para expressões cron, há múltiplos links, como crontab
- JobTemplate: Aqui se cria o padrão do Job que o CronJob gerará
Opcional:
- StartingDeadlineSeconds: Prazo permitido de tempo (segundos) no qual começar um Job depois de que tenha passado seu momento designado de execução.
Ou seja, no caso de que um Job não se execute no seu momento designado e se ultrapasse o prazo permitido de tempo, o Job será terminado e se programará um novo. O Job falhado será marcado como um Missed Schedule.
Dado: O Controller do CronJob mantém a conta sobre quantos Missed Schedules tenham acontecido a um CronJob. Quando um CronJob tem mais de 100 Missed Schedules, deixará de se executar.
Valor por defeito=Sem prazo de tempo
- ConcurrencyPolicy: Especifica o comportamento em relação à execução de Jobs concorrentes. Apenas uma das seguintes opções pode ser selecionada:
- Allow: Permite a execução de Jobs concorrentes
- Forbid: Não permite a execução de Jobs concorrentes. Ou seja, se há um Job programado, mas o anterior ainda está em execução, o novo será pulado.
- Replace: Não permite a execução de Jobs concorrentes. Ou seja, se há um Job programado, mas o anterior ainda está em execução, o novo Job substituirá o velho. Valor por defeito=Allow
- Suspend: Suspende todas as subsequentes execuções do CronJob. (Não se aplica a Jobs já começados) Valor por defeito=false.
- SuccessfulJobsHistoryLimit: Estipula quantos Jobs completados com sucesso se conservam. (Atribuir um valor de 0 indica que não se mantém nenhum Job completado com sucesso) Valor por defeito=3
- FailedJobsHistoryLimit: Estipula quantos Jobs falhados se conservam. (Atribuir um valor de 0 indica que não se mantém nenhum Job falhado) Valor por defeito=1
Share