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:
- charts – jest to katalog w którym są zależności np chart do postawienia bazy danych, z której korzysta nasza paczka
- templates – tutaj umieszaczmy manifesty naszej paczki np deployment, service, ingress itp
- Chart.yaml – jest to takie readme naszej paczki, w której umieszczamy informacje odnośnie nazwy paczki, wersji charta, wersji aplikacji
- 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ą.