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.
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.YamlZauważ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.YamlMoż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/v1beta1Część harmonogramu pracy jest najważniejsza. Postępuje zgodnie ze standardową konwencją CRON, istnieje lista liczb oddzielonych przestrzeniami. Pięć liczb reprezentuje,
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.