Tworzenie pierwszej paczki Helm

W poniższym artykule, pokażę jak stworzyć pierwszą paczkę w Helm, jak ją zainstalować, zrobić upgrade oraz finalnie usunąć. Stworzymy sobie paczkę, która będzie instalować nginx, a później zrobimy jej update, aby instalowała httpd.

1. Czym jest HELM?

Jest to menedżer paczek, który daje nam możliwość wgrywania aplikacji/paczek na nasz klaster kubernetesa. Paczki HELM można parametryzować, dzięki czemu bez najmniejszego problemu, jesteśmy w stanie przygotować kilka wersji danej paczki, np pod kątem różnych środowisk. Proces instalacji zależny jest od platformy jakiej używacie, więc odsyłam do dokumentacji helm https://helm.sh/docs/intro/install/

2. Tworzenie paczki hello-nginx

Utworzenie czystej paczki, ogranicza się do uruchomienia poniższego polecenia

helm create hello-nginx

Utworzony zostanie katalog o nazwie hello-nginx, w którym będzie cała struktura naszej paczki. Odnośnie struktury naszej paczki:

  1. charts – jest to katalog w którym są zależności np chart do postawienia bazy danych, z której korzysta nasza paczka
  2. templates – tutaj umieszaczmy manifesty naszej paczki np deployment, service, ingress itp
  3. Chart.yaml – jest to takie readme naszej paczki, w której umieszczamy informacje odnośnie nazwy paczki, wersji charta, wersji aplikacji
  4. values.yaml – jest to plik, który zawiera zmienne wraz z wartościami, które wykorzystujemy w menifestach, dodanych do katalogu templates

3. Utworzenie plików do templates

Tak jak wspominałem na początku, utworzymy sobie deployment oraz service pod uruchomienie nginx. W pierwszej kolejności utwórzmy plik deployment.yaml w katalogu templates i wklejmy do niego poniższy kod

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: {{ .Values.image.repository }}
        name: nginx
        imagePullPolicy: {{ .Values.image.pullPolicy }}

Kolejnym plikiem będzie service.yaml z poniższym kodem

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: {{ .Values.service.port }}
    protocol: TCP
    targetPort: {{ .Values.service.port }}
    nodePort: {{ .Values.service.nodePort }}
  selector:
    app: nginx
  type: {{ .Values.service.type }}

Teraz do pliku values.yaml, musimy wkleić poniższe zmienne wraz z wartościami

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent

service:
  type: NodePort
  port: 80
  nodePort: 31000

Powyższe wartości wczytujemy do naszych manifestów przy pomocy Values, dokładnie opisane korzystanie z values, znajdziecie pod tym linkiem https://helm.sh/docs/chart_template_guide/values_files/

Ostatni plik jaki musimy uzupełnić to Chart.yaml, w którym umieszczami informacje odnośnie nazwy paczki, wersji aplikacji, wersji chart, opis itp, wklejamy do niego poniższy kod

apiVersion: v2
name: hello-nginx
description: Helm chart for hello-nginx
type: application
version: 0.1.0
appVersion: "1.0.1"

To na tyle, jeżeli chodzi o szablon naszej paczki, w kolejnym kroku zainstalujemy ją, zrobimy upgrade, a na samym końcu usuniemy.

4. Instalacja paczki

Proces instalacji paczki, jest tak samo prosty jak jej utworzenie z poziomu CLI i ogranicza się do wykonania jednego polecenia w katalogu z paczką

helm install hello-nginx .

wyjaśniając powyższe polecenie

helm install nazwa_release katalog_z_paczką

Wynik instalacji powinien być taki jak poniżej

NAME: hello-nginx
LAST DEPLOYED: Thu Sep 28 11:13:42 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Teraz, aby sprawdzić czy wszystko przebiegło pomyślnie, możemy wykonać polecenie

helm list

Które powinno nam zwrócić wynik z listą releasów, na której będzie nasz hello-nginx ze statusem Deployed. Następnie, aby sprawdzić czy faktycznie nginx nam się odpalił, należy w przeglądarce wpisać IP noda oraz port podany w NodePort. Ja na potrzeby artykułu używam minikube, więc w moim wypadku wystarczy wykonać poniższe polecenie i przeglądarka sama otworzy serwis na odpowiednim IP oraz porcie.

minikube svc nginx

5. Aktualizacja paczki

Aktualizacja paczki jest prostym procesem, na nasze potrzeby w pliku values.yml zmieńmy image z nginx na httpd, natomiast w pliku Chart.yaml, zmieńmy version na 0.2.0, a appVersion na 2.0.0. Po wprowadzeniu zmian, wystarczy wykonać polecenie

helm upgrade hello-nginx .

Jeżeli wszystko przebiegło pomyślnie, to po wykonaniu poniższego polecenia

helm history hello-nginx

Powinniśmy zobaczyć historię naszej paczki, w tym revision 1 z poprzednią wersją aplikacji, oraz revision 2, z aktualną wersją paczki.

6. Usunięcie paczki

W przypadku chęci usunięcia paczki, cały proces ogranicza się do wykonania polecenia helm uninstall, w naszym wypadku to będzie

helm uninstall hello-nginx

I tyle 🙂

7. Podsumowanie

Artykuł nie jest długi, ani skomplikowany, ale mam nadzieję, że wyjaśni Wam proces dodawania, usuwania oraz aktualizacji paczki utworzonej w Helm, oraz zachęci do tworzenia przydatnych paczek i udostępniania na https://artifacthub.io/ gdzie znajdzie ogromną ilość paczek, ale także umieścicie swoją.