Laboratorium 11

Wykorzystanie rozwiązania Kubernetes w przetwarzaniu danych masowych - K3d

Przypomnijmy diagram planowanego systemu:: image

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?