Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В Kubernetes задания (jobs) и периодические задания (cronjobs) используются для запуска задач, которые не являются частью длительно работающего приложения или сервиса. Задания (jobs) применяются для одноразовых задач, в то время как периодические задания (cronjobs) используются для задач, которые должны запускаться по регулярному расписанию.

В этом лабораторном занятии (LabEx) мы научимся запускать поды (pods) с использованием заданий (jobs) и периодических заданий (cronjobs) в Kubernetes. Мы начнем с простого примера и постепенно перейдем к более сложным примерам.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-11300{{"Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)"}} kubernetes/get -.-> lab-11300{{"Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)"}} kubernetes/create -.-> lab-11300{{"Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)"}} kubernetes/apply -.-> lab-11300{{"Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)"}} kubernetes/logs -.-> lab-11300{{"Запуск подов (Pods) с использованием заданий (Jobs) и периодических заданий (CronJobs)"}} end

Запуск кластера Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    • Найдите компоненты, такие как kubelet и apiserver, перечисленные как Running.
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы с запуском Minikube, используйте minikube delete для сброса среды при необходимости.

Запуск пода (pod) с использованием задания (job)

Первым шагом является создание пода (pod), который выполняет задание (job). В этом примере мы создадим под, который запускает команду для вывода "Hello, World!" в консоль.

Создайте файл с именем job.yaml в директории /home/labex/project/ со следующим содержимым:

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["sh", "-c", 'echo "Hello, World!"']
      restartPolicy: Never
  backoffLimit: 4

В этом файле мы определяем задание (job) с именем hello-job, которое запускает один контейнер с именем hello. Контейнер использует образ busybox и выполняет команду для вывода "Hello, World!" в консоль.

Для создания задания (job) выполните следующую команду:

kubectl apply -f job.yaml

Вы можете проверить статус задания (job) с помощью следующей команды:

kubectl get jobs

После завершения задания (job) вы можете просмотреть логи пода (pod) с помощью следующей команды:

kubectl logs <POD_NAME>

Замените <POD_NAME> именем пода (pod), который выполнил задание (job). Вы можете получить POD_NAME с помощью команды kubectl get pods |grep hello-job.

Поздравляем! Вы успешно запустили под (pod) с использованием задания (job) в Kubernetes!

Запуск задания (job) с несколькими подами (pods)

В некоторых случаях вам может потребоваться запустить задание (job) с несколькими подами (pods) для улучшения производительности. В этом примере мы создадим задание (job), которое запускает несколько подов (pods) для загрузки файлов с удаленного сервера.

Создайте файл с именем multi - pod - job.yaml в директории /home/labex/project/ со следующим содержимым:

apiVersion: batch/v1
kind: Job
metadata:
  name: download-job
spec:
  completions: 3
  parallelism: 2
  template:
    spec:
      containers:
        - name: downloader
          image: curlimages/curl
          command: ["curl", "-o", "/data/file", "http://example.com/file"]
          volumeMounts:
            - name: data-volume
              mountPath: /data
      restartPolicy: Never
      volumes:
        - name: data-volume
          emptyDir: {}
  backoffLimit: 4

В этом файле мы определяем задание (job) с именем download - job, которое запускает несколько подов (pods) с использованием образа curlimages/curl. Каждый под загружает файл с http://example.com/file и сохраняет его в общий том (volume) с именем data - volume.

Для создания задания (job) выполните следующую команду:

kubectl apply -f multi-pod-job.yaml

Вы можете проверить статус задания (job) с помощью следующей команды:

kubectl get jobs

После завершения задания (job) вы можете просмотреть логи пода (pod) с помощью следующей команды:

kubectl logs <POD_NAME>

Замените <POD_NAME> именем любого пода (pod), который выполнил задание (job). Вы сможете увидеть журнал загрузки файла. Вы можете получить POD_NAME с помощью команды kubectl get pod |grep download - job.

Поздравляем! Вы успешно запустили задание (job) с несколькими подами (pods) в Kubernetes!

Запуск периодического задания (cronjob)

В дополнение к одноразовым заданиям (jobs), Kubernetes также поддерживает периодические задания (cronjobs) для запуска задач по регулярному расписанию. В этом примере мы создадим периодическое задание (cronjob), которое запускает команду каждую минуту.

Создайте файл с именем cronjob.yaml в директории /home/labex/project/ со следующим содержимым:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["sh", "-c", 'echo "Hello, World!"']
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3

В этом файле мы определяем периодическое задание (cronjob) с именем hello-cronjob, которое запускает команду каждую минуту. Эта команда та же, что и в первом примере, для вывода "Hello, World!" в консоль.

Для создания периодического задания (cronjob) выполните следующую команду:

kubectl apply -f cronjob.yaml

Вы можете проверить статус периодического задания (cronjob) с помощью следующей команды:

kubectl get cronjobs

После запуска периодического задания (cronjob) вы можете просмотреть логи пода (pod) с помощью следующей команды:

kubectl logs -f <POD_NAME>

Замените <POD_NAME> именем любого пода (pod), созданного периодическим заданием (cronjob). Вы можете получить POD_NAME с помощью команды kubectl get pod |grep hello-cronjob.

Поздравляем! Вы успешно запустили периодическое задание (cronjob) в Kubernetes!

Итог

В этом практическом занятии мы научились запускать поды (pods) с использованием заданий (jobs) и периодических заданий (cronjobs) в Kubernetes. Мы начали с простого примера пода (pod), который выполняет задание (job), и постепенно перешли к более сложным примерам заданий (jobs) с несколькими подами (pods) и периодических заданий (cronjobs), которые запускаются по регулярному расписанию. С этими знаниями вы можете запускать различные задачи, которые не являются частью длительно работающего приложения или сервиса в Kubernetes.