Kubernetes реализует cronjob для регулярного выполнения сценариев оболочки.

Kubernetes реализует cronjob для регулярного выполнения сценариев оболочки.

Kubernetes cronjob регулярно выполняет роль сценариев оболочки

Многие существующие учебные пособия только объясняют, как регулярно выполнять команду через cronjob, но в реальном производственном процессе использования cronjob, особенно когда необходимо выполнить большое количество команд оболочки, это часто не соответствует требованиям. Выполняя сценарий оболочки, связанный с configmap, вы можете гибко настраивать команды в сценарии оболочки и выполнять cronjob для запуска более сложных команд оболочки.

CronJob, который периодически выполняет сценарий оболочки в Kubernetes, имеет множество применений, например:

  • Регулярное обслуживание: CronJob можно настроить на регулярное выполнение определенных задач обслуживания, таких как очистка старых файлов журнала, обновление баз данных, обслуживание индексов и т. д.
  • Резервное копирование и восстановление данных. Вы можете создать CronJob для периодического резервного копирования базы данных или файловой системы и выполнения операций восстановления при необходимости.
  • Периодическая обработка данных: если вашей системе необходимо регулярно обрабатывать данные (например, каждую ночь), вы можете создать CronJob для обработки этих задач.
  • Мониторинг и отчетность: CronJob может периодически выполнять задачи мониторинга, такие как проверка работоспособности системы или создание отчетов.
  • Автоматическое масштабирование и масштабирование: вы можете создавать задания CronJob, которые автоматически увеличивают или уменьшают количество запущенных модулей по мере необходимости в зависимости от прогнозируемой нагрузки на систему.
  • CronJob: CronJob также можно использовать для выполнения любой задачи, которую вы хотите запустить в определенное время.

1. Процесс реализации

1.1 Определение карты конфигурации

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

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

Обычно настраиваемые параметры API для cronjob:

  • spec.schedule: Планирование, обязательное поле, указывает цикл выполнения задачи, формат такой же, как у Cron
  • spec.jobTemplate: шаблон задания, обязательное поле, указывает задачу для запуска, формат такой же, как у задания.
  • spec.startingDeadlineSeconds : Крайний срок запуска задания (в секундах), это поле не является обязательным. Если запланированное время пропущено по какой-либо причине, задание, которое пропустило время выполнения, будет считаться невыполненным. Если не указано, нет срока
  • spec.concurrencyPolicy: политика параллелизма, это поле также является необязательным. Он указывает, как обрабатывать параллельное выполнение заданий, созданных Cron Job. Разрешается указывать только одну из следующих политик:
    a.Разрешить (по умолчанию): Разрешить одновременное выполнение заданий
    b.Запретить: Запретить одновременное выполнение, если предыдущее не было завершено, сразу пропустить следующее
    c.Заменить: Отменить текущее задание Job, заменить его новым

Обратите внимание, что текущая политика может применяться только к заданиям, созданным одним и тем же заданием cron. Если есть несколько заданий cron, задания, которые они создают, всегда могут выполняться одновременно.

  • spec.suspend : приостановка, это поле также является необязательным. Если установлено значение true, все последующие выполнения будут приостановлены. Это не влияет на задания, которые уже начали выполняться. Значение по умолчанию неверно
  • spec.successfulJobsHistoryLimit и .spec.failedJobsHistoryLimit: предел истории, является необязательным полем. Они определяют, сколько завершенных и невыполненных заданий можно сохранить.

1.3 Проверьте, правильно ли работает cronjob

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

рекомендация

отblog.csdn.net/weixin_46660849/article/details/131019740