Aller au contenu principal
Sommaire de la formation

Job et CronJob

coolibra343 vues

Job et CronJob:

 

Job:

Un Job est un type de ressource Kubernetes utilisé pour exécuter des tâches à court terme, souvent des travaux en batch ou des tâches ponctuelles. Les Jobs garantissent que la tâche est exécutée une seule fois ou un certain nombre de fois avec succès.

 

Avantages:

  • Durée limitée donc consommation de ressource limitée
  • Exécution unique
  • Rapidité
  • Très utile pour les tâches de backup
  • Un traitement de bacth

 

  • Exemple1: job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

 

kubectl apply -f job.yaml
kubetctl get job,po

 

 

  • Exemple 2: backoff-limit and job failure
apiVersion: batch/v1
kind: Job
metadata:
  name: job-backoff-limit-per-index
spec:
  completions: 10
  parallelism: 3
  completionMode: Indexed  # required for the feature
  backoffLimitPerIndex: 1  # maximal number of failures per index
  maxFailedIndexes: 5      # maximal number of failed indexes before terminating the Job execution
  template:
    spec:
      restartPolicy: Never # required for the feature
      containers:
      - name: python-job
        image: python
        command:           # The jobs fails as there is at least one failed index
                           # (all even indexes fail in here), yet all indexes
                           # are executed as maxFailedIndexes is not exceeded.
        - python3
        - -c
        - |
          import os, sys
          print("Hello world")
          if int(os.environ.get("JOB_COMPLETION_INDEX")) % 2 == 0:
            sys.exit(1)  
---
apiVersion: batch/v1
kind: Job
metadata:
  name: job-pod-failure-policy
spec:
  completions: 12
  parallelism: 3
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: main
        image: docker.io/library/bash:5
        command: ["bash"]        # example command simulating a bug which triggers the FailJob action
        args:
        - -c
        - echo "Hello world!" && sleep 5 && exit 42
  backoffLimit: 6
  podFailurePolicy:
    rules:
    - action: FailJob
      onExitCodes:
        containerName: main      # optional
        operator: In             # one of: In, NotIn
        values: [42]
    - action: Ignore             # one of: Ignore, FailJob, Count
      onPodConditions:
      - type: DisruptionTarget   # indicates Pod disruption

 

kubectl apply -f job.yaml

kubectl get job,po

 

ConJob:

Un CronJob est similaire à un Job, mais il permet de planifier l'exécution de la tâche de manière répétée, à une heure spécifique, selon une fréquence donnée (comme cron sur un système Unix/Linux). Les CronJobs sont couramment utilisés pour des tâches telles que la sauvegarde de données, la génération de rapports ou la maintenance régulière de l'infrastructure.

Avantages:

  • Tous les avantages d'un job
  • planification de tâches
  • syntaxe cron unix
  • Execution repétée

 

Schedule syntax

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
# * * * * *

 

Exemple1: Every minute

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

 

kubectl apply -f cron-job.yaml
kubectl get cj,job,po

 

 

Exemple2: Si vous avez un script dans sauvegarder-script.sh

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sauvegarde-quotidienne
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: sauvegarde
            image: mon-image-de-sauvegarde:latest
            command: ["sauvegarder-script.sh"]

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.