Un Job exécute des tâches ponctuelles et garantit qu'un nombre spécifié de pods se termine avec succès. Cette rubrique explique le fonctionnement des Jobs et décrit comment en créer un dans ACK à l'aide de la console ou de kubectl.
Fonctionnement des Jobs
Contrairement aux Deployments, StatefulSets et DaemonSets, qui maintiennent en continu un nombre cible de pods en cours d'exécution, un Job suit les achèvements réussis des pods. Définissez spec.completions pour indiquer le nombre de succès requis et spec.parallelism pour définir la concurrence maximale.
Types d'exécution
Choisissez un type d'exécution :
Non parallèle (séquentiel)
Exécutez un pod à la fois. Le Job est considéré comme terminé lorsque le pod s'arrête avec succès.
**spec.completions** |
**spec.parallelism** |
|---|---|
| 1 | 1 |
Cette méthode convient aux tâches d'initialisation uniques, telles que les migrations de base de données.
Parallèle avec un nombre d'achèvements fixe
Exécutez plusieurs pods en parallèle. Le Job se termine lorsque le nombre de pods défini par spec.completions a réussi.
**spec.completions** |
**spec.parallelism** |
|---|---|
| N | M (M ≤ N) |
Si M = N : tous les N pods s'exécutent en parallèle et doivent tous réussir. Utilisez cette configuration lorsque les ressources de calcul sont suffisantes.
Si M < N : jusqu'à M pods s'exécutent simultanément jusqu'à ce que N pods soient terminés avec succès. Cette approche est utile pour la redondance, par exemple pour des tâches réparties sur plusieurs zones où un seul résultat est nécessaire.
Parallèle avec contrainte de ressources
Lorsque les ressources sont insuffisantes pour exécuter N pods en parallèle, limitez la concurrence à l'aide de spec.parallelism.
**spec.completions** |
**spec.parallelism** |
|---|---|
| N | M (M < N) |
M pods s'exécutent à la fois. À mesure que chaque pod se termine avec succès, de nouveaux pods démarrent jusqu'à ce que N succès soient atteints.
Prérequis
Assurez-vous de disposer des éléments suivants :
Un cluster ACK avec accès au réseau public (pour extraire l'image d'exemple)
kubectl connecté au cluster (méthode kubectl uniquement)
Pour activer l'accès au réseau public :
(Recommandé) Activer l'accès à Internet pour un cluster ACK existant — créez une passerelle NAT pour le VPC. Toutes les ressources du cluster obtiennent un accès public.
Attribuer des adresses IP publiques statiques aux nœuds — chaque nœud exécutant des charges de travail doit disposer d'une adresse IP publique.
Créer un Job
Créer un Job à l'aide de la console ACK
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom du cluster souhaité. Dans le volet de gauche, choisissez Workloads > Jobs.
Sur la page Jobs, cliquez sur Create from Image.
À l'étape Basic Information, configurez les paramètres de base et cliquez sur Next.
-
Dans la section General, saisissez
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestdans le champ Image Name. Dans la partie Start de la section Lifecycle, saisissez/bin/shdans le champ Command et["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]dans le champ Parameter. Cliquez ensuite sur Next.ImportantL'extraction de l'image
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestnécessite un accès à Internet. Si vous avez activé l'option Configure SNAT for VPC lors de la création du cluster, celui-ci dispose déjà d'un accès à Internet. Pour les clusters existants, activez l'accès à Internet.
-
À l'étape Advanced, configurez les paramètres Job Settings. Dans cet exemple, définissez Completions sur 2, puis cliquez sur Create.
Paramètre Description Completions Nombre d'achèvements de pods requis avec succès. Correspond à spec.completions.Parallelism Nombre maximal de pods simultanés. Correspond à spec.parallelism.Timeout Durée maximale du Job en secondes. Correspond à spec.activeDeadlineSeconds. Par défaut :600. Le Job se termine lorsque cette durée est dépassée, quel que soit le nombre de pods ayant réussi.BackoffLimit Nombre maximal d'échecs de pod avant que le Job ne soit considéré comme échoué. Correspond à spec.backoffLimit. Par défaut :6.Restart Politique de redémarrage des pods. Correspond à template.spec.restartPolicy. Options : Never (redémarre le pod existant ; ne compte pas dansspec.backoffLimit) ou On Failure (crée un nouveau pod pour remplacer celui qui a échoué).Pod Labels Libellés des pods. ACK ajoute app:<application-name>par défaut.Pod Annotations Annotations des pods. Certaines fonctionnalités d'ACK utilisent des annotations pour la configuration. 
-
Consultez les journaux du Job dans la console ACK. Les deux pods produisent une sortie identique.

Créer un Job à l'aide de kubectl
Connectez-vous au cluster avec kubectl avant de continuer. Consultez la rubrique Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster.
-
Créez un fichier
job.yaml:apiVersion: batch/v1 kind: Job metadata: name: example-job spec: completions: 2 # Stop the Job after two pods terminate successfully. parallelism: 1 # Run only one pod at a time. template: spec: containers: - name: counter image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest command: - /bin/sh - -c - | echo "starting..."; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo "${COUNTER}"; done; echo "finished"; exit 0 restartPolicy: Never -
Appliquez le manifeste :
kubectl apply -f job.yamlSortie attendue :
job.batch/example-job created -
Après environ 15 secondes, vérifiez l'état du Job :
kubectl get job example-jobUn pod a réussi ; le Job est toujours en cours d'exécution :
NAME STATUS COMPLETIONS DURATION AGE example-job Running 1/2 16s 16s -
Après environ 40 secondes, vérifiez à nouveau :
kubectl get job example-jobLe Job est terminé :
NAME STATUS COMPLETIONS DURATION AGE example-job Complete 2/2 27s 37s -
Affichez les journaux de tous les pods :
kubectl logs -l job-name=example-jobSortie (deux ensembles identiques, un par pod) :
starting... 1 2 3 4 5 finished starting... 1 2 3 4 5 finished
Étapes suivantes
Créer un CronJob — planifiez un Job de manière récurrente.
FAQ sur les charges de travail — résolvez les problèmes courants liés aux charges de travail.
Dépannage des pods — diagnostiquez et corrigez les exceptions des pods.