Laboratorium 11¶
Wykorzystanie rozwiązania Kubernetes w przetwarzaniu danych masowych - K3d¶
Przypomnijmy diagram planowanego systemu::
W trakcie obecnego laboratorium rozpoczniemy przygotowania do Etapu IV.
Zapoznamy się dzisiaj z platformą Kubernetes oraz narzędziem Helm i zobaczymy w jaki sposób uruchamiać na Kubernetesie aplikacje.
Kubernetes¶
Jest to platforma do zarządzania zasobami obliczeniowymi, utworzona przez Google’a. Kubernetes (K8s) zarządza kontenerami (np. Dockerowymi), przy czym najmniejszą jednostką operacyjną w K8s jest tzw. pod. Pod może składać się z wielu kontenerów i wolumenów dyskowych, jednak wybór liczby składowych poda jest zależny od konkretnego zastosowania. Najczęściej przyjmuje się, że jeden pod zawiera jedną aplikację - np. jeśli dana usługa zawsze wymaga własnej kopii innej usługi (np. narzędzia monitorującego) to warto te dwie usługi umieścić w jednym podzie. W naszych rozważaniach będziemy jednak przyjmować, że w jednym podzie zawsze będzie działać tylko jeden kontener oraz opcjonalnie jeden lub wiele wolumenów danych.
Pod względem architektury klaster Kubernetesowy składa się z węzłów typu:
master - odpowiedzialne za zarządzanie klastrem, przyjmowanie nowych żądań od użytkownika, kontrolę uruchomionych podów itd.; w klastrze może działać wiele węzłów typu master, ale na nasze potrzeby wystarczy nam dokładnie jeden taki węzeł,
worker - węzły, na których uruchamiają się właściwe zadania (pody); zazwyczaj klastry Kubernetesowe posiadają wiele (dziesiątki, setki) węzłów typu worker, ale w naszym przypadku uruchomimy tylko dwie instancje.
Zadanie 11.1: instalacja klastra K3s (4 pkt)¶
K3s jest uproszczoną wersją Kubernetesa, która jest znacząco łatwiejsza w instalacji. Wśród zasadnicznych zmian znajdziemy użycie bazy danych SQLite zamiast ETCD oraz ogranicznie funkcjonalności do minimum. W celu lokalnego uruchomienia bazowego klastra Kubernetesowego wykorzystamy jednak narzędzie K3d, które pozwala uruchomić Kubernetesa wewnątrz kontenerów Dockerowych.
a) Przeczytaj wprowadzenie do narzędzia K3d - link
b) Upewnij się, że masz zainstalowanego Dockera w systemie.
c) Zainstaluj narzędzie k3d
(sposób instalacji zależy od konkretnego systemu operacyjnego).
d) Uruchom klaster składający się z jednego węzła typu master oraz co najmniej dwóch węzłów typu worker (zobacz link): k3d cluster create <NAZWA_KLASTRA> --agents 2
e) Sprawdź, że zawartość pliku ~/.kube/config
wskazuje na nowo utworzony klaster.
f) Zainstaluj narzędzie kubectl
(sposób instalacji zależy od konkretnego systemu operacyjnego) i sprawdź czy możesz się połączyć z utworzonym klastrem.
Zadanie 11.2: Obiekty Kubernetesowe (5 pkt)¶
Wykorzystaj załączone w repozytorium (katalog: plain_manifests
) manifesty Kubernetesowe:
zainstaluj obiekty opisane przez manifesty w klastrze
sprawdź czy wszystko zostało poprawnie zainstalowane
wyjaśnij co każdy tych manifestów robi
usuń (odinstaluj) uruchomione obiekty z klastra
Zadanie 11.3: Helm (5 pkt)¶
Helm (dokumentacja) pozwala zautomatyzować proces uruchamiania aplikacji w klastrze Kubernetesowym (więcej o tym narzędziu na kolejnym wykładzie). Jest to menadżer paczek dla Kubernetesa – dostarcza wiele gotowych paczek dla typowych aplikacji (np. MongoDB, Redash), ale można również zdefiniować własne tzw. charty Helmowe dla naszych aplikacji.
Możemy zauważyć, że w manifestach K8s’owych wszystkie wartości (w tym nazwy) obiektów są zapisane na stałe. Jeśli byśmy chcieli uruchomić identyczny obiekt dla innej aplikacji w klastrze, musielibyśmy ręcznie zmienić jego nazwę, co w perspektywie bardziej złożonych aplikacji jest trudne i czasochłonne. Helm dostarcza silnik szablonów, który pozwala zamienić na stałe zapisane wartości w manifestach na szablony (ang. template), które są uzupełniane przez Helma w trakcie instalacji danego obiektu (zobacz poniżej).
Dodatkowo Helm wspiera i automatyzuje proces wdrażania, poprzez m.in. rolling updates oraz przywracanie zmian (rollback).
a) Zainstaluj narzędzie Helm CLI
b) Wykorzystaj załączony w repozytorium (katalog: helm
) przykładowy chart Helmowy:
zainstaluj go w klastrze
sprawdź czy aplikacja działa i czy wszystkie obiekty zostały poprawnie zainstalowane,
usuń chart z klastra
c) Wyjaśnij w jaki sposób wartości zapisane w pliku values.yaml
są używane wewnątrz manifestów
d) W jaki sposób wykorzystać gotowe paczki (charty) Helmowe?