Surveillez efficacement vos jobs planifiés dans Kubernetes
Les CronJobs Kubernetes permettent d'exécuter des pods selon un schedule défini, exactement comme le cron Unix classique. Dans les environnements cloud-native modernes, ils sont utilisés pour des tâches de maintenance, de backup, de synchronisation et de traitement batch. Leur surveillance est critique car dans un cluster actif avec des centaines de pods, les échecs de CronJobs passent facilement inaperçus.
La complexité de Kubernetes introduit de nombreux points de défaillance potentiels : image de conteneur non trouvée, ressources insuffisantes pour scheduler le pod, CrashLoopBackOff sur le conteneur, timeout dépassé, ou simplement un CronJob suspendu par erreur. Ces problèmes sont souvent silencieux car Kubernetes ne dispose pas d'alerting natif pour les CronJobs.
MoniTao complète parfaitement l'écosystème Kubernetes en ajoutant une couche de monitoring heartbeat externe. En intégrant un simple appel curl dans vos conteneurs, vous êtes alerté instantanément si un CronJob ne s'exécute pas correctement, indépendamment de la cause sous-jacente.
Comprendre l'architecture des CronJobs K8s est essentiel pour configurer un monitoring efficace.
Les CronJobs Kubernetes présentent des défis uniques par rapport aux crons traditionnels.
Plusieurs approches permettent d'intégrer le monitoring heartbeat dans vos CronJobs Kubernetes.
Voici un exemple de manifeste CronJob Kubernetes avec monitoring heartbeat intégré :
apiVersion: batch/v1
kind: CronJob
metadata:
name: backup-daily
spec:
schedule: "0 2 * * *" # 2h00 chaque jour
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: backup
image: my-backup-image:latest
command:
- /bin/sh
- -c
- |
/scripts/backup.sh && \
curl -fsS "https://api.monitao.com/ping/YOUR_TOKEN"
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
Le && assure que le curl n'est exécuté que si le backup réussit. Avec restartPolicy: OnFailure, K8s réessaiera automatiquement si le conteneur échoue, mais MoniTao vous alertera du retard.
Configurez vos alertes MoniTao pour couvrir les différents scénarios d'échec Kubernetes.
Vérifiez plusieurs points : suspend n'est pas à true, le schedule est valide, le CronJob n'a pas atteint failedJobsHistoryLimit. Utilisez kubectl describe cronjob pour voir l'historique.
Créez un Job manuel à partir du CronJob : kubectl create job test-run --from=cronjob/my-cronjob. Cela exécute immédiatement le Job avec la même configuration.
Le cluster n'a pas assez de ressources pour scheduler le pod. Vérifiez avec kubectl describe pod le-pod-name pour voir les événements. Réduisez les requests ou ajoutez des nodes.
Depuis K8s 1.27+, utilisez spec.timeZone: "Europe/Paris". Pour les versions antérieures, le schedule utilise le timezone du kube-controller-manager (souvent UTC).
Définissez concurrencyPolicy: Forbid dans le spec. Cela empêche la création d'un nouveau Job si le précédent est encore en cours. Attention : cela peut masquer des problèmes de performance.
Listez les pods du Job avec kubectl get pods -l job-name=mon-job, puis kubectl logs nom-du-pod. Pour les pods terminés, ajoutez --previous si le conteneur a redémarré.
Les CronJobs Kubernetes sont puissants mais leur monitoring natif reste limité. Dans un cluster actif, les échecs silencieux peuvent passer inaperçus pendant des jours, affectant vos backups, synchronisations et traitements batch.
En combinant les bonnes pratiques Kubernetes avec le monitoring heartbeat de MoniTao, vous obtenez une visibilité complète sur vos jobs planifiés. Commencez par vos CronJobs critiques et étendez progressivement la couverture à l'ensemble de votre cluster.
Commencez gratuitement, sans carte bancaire.