Helm to menedżer pakietów dla Kubernetesa — taki apt czy npm, tyle że zamiast instalować jeden program na laptopie, jednym poleceniem stawiasz całą aplikację w klastrze: deploymenty, serwisy, configmapy, ingressy i resztę towarzystwa. Zamiast klepać kilkanaście plików YAML ręcznie i pamiętać, w jakiej kolejności je nałożyć, opisujesz aplikację w postaci tzw. Helm Chart i wdrażasz ją jednym strzałem. Helm jest projektem CNCF (status graduated), więc to nie jakieś eksperymentalne narzędzie z weekendowego hackathonu, tylko branżowy standard.
Jak to działa
Sercem Helma jest chart — paczka z szablonami manifestów Kubernetesa. Szablony są napisane w Go template, a wartości, które do nich wstrzykujesz, trzymasz w pliku values.yaml. Dzięki temu jeden chart obsłuży i środowisko dev (1 replika, mała baza), i produkcję (5 replik, autoscaling) — różnica to tylko inny zestaw wartości. Każde wdrożenie chartu to release, czyli nazwana, wersjonowana instancja aplikacji w klastrze.
Najważniejsze: Helm pamięta historię releasów. Wdrożyłeś nową wersję, a pody zaczęły się sypać? Robisz helm rollback i wracasz do poprzedniego stanu, bez ręcznego cofania zmian w dziesięciu plikach. To właśnie ta obietnica „wdrażaj i aktualizuj bez nerwów”, którą Helm faktycznie spełnia.
Przykład z praktyki
Chcesz postawić w klastrze Redisa albo nginx-ingress? Nie piszesz manifestów od zera. Dodajesz repozytorium z chartami i instalujesz gotowca, np. z repozytorium Bitnami:
helm repo add bitnami https://charts.bitnami.com/bitnamihelm install moja-baza bitnami/redishelm upgrade moja-baza bitnami/redis --set replica.replicaCount=3helm rollback moja-baza 1— gdy coś pójdzie nie tak
Gotowe charty znajdziesz na Artifact Hub — to taki npmjs.com świata Kubernetesa. Własne charty generujesz przez helm create nazwa i dorabiasz pod swoją aplikację.
Na co uważać
Pierwsza pułapka: jeśli uczysz się ze starych poradników, możesz trafić na Tiller — komponent serwerowy z Helma 2, który był zmorą bezpieczeństwa. W Helmie 3 Tiller wyleciał, a klient gada z Kubernetesem bezpośrednio przez Twój kubeconfig. Używaj Helma 3+ i zapomnij o Tillerze.
Druga: helm install nie waliduje logiki Twojej aplikacji — sprawdzi składnię manifestów, ale jak wstrzykniesz błędną wartość, Kubernetes przyjmie to z uśmiechem i dopiero pody się wyłożą. Zanim wdrożysz, odpal helm template albo helm install --dry-run i zobacz, jaki YAML faktycznie wyjdzie. I nie trzymaj sekretów na sztywno w values.yaml w repo — od tego są dedykowane rozwiązania.
Pojęcia powiązane: Kubernetes, chart, values.yaml, release, kubectl, Kustomize (alternatywne podejście do szablonowania), GitOps, ArgoCD, CNCF, manifest YAML.