Kubernetes Jobs i Cron Jobs

Kubernetes Jobs i Cron Jobs
Większość aplikacji działających w systemie rozproszonym, takim jak Kubernetes, jest zawsze na żywo jak serwery internetowe, bazy danych lub serwery API. Ale istnieje oddzielna klasa obiektów, które mają na celu bieganie raz lub tylko budzenie się od czasu do czasu i prowadzić kurs. Okresowe zadania, takie jak odnowienie certyfikatów TLS z agentami takimi jak Certbot, są klasycznym przykładem takich zadań na tradycyjnych serwerach. Odbywają się one przy użyciu narzędzia Cron w systemach Unix.

Kubernetes ma analogiczny sposób uruchamiania jednorazowych procesów Oferty pracy i okresowe procesy takie jak Jobs Cron.

Zaczniemy od typowego przykładu tego, jakie są zadania i zademonstrujemy standardowy przykład z oficjalnych dokumentów. Z tego przykładu będzie łatwo zrozumieć, co to znaczy, uruchamiając zadanie w kontekście Kubernetes.

Aby śledzić, polecam użycie placu zabaw Kataconda dla Kubernetes, który zapewni klaster Kubernetes bez konieczności ręcznego skonfigurowania jednego lub ryzyka klastra produkcyjnego do eksperymentów.

Kubernetes Jobs

Zadania to abstrakcje Kubernetes na wyższym poziomie, podobnie jak repliki i wdrożenia. Ale w przeciwieństwie do POD zarządzanych wdrożeniami i replikazetami, podsek.

Po zakończeniu określonej liczby kapsułów, mówi się, że zadanie pomyślnie ukończyło. Jakie są kryteria, które określają pomyślne zakończenie kapsuły, jest czymś, co zdefiniujemy w pliku YAML Job. Następnie kontroler pracy zapewni, że pewna liczba kapsułów została pomyślnie rozwiązana, a zadanie jest kompletne.

Stwórzmy pracę, która drukuje cyfry PI do 2000 miejsc w jego dziennikach, które zbadamy. Utwórz plik i nazwij go moja praca.Yaml i zapisz następujące zawartość;

APIVERSION: Batch/v1
Rodzaj: Job
metadane:
Nazwa: PI
Spec:
szablon:
Spec:
Pojemniki:
- Nazwa: PI
Zdjęcie: Perl
polecenie: [„perl”, „-mbignum = bpi”, „-wle”, „print bpi (2000)”]]
RESTARTPOLICY: Nigdy
Backofflimit: 4

Utwórz zadanie, używając tego pliku:

$ kubectl Utwórz -f ./stanowisko.Yaml

Zauważysz, że praca z kilkoma sekundami do kilku minut na ucieczkę, a po zakończeniu. Kiedy próbujesz wymienić wszystkie kapsuły za pomocą:

$ kubectl get PODS
Nazwa STATUS STATUS RESTARTUJS WIEK
PI-WG6ZP 0/1 ukończone 0 50s

Zobaczysz, że status PI Powiązania jest Zakończony nie uruchomić ani nie zakończyć.Możesz także kopiować nazwę POD, abyśmy mogli sprawdzić, czy PI rzeczywiście został obliczony na 2000 cyfr. Konkretna nazwa kapsuły może się różnić w twoim przypadku.

$ kubectl logs pi-wg6zp

Co ciekawe, kapsuł Zakończony Nadal jest bardzo aktywny, tylko że nie ma w nim żadnych aplikacji. Podobne do po prostu włączania komputera i nie używając go. Gdyby strąk został zakończony.

Aby posprzątać zadanie i wszystkie utworzone strąki, uruchom polecenie:

$ kubectl delete -f my -jobs.Yaml

Możesz dowiedzieć się więcej o specyfikacjach pracy i jak napisać specyfikację w oficjalnej dokumentacji.

Jobs Cron

Cron Jobs są podobne do użyteczności CRON w UNIX, które działają okresowo zgodnie z pożądanym harmonogramem. W momencie pisania nie jest to przesąd w Kubernetes. Cytować oficjalne dokumenty:

„Praca CRON tworzy obiekt pracy o Raz na czas wykonania harmonogramu. Mówimy „o”, ponieważ istnieją pewne okoliczności, w których można tworzyć dwie prace lub żadna praca nie może zostać stworzona. Staramy się uczynić te rzadkie, ale nie całkowicie ich zapobiegaj. Dlatego miejsca pracy powinny być idempotent"

Termin idempotent oznacza, że ​​zadanie CRON wykonane raz lub dwa lub dowolna liczba czasu miałaby taki sam wpływ na system. Sprawdzanie aktualizacji, monitorowanie tego rodzaju operacji można uznać za idempotent. Ale modyfikowanie danych lub pisanie do bazy danych nie jest wśród nich.

Napiszmy pracę Cron, która napisałaby „Witam, świat!„Wiadomość w swoich dziennikach wraz z znacznikiem czasu, gdy ta wiadomość została napisana. Utwórz plik o nazwie My-Cronjob.YAML i do tego napisz następujące treści:

APIVERSION: Batch/v1beta1
Rodzaj: Cronjob
metadane:
Imię: My-Cronjob
Spec:
Harmonogram: " */1 * * * *"
JobTemplate:
Spec:
szablon:
Spec:
Pojemniki:
- Nazwa: Witam
Zdjęcie: BusyBox
Args:
- /bin/sh
- -C
- data; Echo Hello z klastra Kubernetes
RESTARTPOLICY: Onfailure

Część harmonogramu pracy jest najważniejsza. Postępuje zgodnie ze standardową konwencją CRON, istnieje lista liczb oddzielonych przestrzeniami. Pięć liczb reprezentuje,

  1. Minute (0-59)
  2. Godzina (0-23)
  3. Dzień miesiąca (1-31)
  4. Miesiąc (1-12)
  5. Dzień tygodnia (0-6), począwszy od niedzieli

Za pomocą gwiazdki (*) Dla pola oznacza dowolną dostępną wartość tego pola (jak wieloznaczna karta), a pierwszy wpis w naszym harmonogramie „ */1 * * * *” wskazał, że zadanie musi być uruchamiane co minutę, niezależnie od godziny, dnia lub miesiąca rok. Korzystanie z */5 wydrukuje wiadomość co 5 minut.

Możesz dowiedzieć się więcej o specyfikacji Cronjob Yaml w oficjalnych dokumentach. Zobaczmy wszystkie strąki ubiegające się o pracę, którą nazwaliśmy My-Cronjob.

$ kubectl get PODS
Nazwa STATUS STATUS RESTARTUJS WIEK
My-Cronjob-1534457100-hfHzf 0/1 ukończony 0 2m
My-Cronjob-1534457160-gk85l 0/1 ukończony 0 1M
My-Cronjob-1534457220-BJ22x 0/1 ukończony 0 57s

Wginowanie w dzienniki każdego z kapsułów ujawniłaby jedną wiadomość z znacznikiem czasu, ponieważ wszystkie zostały stworzone w różnych momentach, wszystkie będą miały różne znaczniki czasu.

$ kubectl log my-cronjob-1534457100-hfhzf

Aby usunąć cronjob, po prostu uruchom:

$ kubectl delete -f my -cronjob.Yaml

To również usunie wszelkie strąki, które zostały utworzone w odpowiednim procesie.

Bibliografia

Możesz dowiedzieć się więcej o zadaniach Kubernetes tutaj, a dla Cron Jobs możesz odwiedzić tę sekcję ich dobrze zorganizowanej dokumentacji.