Kubernetes implémente cronjob pour exécuter régulièrement des scripts shell

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46660849/article/details/131019740
conseillé
Classement