Jobs - ii02735/learn-k8 GitHub Wiki
Les Jobs
Qu'est-ce qu'un Job ?
Un Job est un objet Kubernetes pour le travail par lots (batch) : il exécute un ou plusieurs Pods jusqu'à la réussite, puis s'arrête.
Contrairement à un Deployment (des Pods permanents qui doivent rester vivants), un Job gère des Pods à durée finie : le Pod doit se terminer tout seul avec succès (exit 0).
- chaque succès de Pod est compté par le Job ;
- quand le nombre voulu est atteint, le Job est terminé (
Complete) et ne redémarre plus rien ; - si un Pod échoue, le Job le relance (dans la limite de
backoffLimit).
Quand utiliser un Job ?
- lancer un traitement de données (import, export, transformation) ;
- exécuter une migration de base de données une seule fois ;
- générer un rapport, un backup, un travail de nuit ;
- n'importe quelle tâche qui a un début et une fin.
completions et parallelism
Un Job se pilote avec deux notions :
completions: le nombre total de Pods qui doivent réussir pour que le Job soit terminé (par défaut : 1).parallelism: le nombre de Pods qui s'exécutent en même temps (par défaut : 1).
Exemple : completions: 6 avec parallelism: 2 → le Job lance 2 Pods à la fois et s'arrête quand 6 Pods au total ont réussi.
Les relances : backoffLimit
spec.backoffLimitlimite le nombre de relances en cas d'échec (par défaut : 6).- Les relances se font avec un backoff exponentiel (10 s, 20 s, 40 s…) pour ne pas marteler le cluster.
- Au-delà de la limite, le Job est marqué
Failed.
:warning: Pour un Job, restartPolicy doit être OnFailure ou Never — jamais Always : un Pod de Job ne doit pas être redémarré indéfiniment.
Un manifeste Job
apiVersion: batch/v1
kind: Job
metadata:
name: calcul
spec:
completions: 6
parallelism: 2
backoffLimit: 4
template:
spec:
restartPolicy: OnFailure
containers:
- name: calcul
image: busybox
command: ["sh", "-c", "echo traitement && sleep 2"]
[!NOTE]
ttlSecondsAfterFinishedpermet de supprimer automatiquement le Job et ses Pods quelques secondes après sa fin (utile pour nettoyer les clusters).
Et pour planifier ? Le CronJob
Pour exécuter un Job régulièrement (sauvegarde de nuit, envoi d'e-mails, purge de logs…), on utilise un CronJob : à chaque déclenchement, il crée un Job qui exécute le travail, puis se termine.
→ Le détail (format schedule, concurrencyPolicy, startingDeadlineSeconds, historique, manifeste) est sur la page Les CronJobs.
Ne pas confondre les workloads
- Deployment / ReplicaSet : des Pods permanents, maintenus vivants en permanence (services).
- Job : des Pods à durée finie, jusqu'au succès (batch).
- CronJob : des Jobs planifiés à intervalles réguliers (voir Les CronJobs).
- DaemonSet : un Pod permanent sur chaque noeud.
- StatefulSet : des Pods avec identité et stockage stables (bases de données…).
Les commandes principales
- Créer un Job (impératif) :
kubectl create job calcul --image=busybox -- echo hello - Lister les Jobs :
kubectl get jobs - Obtenir les détails :
kubectl describe job calcul - Voir la sortie des Pods :
kubectl logs job/calcul - Supprimer un Job et ses Pods :
kubectl delete job calcul - Créer un CronJob (impératif) :
kubectl create cronjob sauvegarde --image=busybox --schedule="0 2 * * *" -- echo ok - Lister les CronJobs :
kubectl get cronjobs