Mesmo depois de completar uma atividade, o Pod controlado por um CronJob não é deletado automaticamente. Manter um registro histórico de Pods pode ser extremamente útil para realizar troubleshooting de workloads com falha ou inspecionar logs. Por padrão, o CronJob retém os últimos três Pods executados com sucesso e o último com falha.
$ kubectl get cronjobs current-date -o yaml | grep successfulJobsHistoryLimit:
successfulJobsHistoryLimit: 3
$ kubectl get cronjobs current-date -o yaml | grep failedJobsHistoryLimit:
failedJobsHistoryLimit: 1
Para configurar os limites de retenção de Pods, defina novos valores para os atributos: spec.successfulJobsHistoryLimit
e spec.failedJobsHistoryLimit
. O exemplo abaixo mantém as últimas 5 execuções bem-sucedidas e as últimas 3 mal-sucedidas.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: current-date
spec:
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 3
schedule: "* * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: current-date
image: nginx
args:
- /bin/sh
- -c
- 'echo "Current date: $(date)"'
restartPolicy: OnFailure
Criando CronJob manualmente acompanhando a documentação do Kubernetes.
# Avaliando API disponivel
$ kubectl api-resources | grep "^cronjobs"
NAME SHORTNAMES APIVERSION NAMESPACED KIND
cronjobs cj batch/v1 true CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
labels:
section: 06-pod-design
spec:
schedule: "* * * * *"
jobTemplate:
spec:
template:
metadata:
name: cronjob-pod
spec:
containers:
- image: nginx
name: nginx
command: ["/bin/sh", "-c"]
args: ["echo \\"Current date: $(date)\\""]
restartPolicy: Never
parallelism: 1
completions: 1
backoffLimit: 5
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 2
Forçando um erro no command para avaliar a retenção de pods mal-sucedidos
command: ["/bin/sh", "-c"]
args: ["comando-inexistente --force --error"]
# Resultado esperado...
$ kubectl get cronjobs,pods
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/cron-job * * * * * False 1 35s 38s
NAME READY STATUS RESTARTS AGE
pod/cron-job-27527127-fcx9b 0/1 Error 0 35s
pod/cron-job-27527127-nlnwp 0/1 Error 0 33s
pod/cron-job-27527127-xckw4 0/1 Error 0 23s
pod/cron-job-27527127-z6lx9 0/1 ContainerCreating 0 3s
Referência de campos para o CronJob.