9 votes

Comment faire échouer une tâche (cron) après un certain nombre de tentatives ?

Nous avons mis en place un cluster Kubernetes de tâches cron de scraping web. Tout semble bien se passer jusqu'à ce qu'une tâche cron commence à échouer (par exemple, lorsqu'un site change de structure et que notre scraper ne fonctionne plus). Il semble que, de temps en temps, quelques tâches cron défaillantes continuent à réessayer au point de faire tomber notre cluster. Exécution de kubectl get cronjobs (avant une défaillance du cluster) montrera trop de travaux en cours pour un travail défaillant.

J'ai essayé de suivre la note décrite ici concernant un problème connu avec la politique d'échec du pod backoff ; cependant, cela ne semble pas fonctionner.

Voici notre configuration pour référence :

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scrape-al
spec:
  schedule: '*/15 * * * *'
  concurrencyPolicy: Allow
  failedJobsHistoryLimit: 0
  successfulJobsHistoryLimit: 0
  jobTemplate:
    metadata:
      labels:
        app: scrape
        scrape: al
    spec:
      template:
        spec:
          containers:
            - name: scrape-al
              image: 'govhawk/openstates:1.3.1-beta'
              command:
                - /opt/openstates/openstates/pupa-scrape.sh
              args:
                - al bills --scrape
          restartPolicy: Never
      backoffLimit: 3

Idéalement, nous préférerions qu'une tâche cron soit terminée après N tentatives (par exemple, quelque chose comme kubectl delete cronjob my-cron-job après my-cron-job a échoué 5 fois). Toute idée ou suggestion serait très appréciée. Merci !

9voto

aerokite Points 5871

Vous pouvez demander à votre job d'arrêter de réessayer en utilisant la méthode suivante backoffLimit .

Spécifie le nombre de tentatives avant de marquer ce travail comme ayant échoué.

Dans votre cas

spec:
  template:
    spec:
      containers:
        - name: scrape-al
          image: 'govhawk/openstates:1.3.1-beta'
          command:
            - /opt/openstates/openstates/pupa-scrape.sh
          args:
            - al bills --scrape
      restartPolicy: Never
  backoffLimit: 3

Vous définissez 3 comme backoffLimit de votre emploi. Cela signifie que lorsqu'une tâche est créée par CronJob, elle sera réessayée 3 fois si elle échoue. Ceci contrôle le Job, pas CronJob

Lorsque la tâche échoue, une autre tâche sera créée à nouveau selon la période prévue.

Vous voulez : Si je ne me trompe pas, vous voulez arrêter de programmer de nouvelles tâches, lorsque vos tâches programmées ont échoué 5 fois. . N'est-ce pas ?

Réponse : Dans ce cas, ce n'est pas possible automatiquement .

Solution possible : Vous devez suspendre CronJob pour qu'il arrête de programmer un nouveau travail.

Suspend: true

Vous pouvez le faire manuellement. Si vous ne voulez pas le faire manuellement, vous devez configurer un observateur, qui surveillera le statut de votre CronJob, et mettra à jour le CronJob pour le suspendre si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X