Wdrażanie Helm Charts na klastrach Magnum Kubernetes w chmurze NSIS
Kubernetes to solidne i sprawdzone środowisko do uruchamiania aplikacji i usług, jednak 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 innych elementów.
Co zostanie omówione?
Tło – jak działa Helm
Instalacja Helm
Dodawanie repozytorium Helm
Repozytoria wykresów Helm
Wdrażanie wykresów Helm na klastrze
Dostosowywanie rozmieszczenia pakietów chart
Wymagania wstępne
Nr 1 Konto
Jest wymagane 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 tych zagadnień wykracza poza zakres tego artykułu.
Nr 3 Klaster utworzony w chmurze
Aby wypróbować instalację i wdrożenie Helm w rzeczywistym środowisku, utwórz klaster w chmurze za pomocą OpenStack Magnum, patrz artykuł 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 oraz kubeconfig wskazujące na klaster. Instrukcje znajdują się w 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 używasz Ubuntu 20.04 LTS lub podobnego systemu Linux. Można je uruchomić na:
Windows z podsystemem Linux,
oryginalnym desktopowym systemie operacyjnym Ubuntu, można również
utworzyć maszynę wirtualną w chmurze NSIS i uruchamiać z niej przykłady. Te artykuły dostarczą ci 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
Typowa sekwencja wdrażania aplikacji na Kubernetes obejmuje:
posiadanie co najmniej jednego skonteneryzowanego obrazu aplikacji dostępnego w rejestrze obrazów
wdrożenie co najmniej jednego zasobu Kubernetes w postaci plików manifestu YAML w klastrze Kubernetes
Zasoby Kubernetes wskazują bezpośrednio lub pośrednio na obrazy kontenerów. Mogą one również zawierać dodatkowe informacje wymagane przez te obrazy do ich uruchomienia. W bardzo minimalnej konfiguracji mielibyśmy na przykład obraz kontenera NGINX wdrożony za pomocą zasobu Kubernetes deployment i udostępniony w sieci za pośrednictwem zasobu service. Wdrożenie Kubernetes w śodowisku produkcyjnym większej aplikacji zwykle wymaga zestawu kilku lub więcej zasobów Kubernetes, które musza być wdrożone w klastrze.
Dla każdego standardowego wdrożenia aplikacji na Kubernetes (na przykład 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 (na przykład portów, punktów końcowych, rejestru obrazów, wersji itp.).
Helm automatyzuje 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 pakiet Helm chart, który zapewnia predefiniowane szablony zasobów. Wartości dla szablonów są odczytywane z centralnego pliku konfiguracyjnego o nazwie values.yaml.
Pakiety chart 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 konkretnego wdrożenia można następnie łatwo dostosować, zastępując domyślny plik values.yaml.
Instalacja Helm
Helm można zainstalować na własnej maszynie deweloperskiej. Aby go zainstalować, pobierz plik instalatora ze strony 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 polecenie:
$ helm version
W przypadku innych systemów operacyjnych należy użyć linku do pobrania plików instalacyjnych Helm i postępować analogicznie.
Dodawanie repozytorium Helm
Pakiety chart Helm są dystrybuowane za pomocą repozytoriów. Na przykład pojedyncze repozytorium może hostować kilka pakietów chart Helm od określonego dostawcy. Na potrzeby tego artykułu dodamy repozytorium Bitnami, które zawiera wersje wielu przydatnych pakietów chart Helm, na przykład Redis, Grafana, Elasticsearch lub innych. Można je uruchomić za pomocą następującego polecenia:
helm repo add bitnami https://charts.bitnami.com/bitnami
Następnie zweryfikuj dostępne pakiety charts w tym repozytorium, uruchamiając je:
helm search repo
Poniższa ilustracja pokazuje tylko początek listy wszystkich dostępnych aplikacji z repozytorium bitnami, któe mmożna zainstalować za pomocą Helm:
Repozytoria wykresów Helm
W powyższym przykładzie wiedzieliśmy, gdzie znaleźć repozytorium z pakietami chart Helm. Istnieją inne repozytoria i są one zwykle hostowane na GitHub lub ArtifactHub. Przyjrzyjmy się stronie apache w ArtifactHUB:
Kliknij opcję DEFAULT VALUES (podświetlenie na żółto) i zobacz zawartość domyślnego pliku values.yaml.
W tym pliku (lub w dodatkowych informacjach w tabeli na stronie wykresu) można sprawdzić, które parametry można dostosowywać i jakie są ich wartości domyślne.
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 Wymaganie wstępne nr 4). W razie potrzeby wyeksportuj tę zmienną środowiskową:
export KUBECONFIG = <location-of-your-kubeconfig-file>
Jeśli kubectl jest poprawnie zainstalowany, powinno być możliwe wyświetlenie listy węzłów w klastrze:
kubectl get nodes
Będzie to potwierdzenie, że masz dostęp do klastra.
Wdrażanie wykresu Helm w klastrze
Teraz, gdy wiemy już, gdzie znaleźć repozytoria z setkami pakietów chart do wyboru, wdróżmy jeden z nich w naszym klastrze.
Zainstalujemy wykres Helm Apache web server. Aby zainstalować go z domyślną konfiguracją, należy uruchomić jedno polecenie:
helm install my-apache bitnami/apache
Zauważ, że my-apache odnosi się do konkretnej wersji, czyli konkretnego wdrożenia działającego na naszym klastrze. Możemy dostosować tę nazwę według własnego uznania. Po uruchomieniu powyższego polecenia wykres Helm 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 kilka zasobów Kubernetes zostaje wdrożonych w klastrze. 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 dostępne za pomocą adresu floating 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 adresu floating IP może potrwać kilka minut. Po tym czasie, po wprowadzeniu adresu floating IP do przeglądarki, zobaczysz usługę dostępną z Internetu:
Dostosowywanie rozmieszczenia wykresów Helm
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ć niezbędne wymagania.
Aby dostosować wdrożenie, szybkim i uproszczonym podejściem byłoby podanie 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 w dłuższej perspektywie.
Bardziej uniwersalnym podejściem jest jednak dostosowanie pliku values.yaml. Można to zrobić na dwa główne sposoby:
- Skopiowanie całego pliku values.yaml.
Tutaj można dostosować tylko wartość konkretnego parametru.
- Utworzenie nowego pliku values.yaml od podstaw
Ten plik zawierałby tylko dostosowane parametry z ich nadpisanymi wartościami.
W obu scenariuszach wszystkie ustawienia domyślne, z wyjątkiem zastąpionych, zostaną zachowane.
Jako przykład dostosowania wykresu udostępnijmy serwer WWW Apache na porcie 8080 zamiast domyślnego 80. Użyjemy drugiego podejścia i dostarczymy minimalny plik my-values.yaml dla zastępowanych parametrów. Zawartość tego pliku będzie następująca:
my-values.yaml
service:
ports:
http: 8080
W przypadku tych dostosowań należy pamiętać o zachowaniu wcięć i struktury pliku YAML wskazujących również odpowiednie bloki nadrzędne w drzewie.
Osobną mianą, 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 konkretną wersją/aplikacją.
Zastosuj wspomniane zmiany do wersji 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 udostępniona. Tym razem, aby uzyskać dostęp do adresu floating 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
Można zobaczyć, że aplikacja jest teraz dostępna na nowym porcie 8080, co można również sprawdzić w przeglądarce:
Co można zrobić dalej?
Możesz wdrożyć inne przydatne usługi za pomocą pakietów chart Helm, na przykład Argo Workflows, JupyterHub, Vault i wiele innych dostępnych usług.
Należy pamiętać, że wykres wdrożony za pomocą Helm jest tak naprawdę tylko zestawem zasobów Kubernetes. Zwykle w dostępnych wykresach Open Source istnieje duża liczba konfigurowalnych ustawień. Równie dobrze można edytować inne parametry na już wdrożonym klastrze, a nawet modyfikować szablony do konkretnego zastosowania.
Poniższy artykuł pokaże, jak użyć repozytorium JetStack do zainstalowania modułu CertManager, 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