В Kubernetes есть аналогичный способ запуска одноразовых процессов Вакансии и периодические процессы типа cron вакансии.
Мы начнем с типичного примера того, что такое вакансии, и продемонстрируем стандартный пример из официальных документов. Из этого примера будет легко понять, что означает успешное выполнение задания в контексте Kubernetes.
Чтобы продолжить, я бы порекомендовал вам использовать Kataconda Playground для Kubernetes, который предоставит готовый кластер Kubernetes без необходимости вручную настраивать его или рисковать производственным кластером для экспериментов.
Вакансии Kubernetes
Задания - это абстракции Kubernetes более высокого уровня, похожие на ReplicaSets и Deployments. Но в отличие от модулей, управляемых развертыванием и ReplicaSets, модули, выполняющие задание, завершают свою работу и завершают работу.
Когда указанное количество модулей достигает завершения, задание считается успешно завершенным. Какие критерии, которые определяют успешное завершение работы модуля, мы определим в файле YAML задания. Затем контроллер заданий гарантирует, что определенное количество модулей успешно завершено и задание считается завершенным.
Давайте создадим задание, которое печатает цифры числа Пи до 2000 разрядов в своих журналах, которые мы рассмотрим. Создайте файл и назовите его моя работа.ямл и сохраните в нем следующее содержимое;
apiVersion: batch / v1вид: Работа
метаданные:
имя: пи
спецификация:
шаблон:
спецификация:
контейнеры:
- имя: пи
изображение: perl
команда: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Никогда
backoffLimit: 4
Создайте задание, используя этот файл:
$ kubectl create -f ./работа.ямлВы заметите, что выполнение задания занимает от нескольких секунд до пары минут, и как только оно будет выполнено. Когда вы пытаетесь перечислить все капсулы, используя:
$ kubectl получить подыНАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОЗРАСТ НАЗАД
pi-wg6zp 0/1 Завершено 0 50 с
Вы увидите, что статус модуля, относящегося к пи, равен Завершенный не работает или прекращено.Вы также можете скопировать имя модуля, чтобы мы могли убедиться, что число Пи действительно составляет 2000 цифр. Конкретное название модуля может отличаться в вашем случае.
$ kubectl журналы pi-wg6zpЧто интересно, в капсуле нет Прекращено он все еще очень активен, просто в нем нет запущенных приложений. Подобно тому, как просто включить компьютер и не использовать его. Если бы модуль был прерван, мы бы не смогли извлечь из него журналы, в первую очередь.
Чтобы очистить задание и все созданные поды, выполните команду:
$ kubectl delete -f мои-вакансии.ямлВы можете узнать больше о спецификациях работы и о том, как написать свою спецификацию, в официальной документации.
Cron Вакансии
Cron Jobs похожи на утилиту Cron в Unix, которая периодически запускается в соответствии с желаемым расписанием. На момент написания этой статьи в Kubernetes это не было сверхстабильным, поэтому вы можете быть осторожны, используя. Процитируем официальные документы:
«Задание cron создает объект задания о один раз за время выполнения расписания. Мы говорим «о», потому что при определенных обстоятельствах могут быть созданы два рабочих места или не может быть создано ни одного рабочего места. Мы пытаемся сделать их редкими, но не предотвращаем их полностью. Следовательно, рабочие места должны быть идемпотент”
Термин идемпотент означает, что задание Cron, выполняемое один или два раза или любое количество раз, будет иметь одинаковый эффект на систему. Проверка обновлений и мониторинг таких операций могут рассматриваться как идемпотентные. Но изменение данных или запись в базу данных не входят в число этих.
Давайте напишем задание cron, которое будет писать «Hello, World!»Сообщение в журналах вместе с отметкой времени, когда это сообщение было написано. Создайте файл my-cronjob.yaml и напишите в него следующее содержимое:
apiVersion: batch / v1beta1вид: CronJob
метаданные:
имя: my-cronjob
спецификация:
расписание: "* / 1 * * * *"
jobTemplate:
спецификация:
шаблон:
спецификация:
контейнеры:
- имя: привет
изображение: busybox
аргументы:
- / bin / sh
- -c
- Дата; echo Hello из кластера Kubernetes
restartPolicy: OnFailure
График работы - самая важная. Он следует стандартному соглашению Cron, есть список чисел, разделенных пробелами. Пять чисел представляют,
- Минуты (0-59)
- Час (0-23)
- День месяца (1-31)
- Месяц (1-12)
- День недели (0-6), начиная с воскресенья
Использование звездочки (*) для поля означает любое доступное значение этого поля (например, подстановочный знак), а первая запись в нашем расписании «* / 1 * * * *» указывает, что задание должно выполняться каждую минуту независимо от часа, дня или месяца год. Использование * / 5 будет печатать сообщение каждые 5 минут.
Вы можете узнать больше о спецификации cronjob yaml в официальных документах. Давайте посмотрим, как работают все модули для работы, которую мы назвали my-cronjob.
$ kubectl получить подыНАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОЗРАСТ НАЗАД
my-cronjob-1534457100-hfhzf 0/1 Завершено 0 2 мес
my-cronjob-1534457160-gk85l 0/1 Завершено 0 1 мес
my-cronjob-1534457220-bj22x 0/1 Завершено 0 57сек
Копаясь в журналах каждого из модулей, вы обнаружите одно сообщение с меткой времени, поскольку все они были созданы в разное время, все они будут иметь разные метки времени.
Журнал $ kubectl my-cronjob-1534457100-hfhzfЧтобы удалить задание cron, просто запустите:
$ kubectl delete -f my-cronjob.ямлЭто также приведет к удалению всех пакетов, которые были созданы в надлежащем порядке.
Рекомендации
Вы можете узнать больше о вакансиях Kubernetes здесь, а о вакансиях Cron вы можете посетить этот раздел их хорошо структурированной документации.