Como ver se um CronJob rodou no Kubernetes
Um CronJob que para de rodar não derruba nada na hora: o problema aparece dias depois, no relatório que não saiu ou no backup que não existe. Estes são os comandos para conferir, e os motivos mais comuns de um CronJob não rodar.
1. A última execução agendada
A coluna LAST SCHEDULE mostra quando o CronJob criou o último Job, e SUSPEND mostra se ele está pausado:
kubectl get cronjob -n <namespace> 2. A última execução com sucesso
O status do CronJob guarda a última vez que um Job foi agendado e a última vez que um terminou com sucesso:
kubectl get cronjob <nome> -n <namespace> \
-o jsonpath='{.status.lastScheduleTime}{"\n"}{.status.lastSuccessfulTime}{"\n"}' 3. Os Jobs que ele criou, e quais falharam
Cada execução é um Job. Liste os mais recentes e veja o status e as conclusões de cada um:
kubectl get jobs -n <namespace> --sort-by=.metadata.creationTimestamp
kubectl describe job <job> -n <namespace>
kubectl logs job/<job> -n <namespace> Por que um CronJob não roda
- spec.suspend está true.
- concurrencyPolicy: Forbid e o Job anterior ainda está rodando, então a execução nova é pulada.
- startingDeadlineSeconds curto demais: se o controller não consegue começar dentro do prazo, aquela execução é perdida.
- Mais de 100 execuções perdidas desde a última: o controller registra um evento de aviso de execuções perdidas demais e pode deixar de iniciar o Job.
- O fuso: sem spec.timeZone, o horário do schedule segue o fuso do kube-controller-manager, normalmente UTC.
- successfulJobsHistoryLimit e failedJobsHistoryLimit baixos apagam o histórico dos Jobs antes de você olhar.
Sem terminal, no Kubepier
No Kubepier, a lista de CronJobs mostra a última execução e se cada um está suspenso, e a lista de Jobs mostra quais concluíram, falharam ou ainda estão rodando, de qualquer cluster, no navegador ou no celular.