Wdrażanie Helm Charts na klastrach Magnum Kubernetes w chmurze NSIS Cloud
Kubernetes to solidne i sprawdzone w boju środowisko do uruchamiania aplikacji i usług, ale ręczne dostarczanie wszystkich zasobów wymaganych do uruchomienia wdrożenia gotowego do produkcji może być czasochłonne. Niniejszy artykuł przedstawia Helm jako menedżera pakietów dla Kubernetes. Dzięki niemu będziesz w stanie szybko wdrożyć złożone aplikacje Kubernetes, składające się z kodu, baz danych, interfejsów użytkownika i nie tylko.
Co będziemy omawiać
Tło - jak działa Helm
Instalacja kasku
Dodaj repozytorium Helm
Repozytoria wykresów Helm
Wdrożenie wykresu Helm na klastrze
Dostosowywanie rozmieszczenia wykresów
Wymagania wstępne
Nr 1 Konto
Potrzebne jest konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.
Nr 2 Podstawowa znajomość Kubernetes
Zakładamy, że masz podstawową wiedzę na temat Kubernetes, jego pojęć i sposobów działania. Wyjaśnianie ich wykracza poza zakres tego artykułu.
Nr 3 Klaster utworzony na chmurze
Aby wypróbować instalację i wdrożenie Helm w rzeczywistym środowisku, utwórz klaster w chmurze za pomocą OpenStack Magnum: Jak utworzyć klaster Kubernetes przy użyciu NSIS OpenStack Magnum.
Nr 4 Aktywne połączenie z chmurą
W przypadku Kubernetes oznacza to zainstalowane narzędzie wiersza poleceń kubectl i kubeconfig wskazujące na klaster. Instrukcje znajdują się w tym artykule Jak korzystać z interfejsu wiersza poleceń dla klastrów Kubernetes w NSIS OpenStack Magnum?.
Nr 5 Dostęp do Ubuntu w celu uruchamiania kodu
Przykłady kodu w tym artykule zakładają, że korzystasz z Ubuntu 20.04 LTS lub podobnego systemu Linux. Można je uruchomić na
Windows z podsystemem Linux,
oryginalny desktopowy system operacyjny Ubuntu lub możesz również
utworzyć maszynę wirtualną w chmurze NSIS i stamtąd uruchamiać przykłady. Te artykuły dostarczą wiedzy technicznej, jeśli jej potrzebujesz:
Jak utworzyć maszynę wirtualną Linux i uzyskać do niej dostęp z pulpitu Windows na NSIS Cloud
Tło - jak działa Helm
Zwykła sekwencja wdrażania aplikacji na Kubernetes obejmuje:
posiadanie co najmniej jednego skonteneryzowanego obrazu aplikacji dostępnego w rejestrze obrazów
wdrażanie co najmniej jednego zasobu Kubernetes w postaci plików manifestu YAML w klastrze Kubernetes
Zasoby Kubernetes, bezpośrednio lub pośrednio, wskazują na obrazy kontenerów. Mogą również zawierać dodatkowe informacje wymagane przez te obrazy do uruchomienia. W bardzo minimalnej konfiguracji mielibyśmy np. obraz kontenera NGINX wdrożony za pomocą zasobu Kubernetes deployment i udostępniony w sieci za pośrednictwem zasobu service. Wdrożenie Kubernetes na poziomie produkcyjnym większej aplikacji zwykle wymaga zestawu kilku lub więcej zasobów Kubernetes do wdrożenia w klastrze.
Dla każdego standardowego wdrożenia aplikacji na Kubernetes (np. bazy danych, systemu CMS, aplikacji monitorującej), standardowe manifesty YAML byłyby w większości takie same i różniłyby się tylko w zależności od przypisanych konkretnych wartości (np. portów, punktów końcowych, rejestru obrazów, wersji itp.).
Helm automatyzuje zatem proces provisioningu wdrożenia Kubernetes. Osoba odpowiedzialna za wdrożenie nie musi pisać każdego zasobu od podstaw ani uwzględniać powiązań między zasobami. Zamiast tego pobiera Helm chart, który zapewnia predefiniowane szablony zasobów. Wartości dla szablonów są odczytywane z centralnego pliku konfiguracyjnego o nazwie values.yaml.
Wykresy Helm zostały zaprojektowane tak, aby obejmowały szeroki zestaw przypadków użycia wymaganych do wdrożenia aplikacji. Aplikację można następnie uruchomić na klastrze za pomocą kilku poleceń w ciągu kilku sekund. Niektóre specyficzne dostosowania dla indywidualnego wdrożenia można następnie łatwo dostosować, zastępując domyślny plik values.yaml.
Instalacja kasku
Helm można zainstalować na własnej maszynie deweloperskiej. Aby zainstalować, pobierz plik instalatora ze strony wydania Helm, zmień uprawnienia do pliku i uruchom instalację:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Instalację można zweryfikować, uruchamiając aplikację:
$ helm version
W przypadku innych systemów operacyjnych należy użyć linku do pobrania plików instalacyjnych Helm i postępować analogicznie.
Dodaj repozytorium Helm
Wykresy Helm są dystrybuowane za pomocą repozytoriów. Na przykład, pojedyncze repozytorium może hostować kilka wykresów Helm od określonego dostawcy. Na potrzeby tego artykułu dodamy repozytorium Bitnami, które zawiera ich wersje wielu przydatnych wykresów Helm, np. Redis, Grafana, Elasticsearch lub innych. Można go uruchomić za pomocą następującego polecenia:
helm repo add bitnami https://charts.bitnami.com/bitnami
Następnie zweryfikuj dostępne wykresy w tym repozytorium, uruchamiając je:
helm search repo
Poniższy obrazek pokazuje tylko początek wszystkich dostępnych aplikacji z repozytorium bitnami do zainstalowania z Helm:
Repozytoria wykresów Helm
W powyższym przykładzie wiedzieliśmy, gdzie znaleźć repozytorium z wykresami Helm. Istnieją inne repozytoria i są one zwykle hostowane na GitHub lub ArtifactHub. Spójrzmy na stronę apache w ArtifactHUB:
Kliknij opcję DEFAULT VALUES (żółte podświetlenie) i zobacz zawartość domyślnego pliku values.yaml.
W tym pliku (lub w dodatkowych informacjach tabelarycznych na stronie wykresu) można sprawdzić, które parametry są włączone do dostosowywania, a które są ich wartościami domyślnymi.
Sprawdź, czy kubectl ma dostęp do klastra
Aby kontynuować, należy sprawdzić, czy zmienna środowiskowa KUBECONFIG została wyeksportowana i wskazuje na plik kubeconfig działającego klastra (patrz Warunek wstępny nr 4). W razie potrzeby wyeksportuj tę zmienną środowiskową:
export KUBECONFIG = <location-of-your-kubeconfig-file>
Jeśli kubectl jest poprawnie zainstalowany, powinieneś być w stanie wyświetlić listę węzłów w klastrze:
kubectl get nodes
Będzie to potwierdzenie, że masz dostęp do klastra.
Wdrażanie wykresu Helm na klastrze
Teraz, gdy wiemy już, gdzie znaleźć repozytoria z setkami wykresów do wyboru, wdróżmy jeden z nich w naszym klastrze.
Zainstalujemy Apache web server Helm chart. Aby zainstalować go z domyślną konfiguracją, musimy uruchomić jedno polecenie:
helm install my-apache bitnami/apache
Zauważ, że my-apache odnosi się do konkretnego wydania, czyli konkretnego wdrożenia działającego na naszym klastrze. Możemy dostosować tę nazwę do naszych upodobań. Po uruchomieniu powyższego polecenia wykres zostanie wdrożony i uzyskamy wgląd w naszą wersję:
NAME: my-apache
LAST DEPLOYED: Tue Jan 31 10:48:07 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: apache
CHART VERSION: 9.2.11
APP VERSION: 2.4.55
....
W rezultacie na klastrze wdrażanych jest kilka zasobów Kubernetes. Jednym z nich jest usługa Kubernetes, która domyślnie wdrażana jest jako typ LoadBalancer. W ten sposób wdrożenie Apache zostaje natychmiast publicznie ujawnione za pomocą zmiennego adresu IP dostępnego w komórce <EXTERNAL-IP> na domyślnym porcie 80:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
my-apache LoadBalancer 10.254.147.21 64.225.131.111 80:32654/TCP,443:32725/TCP 5m
Należy pamiętać, że wygenerowanie pływającego adresu IP może potrwać kilka minut. Po tym czasie, po wprowadzeniu pływającego adresu IP do przeglądarki, zobaczysz usługę dostępną z Internetu:
Dostosowywanie rozmieszczenia wykresów
Właśnie zobaczyliśmy, jak szybko można wdrożyć wykres Helm z domyślnymi ustawieniami. Zazwyczaj przed uruchomieniem wykresu w środowisku produkcyjnym należy dostosować kilka ustawień, aby spełnić swoje wymagania.
Aby dostosować wdrożenie, szybkim i brudnym podejściem byłoby dostarczenie flag w wierszu poleceń Helm w celu dostosowania określonych parametrów. Problem polega na tym, że każda opcja wiersza poleceń będzie miała 10-20 dostępnych flag, więc to podejście może nie być najlepsze na dłuższą metę.
Bardziej uniwersalnym podejściem jest jednak dostosowanie pliku values.yaml. Są na to dwa główne sposoby:
- Kopiuj cały plik values.yaml.
Tutaj można dostosować tylko wartość określonego parametru.
- Utwórz nowy plik values.yaml od podstaw
Zawierałby on tylko dostosowane parametry z ich nadpisanymi wartościami.
W obu scenariuszach wszystkie ustawienia domyślne, z wyjątkiem nadpisanych, zostaną zachowane.
Jako przykład dostosowania wykresu, wystawmy serwer WWW Apache na porcie 8080 zamiast domyślnego 80. Użyjemy drugiego podejścia i dostarczymy minimalny plik my-values.yaml dla nadpisań. Zawartość tego pliku będzie następująca:
my-values.yaml
service:
ports:
http: 8080
W przypadku tych dostosowań należy przestrzegać wcięć i struktury YAML, wskazując również odpowiednie bloki nadrzędne w drzewie.
Osobnym dostosowaniem, które wprowadzimy, jest utworzenie dedykowanej przestrzeni nazw apache dla naszej wersji Helm i poinstruowanie Helm, aby używał tej przestrzeni nazw. Takie dostosowanie jest dość powszechne, aby oddzielić artefakty związane z konkretnym wydaniem/aplikacją.
Zastosuj wspomniane dostosowania do wydania my-custom-apache, używając następującego polecenia:
helm install my-custom-apache bitnami/apache --values my-values.yaml --namespace custom-apache --create-namespace
Podobnie jak we wcześniejszym przykładzie, usługa zostaje ujawniona. Tym razem, aby uzyskać dostęp do zmiennego adresu IP usługi, należy odwołać się do nowo utworzonej przestrzeni nazw custom-apache:
kubectl get services -n custom-apache
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-custom-apache LoadBalancer 10.254.230.171 64.225.135.161 8080:31150/TCP,443:30139/TCP 3m51s
Widzimy, że aplikacja jest teraz wystawiona na nowy port 8080, który można również zweryfikować w przeglądarce:
Co robić dalej
Wdrażaj inne przydatne usługi za pomocą wykresów Helm: Argo Workflows, JupyterHub, Vault i wiele innych, które są dostępne.
Należy pamiętać, że wykres wdrożony za pomocą Helm jest ostatecznie tylko zestawem zasobów Kubernetes. Zwykle w dostępnych wykresach Open Source istnieje duża ilość konfigurowalnych ustawień. Równie dobrze można edytować inne parametry na już wdrożonym klastrze, a nawet modyfikować szablony do konkretnego przypadku użycia.
Poniższy artykuł pokaże, jak użyć repozytorium JetStack do zainstalowania CertManagera, za pomocą którego można wdrożyć usługi HTTPS w chmurze Kubernetes:
Wdrażanie usług HTTPS na platformie Magnum Kubernetes w NSIS Cloud