Введение
В Kubernetes задания (jobs) и периодические задания (cronjobs) используются для запуска задач, которые не являются частью длительно работающего приложения или сервиса. Задания (jobs) применяются для одноразовых задач, в то время как периодические задания (cronjobs) используются для задач, которые должны запускаться по регулярному расписанию.
В этом лабораторном занятии (LabEx) мы научимся запускать поды (pods) с использованием заданий (jobs) и периодических заданий (cronjobs) в Kubernetes. Мы начнем с простого примера и постепенно перейдем к более сложным примерам.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
Проверьте, что 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.


