Hej, dzisiaj jako Innokrea opowiemy Wam o tym czym jest Helm, jak go używać i jak ułatwia on korzystanie z klastra Kubernetes. Jeśli nie wiecie czym są kontenery lub technologia K8S, to zapraszamy to przeczytania naszych poprzednich artykułów w tym temacie.
Czym jest Helm i dlaczego to się opłaca?
Helm to menadżer pakietów dla Kubernetes. Ale co to dokładnie znaczy? Jeśli jesteś osobą, która miała styczność z systemem Linux, na pewno spotkałeś się z komendami, których używa się do instalacji programów takimi jak: apt, apk czy yum. Są to tak zwane menadżery pakietów. Z ich użyciem można wykonać trzy podstawowe czynności: zainstalować, odinstalować oraz zaktualizować dany pakiet w systemie operacyjnym. W taki sam sposób Helm pozwala wykonywać wszystkie te czynności w ramach klastra Kubernetes i wdrażać tam aplikacje np. bazy danych czy systemy kolejkowe. Jest kilka powodów, dla których używanie Helma jest opłacalne we wdrożeniu aplikacji:
- uproszczenie wdrażania – każdy, kto pisał manifesty do Kubernetesa wie, że może to być skomplikowany proces, w którym łatwo o błąd. Helm dostarcza możliwość zarządzania aplikacją za pomocą tzw. ‘chartów’ czyli paczek zawierających wszystkie potrzebne manifesty Kubernetes (service, deployment, secrets, configmap).
- szablony Helm – Helm umożliwia tzw. szablonowanie plików YAML. Oznacza to, że w przypadku często zmieniających się wartości, które chcielibyśmy modyfikować stosujemy specjalnie oznaczone zmienne np. replicas: {{ .Values.replicas }}. Umożliwia to kolejno modyfikację domyślnych wartości poprzez plik values.yaml. Dzięki temu jesteś w stanie łatwo zmieniać ustawienia dostarczane do kontenera lub Kubernetesa jak np. liczba replik, wersje obrazów czy nazwa domenowa. Zmiana takich wartości odbywa się poprzez modyfikację jednego pliku, gdzie definiuje się wartości i sprawia, że istnieje centralny punkt manipulacji konfiguracją aplikacji.
- uproszczenie rollbacków – Helm jest w stanie zarządzać historią wdrożeń (releases), co pozwala na łatwy rollback do poprzedniej wersji aplikacji w przypadku problemów z nową. Zwiększa to niezawodność oraz dostępność.
- inteligentne wdrożenia – Helm jest w stanie rozpoznać, które obiekty Kubernetes powinny zostać stworzone wcześniej, aby cała konfiguracja aplikacji działała poprawnie np. obiekty configmap czy secrets służące w K8S do konfiguracji.
- przeniesienie odpowiedzialności – za dostarczenie tzw. Helm chart odpowiedzialna jest firma dostarczająca dane oprogramowanie. Oznacza to, że zespoły DevOps klienta są odciążone, a ich konfiguracje aktualne i poprawne (oczywiście, jeśli dana firma dostarcza aktualne i poprawne charty). Minimalizuje się w ten sposób błędy po stronie klienta, a jego wsparcie w przypadku supportu staje się łatwiejsze.
Rysunek 1 – Tworzenie i używanie tzw. Helm charts – podział odpowiedzialności, źródło: devopsschool.com
Podstawowe pojęcia związane z Helm
Jak większość technologii, także Helm wprowadza swoje pojęcia, które służą do opisania obiektów i czynności potrzebnych przy obsłudze rozwiązania. Są to między innymi:
- Chart – jest to podstawowa jednostka pakowania konfiguracji danej aplikacji w Helm. Inaczej mówiąc, jest to zbiór wszelkich plików YAML i szablonów, które definiują obiekty Kubernetes niezbędne do wdrożenia aplikacji.
- Templates – szablony znajdujące się w folderze templates zawierają pliki manifestów YAML rozszerzone o następującą składnię: {{ .Values.nazwa_zmiennej }}.
- Values – w pliku values.yaml znajdują się domyślne wartości wykorzystywane przez szablony.
- Release – wdrożony chart działający na klastrze Kubernetes. Za każdym razem, kiedy użyjemy komendy helm install tworzony jest nowy release.
- Rollback – mechanizm przywracania poprzedniej wersji release w przypadku problemów z aktualizacją do nowej wersji.
- Repozytorium – zdalne miejsce przechowywania Helm Charts.
Zdalne repozytoria i podstawowe komendy
Helm nie posiada pre-konfigurowanych repozytoriów w najnowszych jego wersjach. Oznacza to, że działa bardzo podobnie do takich rozwiązań jak GitHub czy GitLab. Występuje wiele zdalnych repozytoriów, na których firmy dostarczające dane rozwiązania mogą udostępnić je swoim klientom. Przykładowymi repozytoriami mogą być ArtifactHub czy Bitnami. Podstawowe komendy służące do obsługi Helma to:
- helm repo add <nazwa_repozytorium> <adres_url> – dodawanie zdalnego repozytorium do helm;
- helm repo list – wyświetl dodane repozytoria;
- helm search repo <nazwa_aplikacji> – wyszukiwanie aplikacji dostępnych w ramach dodanych repozytoriów;
- helm install <nazwa_release> <nazwa_aplikacji> – instalowanie Helm chart;
- helm repo remove <nazwa_repozytorium> – usuwanie dodanego repozytorium;
- helm uninstall <nazwa_release> – odinstalowywanie danego Helm chart.
Przykładowa instalacja
Aby zademonstrować działanie oprogramowania Helm spróbujmy go użyć przy wdrożeniu oprogramowania Harbor ramach lokalnego klastra minikube. Aby zainstalować klaster i oprogramowanie Helm, trzeba skorzystać z dokumentacji minikube oraz Helm. Po wpisaniu komendy minikube start powinniśmy być w stanie korzystać z klastra. Spróbujmy dodać zdalne repozytorium Bitnami dla Helm. W tym celu wykonamy komendę helm repo add. Następnie spróbujmy znaleźć repozytorium Harbor, czyli oprogramowania pozwalającego na przechowywanie obrazów Docker z użyciem komendy helm search repo.
Rysunek 2 – kolejne komendy naszego ćwiczenia
Aby Harbor mógł zostać poprawnie zainstalowany trzeba także włączyć dodatek minikube storage-provisioner. Instalacje przeprowadzamy z pomocą komendy helm install <nazwa_release> <nazwa_aplikacji>.
Rysunek 3 – Output instalacji z instrukcją obsługi oprogramowania Harbor
Po instalacji możemy wyświetlić z pomocą kubectl utworzone obiekty Kubernetes. Jest to duża ilość zasobów potrzebnych do działania jednej aplikacji. Manualne ich tworzenie byłoby wyzwaniem dla administratora, który miałby wdrożyć aplikację korzystając z samych manifestów YAML K8S.
Rysunek 4 – Zasoby Kubernetes oraz udostępnienie instancji Harbor na zewnątrz klastra
Po udostępnieniu instancji na zewnątrz klastra musimy jeszcze pozyskać treść sekretu przechowującego hasło administratora. Zrobimy to z pomocą komendy widocznej na rysunku 5.
Rysunek 5 – pozyskanie hasła administratora z sekretu z użyciem komendy kubectl
Teraz możemy zalogować się do panelu administracyjnego Harbora używając wskazówek z rysunku 3 oraz pozyskanego sekretu.
Rysunek 6 – Logowanie do Harbor
Rysunek 7 – Panel administratora Harbor widoczny po zalogowaniu
Podsumowanie
Mamy nadzieję, że udało Wam się w dzisiejszym wpisie wyciągnąć coś cennego dla siebie. Zaprezentowaliśmy, dlaczego warto korzystać z Helm i jak bardzo ułatwia on wdrożenia nawet skomplikowanych rozwiązań pokroju Harbora. Jeśli jesteście ciekawi jakie jeszcze sekrety skrywa Helm, to zapraszamy do lektury za tydzień! Do usłyszenia!
Źródła:
https://www.devopsschool.com/blog/a-quick-tutorial-of-helm/