Kubernetes implementiert Cronjob, um regelmäßig Shell-Skripte auszuführen

Kubernetes implementiert Cronjob, um regelmäßig Shell-Skripte auszuführen

Kubernetes Cronjob führt regelmäßig die Rolle von Shell-Skripten aus

Viele bestehende Tutorials erklären nur, wie man einen Befehl regelmäßig über Cronjob ausführt, aber bei der tatsächlichen Produktion und Verwendung von Cronjob, insbesondere wenn eine große Anzahl von Shell-Befehlen ausgeführt werden muss, kann es die Anforderungen oft nicht erfüllen. Durch Ausführen eines mit configmap verknüpften Shell-Skripts können Sie die Befehle im Shell-Skript flexibel anpassen und Cronjob erfüllen, um komplexere Shell-Befehle auszuführen.

Ein CronJob, der regelmäßig ein Shell-Skript in Kubernetes ausführt, hat viele Verwendungszwecke, wie zum Beispiel:

  • Regelmäßige Wartung: CronJob kann so eingestellt werden, dass bestimmte Wartungsaufgaben regelmäßig durchgeführt werden, z. B. das Bereinigen alter Protokolldateien, das Aktualisieren von Datenbanken, das Verwalten von Indizes usw.
  • Datensicherung und -wiederherstellung: Sie können einen CronJob erstellen, um die Datenbank oder das Dateisystem regelmäßig zu sichern und bei Bedarf Wiederherstellungsvorgänge durchzuführen.
  • Periodische Datenverarbeitung: Wenn Ihr System regelmäßig Daten verarbeiten muss (z. B. jede Nacht), können Sie einen CronJob erstellen, um diese Aufgaben zu verarbeiten.
  • Überwachung und Berichterstellung: CronJob kann regelmäßig Überwachungsaufgaben durchführen, z. B. die Überprüfung des Systemzustands oder die Erstellung von Berichten.
  • Automatische Skalierung und Skalierung: Sie können CronJobs erstellen, die die Anzahl der ausgeführten Pods je nach Bedarf basierend auf der prognostizierten Systemlast automatisch nach oben oder unten skalieren.
  • CronJob: Mit CronJob können Sie auch jede beliebige Aufgabe ausführen, die Sie zu einem bestimmten Zeitpunkt ausführen möchten.

1. Implementierungsprozess

1.1 Definieren Sie die Konfigurationskarte

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 Cronjob definieren

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

Häufig konfigurierte API-Parameter für Cronjob:

  • spec.schedule: Scheduling, Pflichtfeld, gibt den Task-Laufzyklus an, das Format ist das gleiche wie bei Cron
  • spec.jobTemplate: Jobvorlage, erforderliches Feld, gibt die auszuführende Aufgabe an, das Format ist das gleiche wie bei Job
  • spec.startingDeadlineSeconds: Die Frist für den Start des Jobs (in Sekunden). Dieses Feld ist optional. Wenn die geplante Zeit aus irgendeinem Grund versäumt wird, wird der Job, der die Ausführungszeit versäumt hat, als fehlgeschlagen betrachtet. Wenn nicht angegeben, keine Frist
  • spec.concurrencyPolicy: Parallelitätsrichtlinie, dieses Feld ist ebenfalls optional. Es gibt an, wie mit der gleichzeitigen Ausführung von Jobs umgegangen wird, die von Cron Job erstellt wurden. Es darf nur eine der folgenden Strategien angegeben werden:
    a.Allow (Standard): Gleichzeitige Ausführung von Jobs
    zulassen b.Forbid: Gleichzeitige Ausführung verbieten. Wenn die vorherige nicht abgeschlossen wurde, überspringen Sie die nächste direkt
    c.Replace: Brechen Sie den aktuell ausgeführten Job ab und ersetzen Sie ihn durch einen neuen

Beachten Sie, dass die aktuelle Richtlinie nur auf Jobs angewendet werden kann, die von demselben Cron-Job erstellt wurden. Wenn mehrere Cron-Jobs vorhanden sind, dürfen die von ihnen erstellten Jobs immer gleichzeitig ausgeführt werden.

  • spec.suspend: suspend, dieses Feld ist ebenfalls optional. Wenn der Wert auf „true“ gesetzt ist, werden alle nachfolgenden Ausführungen ausgesetzt. Es hat keine Auswirkungen auf Jobs, deren Ausführung bereits begonnen hat. Der Standardwert ist false
  • spec.successfulJobsHistoryLimit und .spec.failedJobsHistoryLimit: Verlaufslimit, ist ein optionales Feld. Sie geben an, wie viele abgeschlossene und fehlgeschlagene Jobs beibehalten werden können

1.3 Überprüfen Sie, ob der Cronjob korrekt läuft

#查看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

Ich denke du magst

Origin blog.csdn.net/weixin_46660849/article/details/131019740
Empfohlen
Rangfolge