Кубернети

Kubernetes Jobs и Cron Jobs

Kubernetes Jobs и Cron Jobs
Повечето приложения, които се изпълняват в разпределена система като Kubernetes, винаги са активни като уеб сървъри или бази данни или API сървъри. Но има отделен клас обекти, които са предназначени да се изпълняват веднъж или само да се събуждат от време на време и да изпълняват своя курс. Периодичните задачи като подновяване на сертификати TLS с агенти като Certbot са класически пример за такива задачи, изпълнявани на традиционни сървъри. Те се правят с помощта на помощната програма Cron в системите на Unix.

Kubernetes има аналогичен начин за управление на едновременни процеси Работни места и периодични процеси като cron работни места.

Ще започнем с типичен пример за това какво са Джобс и ще демонстрираме стандартен пример от официалните Документи. От този пример ще бъде лесно да се разбере какво означава, като се изпълни успешно задача в контекста на Kubernetes.

За да продължите, бих ви препоръчал да използвате детската площадка Kataconda за Kubernetes, която ще осигури кутер Kubernetes извън кутията, без да се налага да конфигурирате ръчно такъв или да рискувате производствен клъстер за експерименти.

Kubernetes Jobs

Работните места са абстракции Kubernetes от по-високо ниво, подобни на ReplicaSets и Deployments. Но за разлика от шушулките, управлявани от разполагания и ReplicaSets, шушулките, изпълняващи задача, завършват работата си и излизат.

Когато определен брой шушулки достигнат завършено, се казва, че заданието е успешно завършено. Какви са критериите, които определят успешното прекратяване на под е нещо, което ще определим във файла YAML на Job. Тогава контролерът на заданието ще гарантира, че определен брой шушулки са прекратени успешно и се казва, че заданието е завършено.

Нека създадем работа, която отпечатва цифри от pi до 2000 места в своите регистрационни файлове, които ще разгледаме. Създайте файл и го извикайте моята работа.ямъл и запишете следното съдържание в него;

apiVersion: batch / v1
вид: Работа
метаданни:
име: pi
спецификация:
шаблон:
спецификация:
контейнери:
- име: pi
изображение: perl
команда: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Никога
backoffLimit: 4

Създайте задачата, като използвате този файл:

$ kubectl създай -f ./ работа.ямъл

Ще забележите, че работата ви отнема няколко секунди до няколко минути, за да се изпълни и след като бъде завършена. Когато опитате да изброите всички шушулки, като използвате:

$ kubectl вземете шушулки
ИМЕ ГОТОВ СТАТУС ВЪЗСТАНОВЯВА ВЪЗРАСТ
pi-wg6zp 0/1 Завършен 0 50s

Ще видите, че състоянието на свързаната с pi е Завършен не се изпълнява или прекратява.Можете също така да копирате името на шушулката, за да можем да проверим дали pi наистина е изчислена на 2000 цифри. Конкретното име на шушулката може да се различава във вашия случай.

$ kubectl регистрира pi-wg6zp

Интересното е, че шушулката не е Прекратено все още е много активен, само че в него няма изпълнявани приложения. Подобно на това просто да включите компютъра си и да не го използвате. Ако шушулката беше прекратена, на първо място нямаше да можем да издърпаме трупите от нея.

За да изчистите работата и всички създадени шушулки, изпълнете командата:

$ kubectl delete -f my-jobs.ямъл

Можете да научите повече за спецификациите за работа и как да напишете спецификацията си в официалната документация.

Крон Джобс

Cron Jobs са подобни на помощната програма Cron в Unix, която работи периодично по график, който желаем. По време на писането това не е суперстабилно нещо в Kubernetes, така че може да искате да внимавате да го използвате. За да цитирате официалните документи:

„Задачата cron създава обект на работа относно веднъж за време за изпълнение на графика. Ние казваме „за“, защото има определени обстоятелства, при които може да се създадат две работни места или да не се създаде работа. Опитваме се да направим тези редки, но не ги предотвратяваме напълно. Следователно работните места трябва да бъдат идемпотентен

Терминът идемпотентен означава, че заданието Cron, независимо дали се извършва веднъж или два пъти или произволен брой време, ще има същия ефект върху системата. Проверката за актуализации, проследяването на този вид операции може да се счита за идемпотентно. Но модифицирането на данни или записването в база данни не са сред тях.

Нека напишем cron работа, която би написала „Здравей, Свят!”Съобщение в дневниците му, заедно с клеймо за време, когато това съобщение е написано. Създайте файл, наречен my-cronjob.yaml и към него напишете следното съдържание:

apiVersion: batch / v1beta1
вид: CronJob
метаданни:
име: my-cronjob
спецификация:
график: "* / 1 * * * *"
jobTemplate:
спецификация:
шаблон:
спецификация:
контейнери:
- име: здравей
изображение: зает
аргументи:
- / bin / sh
- -° С
- дата; echo Здравейте от клъстера Kubernetes
restartPolicy: OnFailure

Графичната част от работата е най-важната. Той следва стандартната конвенция на Cron, има списък с числа, разделени с интервали. Петте числа представляват,

  1. Минута (0-59)
  2. Час (0-23)
  3. Ден на месеца (1-31)
  4. Месец (1-12)
  5. Ден от седмицата (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 57s

Ровенето в дневниците на всеки от шушулките ще разкрие едно съобщение с времева марка, тъй като всички те са създадени по различно време, всички те ще имат различни времеви марки.

$ kubectl log my-cronjob-1534457100-hfhzf

За да изтриете cronjob, просто изпълнете:

$ kubectl delete -f my-cronjob.ямъл

Това също ще изтрие всички шушулки, създадени в надлежния процес.

Препратки

Можете да научите повече за Kubernetes Jobs тук, а за Cron можете да посетите този раздел от тяхната добре структурирана документация.

Най-добрите игри за игра с ръчно проследяване
Oculus Quest наскоро представи страхотната идея за ръчно проследяване без контролери. С непрекъснато нарастващия брой игри и дейности, които изпълнява...
Как да покажете OSD наслагване в приложения на цял екран за Linux и игри
Играта на цял екран или използване на приложения в режим на цял екран без разсейване може да ви откъсне от съответната системна информация, видима в п...
Топ 5 карти за залавяне на игри
Всички сме виждали и обичаме поточни игри в YouTube. PewDiePie, Jakesepticye и Markiplier са само някои от най-добрите геймъри, които са спечелили мил...