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

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

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

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:

../_images/search_repo1.png

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:

../_images/apache_bitnami1.png

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

../_images/parameters1.png

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:

../_images/apache_ip1.png

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:

../_images/trag_80801.png

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