Kubernetes implémente cronjob pour exécuter régulièrement des scripts shell
Kubernetes cronjob exécute régulièrement le rôle de scripts shell
De nombreux didacticiels existants expliquent uniquement comment exécuter régulièrement une commande via cronjob, mais dans le processus de production réel d'utilisation de cronjob, en particulier lorsqu'un grand nombre de commandes shell doivent être exécutées, il ne répond souvent pas aux exigences. En exécutant un script shell associé à configmap, vous pouvez ajuster de manière flexible les commandes dans le script shell et satisfaire cronjob pour exécuter des commandes shell plus complexes.
Un CronJob qui exécute périodiquement un script shell dans Kubernetes a de nombreuses utilisations, telles que :
- Maintenance régulière : CronJob peut être configuré pour effectuer certaines tâches de maintenance de manière régulière, telles que le nettoyage des anciens fichiers journaux, la mise à jour des bases de données, la maintenance des index, etc.
- Sauvegarde et restauration des données : vous pouvez créer un CronJob pour sauvegarder périodiquement la base de données ou le système de fichiers, et effectuer des opérations de restauration si nécessaire.
- Traitement périodique des données : si votre système doit traiter des données de manière régulière (par exemple, chaque nuit), vous pouvez créer un CronJob pour traiter ces tâches.
- Surveillance et rapports : CronJob peut effectuer périodiquement des tâches de surveillance, telles que la vérification de l'état du système ou la génération de rapports.
- Mise à l'échelle et mise à l'échelle automatiques : vous pouvez créer des CronJobs qui augmentent ou réduisent automatiquement le nombre de pods en cours d'exécution selon les besoins en fonction de la charge système prévue.
- CronJob : CronJob peut également être utilisé pour exécuter n'importe quelle tâche que vous souhaitez exécuter à un moment précis.
1. Processus de mise en œuvre
1.1 Définir la carte de configuration
cat <<EOF > script-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: script-configmap
data: #shell 脚本的命令,可以根据实际情况创建更复杂的命令
myscript.sh: |
#!/bin/bash
echo "Hello, Kubernetes!"
EOF
1.2 Définir la tâche cron
cat <<EOF > my-cronjob.yaml
apiVersion: batch/v1 #kubernetes 1.21版本后请使用batch/v1,1.21前使用batch/v1beta1
kind: CronJob
metadata:
name: my-cronjob
spec:
schedule: "*/1 * * * *" #每分钟执行一次
concurrencyPolicy: Allow #并发策略,允许并发运行
jobTemplate:
spec:
template:
spec:
volumes:
- name: script-volume
configMap:
name: script-configmap
containers:
- name: my-container
image: centos
volumeMounts:
- name: script-volume
mountPath: /scripts
command: ["/bin/bash", "/scripts/myscript.sh"]
restartPolicy: OnFailure
EOF
Paramètres API couramment configurés pour cronjob :
- spec.schedule : Scheduling, champ obligatoire, spécifie le cycle d'exécution de la tâche, le format est le même que Cron
- spec.jobTemplate : modèle de travail, champ obligatoire, spécifie la tâche à exécuter, le format est le même que celui du travail
- spec.startingDeadlineSeconds : Le délai de démarrage du Job (en secondes), ce champ est facultatif. Si l'heure planifiée est manquée pour une raison quelconque, le travail qui a manqué l'heure d'exécution sera considéré comme ayant échoué. Si non spécifié, pas de délai
- spec.concurrencyPolicy : politique de concurrence, ce champ est également facultatif. Il spécifie comment gérer l'exécution simultanée des tâches créées par Cron Job. Une seule des politiques suivantes peut être spécifiée :
a.Autoriser (par défaut) : Autoriser l'exécution simultanée de tâches
b.Interdire : Interdire l'exécution simultanée, si la précédente n'a pas été terminée, ignorer directement la suivante
c.Remplacer : Annuler la tâche en cours d'exécution, la remplacer par une nouvelle
Notez que la politique actuelle ne peut être appliquée qu'aux tâches créées par la même tâche cron. S'il existe plusieurs tâches cron, les tâches qu'elles créent sont toujours autorisées à s'exécuter simultanément.
- spec.suspend : suspendre, ce champ est également facultatif. Si la valeur est true, toutes les exécutions ultérieures seront suspendues. Il n'a aucun effet sur les travaux qui ont déjà commencé à s'exécuter. La valeur par défaut est faux
- spec.successfulJobsHistoryLimit et .spec.failedJobsHistoryLimit : limite d'historique, est un champ facultatif. Ils spécifient combien de travaux terminés et échoués peuvent être conservés
1.3 Vérifier si le cronjob s'exécute correctement
#查看cronjob状态
kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
my-cronjob */5 * * * * False 2 19s 23m
#查看job状态
kubectl get jobs
NAME COMPLETIONS DURATION AGE
my-cronjob-28096067 1/1 34s 3m38s
my-cronjob-28096068 1/1 34s 2m38s
my-cronjob-28096069 1/1 34s 98s
#查看pod状态
kubectl get po
NAME READY STATUS RESTARTS AGE
my-cronjob-28096067-qxtqg 0/1 Completed 0 5m54s
my-cronjob-28096068-7scqd 0/1 Completed 0 4m54s
my-cronjob-28096069-gtlzg 0/1 Completed 0 3m54s