Un CronJob est un type de workload qui ne gère pas directement les Pods. Il crée des instances Job indépendantes selon une planification définie et en assure le suivi. Utilisez-le pour exécuter des tâches périodiques, telles que les sauvegardes, la génération de rapports ou l'envoi d'e-mails. Cette rubrique explique comment créer un CronJob via la console ou avec kubectl.
Créez un CronJob à l'aide de la console ACK ou de kubectl.
Les images d'exemple sont publiques. Votre cluster doit disposer d'un accès Internet pour les extraire :
Activer l'accès Internet pour un cluster existant (recommandé) : Créez une passerelle NAT publique pour le Virtual Private Cloud (VPC) hébergeant le cluster afin d'activer l'accès Internet pour toutes les ressources.
Attribuer des adresses IP publiques statiques aux nœuds : Les nœuds dotés d'adresses IP publiques peuvent extraire des images publiques, mais chaque nœud exécutant le workload doit disposer d'une adresse IP publique.
Prérequis
Un cluster ACK avec accès Internet
(Pour kubectl) kubectl est connecté au cluster
Créer un CronJob via la console
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de gauche, sélectionnez Workloads > CronJobs.
Sur la page CronJobs, cliquez sur Create from Image.
Sur la page Basic Information, configurez les paramètres de base et cliquez sur Next pour accéder à la page Container.
-
Dans la section General, définissez Image Name sur
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest. Dans la section Lifecycle, configurez le paramètre Start. Cliquez sur Next pour accéder à la page Advanced.Command:
/bin/shParameter:
["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]
ImportantLe cluster doit disposer d'un accès Internet pour extraire
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest. Si vous avez sélectionné Configure SNAT for VPC lors de la création du cluster, cette option est déjà activée. Sinon, activez l'accès Internet pour le cluster.
-
Sur la page Advanced, configurez les paramètres de planification et de job. Pour cet exemple, définissez la planification toutes les 2 minutes et conservez les autres options par défaut. Cliquez sur Create.
CronJob settings
Paramètre Description Schedule Fréquence. Choisissez un préréglage (horaire, quotidien, hebdomadaire, mensuel) ou saisissez une expression cron personnalisée ( minute hour day-of-month month day-of-week). Consultez la section Syntaxe des expressions Cron.Concurrency policy Comportement lorsqu'un nouveau Job est prévu alors que le précédent est toujours en cours d'exécution. Forbid: ignore le nouveau Job (pour les jobs séquentiels ou dépendants).Allow: exécute les deux simultanément (pour les jobs indépendants).Replace: termine le Job en cours d'exécution et en démarre un nouveau (lorsque seul le dernier résultat importe).Job history
Paramètre Description Successful Jobs History Limit Nombre de Jobs réussis récents à conserver. Les plus anciens sont supprimés. Failed Jobs History Limit Nombre de Jobs ayant échoué récents à conserver. Job settings
Paramètre Champ Kubernetes Description Valeur par défaut Completions jobTemplate.spec.completionsNombre de Pods devant se terminer avec succès pour que le Job soit considéré comme réussi. — Parallelism jobTemplate.spec.parallelismNombre maximal de Pods s'exécutant simultanément. — Timeout jobTemplate.spec.activeDeadlineSecondsDurée d'exécution maximale d'un Job. Le Job s'arrête lorsque cette limite est atteinte, quel que soit son état d'avancement. 600 secondes BackoffLimit jobTemplate.spec.backoffLimitNombre maximal de tentatives sur l'ensemble des Pods avant que le Job ne soit marqué comme ayant échoué. 6 Restart jobTemplate.spec.template.spec.restartPolicyComportement de redémarrage du Pod en cas d'échec. Never: redémarre le conteneur sur place sans créer de nouveau Pod (les redémarrages ne comptent pas dansbackoffLimit).On Failure: crée un nouveau Pod pour remplacer celui qui a échoué.— Labels, annotations
Paramètre Description Pod Labels Libellés ajoutés à chaque Pod. ACK ajoute app: <application-name>par défaut. Utilisé pour associer les Pods aux workloads et aux services.Pod Annotations Annotations ajoutées à chaque Pod. Certaines fonctionnalités ACK nécessitent des annotations spécifiques. 
-
Une fois créé, les Jobs apparaissent à des intervalles de 2 minutes.

Créer un CronJob avec kubectl
Connectez-vous au cluster via kubectl avant de continuer.
-
Enregistrez le code YAML suivant sous le nom
cronjob.yaml. La sectionjobTemplate.specpossède la même structure qu'une spécification de Job autonome.apiVersion: batch/v1 kind: CronJob metadata: name: example-cronjob labels: app: cronjob spec: schedule: "*/2 * * * *" # Run every 2 minutes concurrencyPolicy: Forbid # Skip new Job if previous one is still running successfulJobsHistoryLimit: 3 # Keep the 3 most recent successful Jobs failedJobsHistoryLimit: 2 # Keep the 2 most recent failed Jobs jobTemplate: spec: completions: 1 # Job succeeds after 1 Pod completes parallelism: 1 # Run one Pod at a time template: spec: containers: - name: counter image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 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 # Do not restart the Pod on failure -
Appliquez le manifeste :
kubectl apply -f cronjob.yamlSortie attendue :
cronjob.batch/example-cronjob created
Vérifier le CronJob
Confirmez que le CronJob s'exécute selon la planification définie.
-
Vérifiez l'état du CronJob :
kubectl get cronjob example-cronjobSortie attendue :
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE example-cronjob */2 * * * * False 0 <none> 15sSUSPENDest défini surFalse, ce qui signifie que le CronJob est actif et se déclenche selon la planification. -
Après environ 10 minutes, listez les Jobs créés par le CronJob :
kubectl get jobSortie attendue :
NAME STATUS COMPLETIONS DURATION AGE example-cronjob-2901**22 Complete 1/1 31s 5m13s example-cronjob-2901**23 Complete 1/1 31s 3m13s example-cronjob-2901**24 Complete 1/1 26s 73sLes Jobs apparaissent à des intervalles de 2 minutes et affichent l'état
Completeune fois terminés. -
Consultez les journaux d'un Pod de Job :
# List Pods for the most recent Job kubectl get pods --selector=job-name=<job-name> # View logs kubectl logs <pod-name>Remplacez
<job-name>par un nom de Job issu de la sortie ci-dessus (par exemple,example-cronjob-2901**24). Une sortie réussie se termine parfinished.
Syntaxe des expressions Cron
Une expression Cron se compose de cinq champs séparés par des espaces :
# .---------------- minute (0–59)
# | .------------- hour (0–23)
# | | .---------- day of month (1–31)
# | | | .------- month (1–12)
# | | | | .---- day of week (0–6, Sunday to Saturday)
# | | | | |
* * * * *
Raccourcis courants :
| Entrée | Description | Équivalent |
|---|---|---|
@hourly |
Exécute une fois par heure au début de l'heure | 0 * * * * |
@daily (ou @midnight) |
Exécute une fois par jour à minuit | 0 0 * * * |
@weekly |
Exécute une fois par semaine à minuit le dimanche | 0 0 * * 0 |
@monthly |
Exécute une fois par mois à minuit le premier jour du mois | 0 0 1 * * |
@yearly (ou @annually) |
Exécute une fois par an à minuit le 1er janvier | 0 0 1 1 * |
Construisez et validez les expressions Cron à l'aide de crontab.guru.