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, utilisezNeverouOnFailure.- 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