Repository navigation
Jobs
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).
- 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.
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.
-
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.
restartPolicy doit être OnFailure ou Never — jamais Always : un Pod de Job ne doit pas être redémarré indéfiniment.
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
ttlSecondsAfterFinished permet de supprimer automatiquement le Job et ses Pods quelques secondes après sa fin (utile pour nettoyer les clusters).
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.
- 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…).
- 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
Kubernetes (k8s)
- Accueil
- Vue d'ensemble
- Les containers
- L'orchestration
- L'architecture de k8s
- Les composants de k8s
- Noeud maître vs noeud esclave
- Les namespaces
- Les pods
- Les sondes et le cycle de vie
- Les ReplicaSets
- Les Deployments
- Les Jobs
- Les CronJobs
- Les DaemonSets
- Les StatefulSets
- Les ConfigMaps et Secrets
- Les volumes persistants (PV & PVC)
- Les Services
- Les Ingress
- Le Gateway API
- La mise à l'échelle
- Le RBAC
- Helm
- kubectl