Skip to main content
  • »
  • KUBERNETES »
  • Wdrażanie Helm Charts na klastrach Magnum Kubernetes w chmurze NSIS Cloud

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

Jak stworzyć wirtualną maszynę z Linuxem na chmurze NSIS Cloud i uzyskać do niej dostęp przy użyciu linuxowego wiersza poleceń

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:

../_images/search_repo.png

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:

../_images/apache_bitnami.png

Kliknij opcję DEFAULT VALUES (żółte podświetlenie) i zobacz zawartość domyślnego pliku values.yaml.

../_images/parameters.png

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:

../_images/apache_ip.png

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:

../_images/trag_8080.png

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