Aller au contenu principal

Lab 7.3 - Jobs et CronJobs

Objectifs du Lab

À la fin de ce lab, vous serez capable de:

  • Créer et exécuter des Jobs pour des tâches ponctuelles.
  • Comprendre les différents types de Jobs (complet, parallèle).
  • Créer des CronJobs pour des tâches planifiées.
  • Gérer l'historique des Jobs.
  • Surveiller l'exécution des Jobs et CronJobs.

Durée Estimée

45-60 minutes

Prérequis

  • kubectl installé et configuré.
  • Cluster Kubernetes local fonctionnel (minikube ou kind).
  • Connaissances sur les Jobs et CronJobs (Chapitre 7.3).

Partie 1: Création d'un Job Simple

Un Job crée un ou plusieurs Pods et garantit qu'un certain nombre d'entre eux se terminent avec succès.

Étape 1.1: Créer un Job Simple

Créez un fichier job-simple.yaml:

# job-simple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-simple
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Tâche terminée avec succès!' && date"]
restartPolicy: Never # Jobs utilisent Never ou OnFailure

Explication:

  • restartPolicy: Never: Le Pod ne sera pas redémarré automatiquement s'il échoue. Pour les Jobs, utilisez Never ou OnFailure.
  • Le Job crée un Pod qui exécute la commande et se termine.

Appliquez le Job:

kubectl apply -f job-simple.yaml

Étape 1.2: Vérifier l'Exécution

Vérifiez le statut du Job:

kubectl get jobs

Vérifiez les Pods créés:

kubectl get pods -l job-name=job-simple

Une fois le Pod terminé, vérifiez les logs:

kubectl logs -l job-name=job-simple

Vous devriez voir le message "Tâche terminée avec succès!" et la date.

Étape 1.3: Vérifier le Statut Complet

Vérifiez les détails du Job:

kubectl describe job job-simple

Vous devriez voir que le Job est Complete avec 1/1 complété.


Partie 2: Job avec Plusieurs Completions

Un Job peut être configuré pour s'exécuter plusieurs fois (parallèlement ou séquentiellement).

Étape 2.1: Créer un Job avec Completions

Créez un fichier job-multiple.yaml:

# job-multiple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-multiple
spec:
completions: 5 # Le Job doit s'exécuter 5 fois avec succès
parallelism: 2 # Exécuter 2 Pods en parallèle à la fois
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Tâche $(date +%s)' && sleep 2"]
restartPolicy: Never

Explication:

  • completions: 5: Le Job doit compléter 5 exécutions réussies.
  • parallelism: 2: Maximum 2 Pods s'exécutent en parallèle à la fois.

Appliquez le Job:

kubectl apply -f job-multiple.yaml

Étape 2.2: Observer l'Exécution

Surveillez les Pods en temps réel:

kubectl get pods -l job-name=job-multiple -w

Vous devriez voir 2 Pods s'exécuter en parallèle, puis d'autres se créer jusqu'à ce que 5 complétions soient atteintes.

Vérifiez le statut du Job:

kubectl get job job-multiple

Une fois terminé, vous devriez voir 5/5 complétions.


Partie 3: Job avec Backoff Limit

Le backoffLimit définit le nombre de tentatives en cas d'échec.

Étape 3.1: Créer un Job qui Échoue

Créez un fichier job-failure.yaml:

# job-failure.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-failure
spec:
backoffLimit: 3 # Maximum 3 tentatives en cas d'échec
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["exit 1"] # Échoue intentionnellement
restartPolicy: Never

Appliquez le Job:

kubectl apply -f job-failure.yaml

Étape 3.2: Observer les Tentatives

Surveillez les Pods:

kubectl get pods -l job-name=job-failure -w

Vous devriez voir plusieurs Pods être créés (jusqu'à 3 tentatives) avant que le Job ne soit marqué comme Failed.

Vérifiez le statut du Job:

kubectl get job job-failure
kubectl describe job job-failure

Partie 4: Création d'un CronJob

Un CronJob crée des Jobs de manière récurrente selon un calendrier (format cron).

Étape 4.1: Créer un CronJob

Créez un fichier cronjob-example.yaml:

# cronjob-example.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "*/1 * * * *" # Toutes les minutes (pour le test)
jobTemplate:
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Exécution CronJob - $(date)'"]
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3 # Garder 3 Jobs réussis dans l'historique
failedJobsHistoryLimit: 1 # Garder 1 Job échoué dans l'historique

Explication:

  • schedule: "*/1 * * * *": Format cron (minute heure jour mois jour-semaine). Ici, toutes les minutes.
  • successfulJobsHistoryLimit: 3: Garde les 3 derniers Jobs réussis.
  • failedJobsHistoryLimit: 1: Garde le dernier Job échoué.

Appliquez le CronJob:

kubectl apply -f cronjob-example.yaml

Étape 4.2: Vérifier le CronJob

Vérifiez le statut du CronJob:

kubectl get cronjob cronjob-example
# ou
kubectl get cj cronjob-example

Attendez une minute, puis vérifiez que des Jobs sont créés:

kubectl get jobs

Vous devriez voir des Jobs nommés cronjob-example-<timestamp>.

Vérifiez les Pods créés par les Jobs:

kubectl get pods

Vérifiez les logs d'un des Jobs:

JOB_NAME=$(kubectl get jobs -o jsonpath='{.items[0].metadata.name}')
kubectl logs -l job-name=$JOB_NAME

Partie 5: Suspendre un CronJob

Vous pouvez suspendre temporairement un CronJob sans le supprimer.

Étape 5.1: Suspendre le CronJob

Suspendre le CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":true}}'

Vérifiez que le CronJob est suspendu:

kubectl get cronjob cronjob-example

Vous devriez voir True dans la colonne SUSPEND.

Étape 5.2: Reprendre le CronJob

Reprendre le CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":false}}'

Partie 6: Exemples de Schedules Cron

Voici quelques exemples de schedules cron courants:

schedule: "0 0 * * *"        # Tous les jours à minuit
schedule: "0 */6 * * *" # Toutes les 6 heures
schedule: "0 9 * * 1" # Tous les lundis à 9h
schedule: "0 0 1 * *" # Le premier jour de chaque mois à minuit
schedule: "*/30 * * * *" # Toutes les 30 minutes

Partie 7: Nettoyage

Supprimez les ressources créées:

# Supprimer les CronJobs (supprime aussi les Jobs associés)
kubectl delete cronjob cronjob-example

# Supprimer les Jobs
kubectl delete job job-simple job-multiple job-failure

# Supprimer les Pods restants (optionnel, normalement supprimés automatiquement)
kubectl delete pods -l job-name

Résumé du Lab

Dans ce lab, vous avez exploré les Jobs et CronJobs. Vous avez appris à créer des Jobs pour des tâches ponctuelles, à configurer des Jobs parallèles, à gérer les échecs avec backoffLimit, et à créer des CronJobs pour des tâches planifiées récurrentes.


Prochaines Étapes

Le dernier lab de ce module vous montrera comment utiliser les Init Containers et Sidecars pour des patterns avancés.

Lab 7.4: Init Containers et Sidecars


Lab créé le: Décembre 2024