Kubernetes – 10. Helm

V predošlej časti sme nasadili deployment a následne vytvorili službu (service) typu NodePort a LoadBalancer, vďaka ktorej sme Kubernetes Cluster s nasadenými podmi otvorili do vnútornej siete cez IP adresu.

Chcete si vytvoriť vlastný Kubernetes (K8s) klaster? Vyskúšajte si ho vo Virtuálnom dátovom centre od Websupportu.

V tomto diele sa pozrieme na správcu balíkov systému Kubernetes, ktorý sa nazýva Helm. Slúži pri zjednodušovaní nasadzovania často používaných aplikácií a služieb, ktoré potrebujeme realizovať v rôznych kontextoch. Ukážeme si, ako pomocou šablón charts správca balíkov Helm dokáže zjednodušiť písanie a správu viacerých konfiguračným súborov vo formáte YAML.

História projektu

V roku 2015 spoločnosť s názvom Deis vyvinula nástroj Helm Classic. O rok neskôr sa Helm spojil s projektom Kubernetes Deployment Manager, čím sa dostal priamo pod správu nástrojov systému Kubernetes. V nasledujúcom roku bol vydaný Helm 2 so serverovým komponentom Tiller. V tomto štádiu je Helm povýšený z podprojektu systému Kubernetes na plnohodnotný projekt organizácie Cloud Native Computing Foundation (CNCF). Tiež sa stali štandardom repozitáre šablón (charts) ako Helm Chart Repo, Chart Museum a Helm Hub. S verziou 3 v roku 2019 prišlo rozhodnutie odstrániť serverový komponent Tiller, a tak sa Helm stal nástrojom na strane klienta, ktorý používa klientskú knižnicu systému Kubernetes.

Inštalácia správcu balíkov Helm

Pred inštaláciou správcu balíkov Helm je potrebné nainštalovať a nastaviť aktuálnu stabilnú verziu systému Kubernetes. Na domovskej stránke projektu Helm nájdeme tabuľku, ktorá informuje o kompatibilite konkrétnych verzií Helmu a Kubernetes.

Vďaka inštalačnému skriptu je inštalácia zjednodušená na 3 riadky. V prvom riadku sa stiahne aktuálny inštalačný skript. V druhom mu nastavíme práva a nakoniec v treťom spustíme inštaláciu:

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

Po dokončení inštalácie overíme, či sa Helm nainštaloval a či máme aktuálnu verziu (v čase písania tohto návodu je aktuálna verzia 3.7.1):

helm version

Odhaľujeme fungovanie na pozadí základnej šablóny

Správca balíkov Helm je postavený na troch konceptoch: Chart (šablóna), repozitár a release (vydanie). Chart (šablóna) je balík, ktorý obsahuje všetky súbory potrebné na nasadenie v klastri Kubernetes (väčšinou súbory vo formáte YAML). Repozitár je miesto, kde sú uložené šablóny a odkiaľ je možné zdieľať ich. Release (vydanie) je stav šablóny nasadenej v klastri Kubernetes.

Pri každej novej inštalácii šablóny sa vytvorí nové vydanie s unikátnym názvom. To znamená, že napríklad iba stačí nainštalovať šablónu MySQL dvakrát (zakaždým pod iným názvom), aby sme získali dva databázové systémy.

Jednoduchým príkazom vytvoríme základnú šablónu obsahujúcu súbory, na ktorých vysvetlíme vnútorný proces fungovania vyššie spomínaných konceptov:

helm create ~/helm-test

Vytvoril sa priečinok s názvom helm-test a v ňom štruktúra priečinkov a súborov. Podstatný je súbor s názvom values.yaml, pretože práve ten obsahuje informácie, ktoré sú automaticky vkladané do šablón v priečinku templates. Ide o šablóny uložené v textových konfiguračným súboroch formátu YAML – konkrétne napr. deployment.yaml alebo service.yaml. Takto šablónu spustíme:

helm install helm-test-run ~/helm-test

Spustil sa webový server Nginx. Zistíme CLUSTER-IP služby helm-test-run (prvý riadok) a overíme, či vydanie funguje správne (druhý riadok):

kubectl get services
curl CLUSTER-IP

Neskôr sa rozhodneme, že potrebujeme nasadiť 3 repliky (namiesto jednej). Prepíšeme teda v súbore ~/helm-test/values.yaml hodnotu replicaCount z 1 na 3 (prvý riadok) a necháme aktualizovať vydanie (druhý riadok):

nano ~/helm-test/values.yaml
helm upgrade -f ~/helm-test/values.yaml helm-test-run ~/helm-test

Zistíme, že k predošlému jednému podu sa doplnili ešte ďalšie dva, aby ich spolu bolo 3 (replicaCount 3):

kubectl get pods

Nakoniec si možno uvedomíme, že sme predsalen mali ponechať počet replík na čísle 1 (replicaCount 1). Vrátime sa teda k stavu, ktorý platil pred aktualizáciou (revízia 1):

helm rollback helm-test-run 1

Opäť máme iba jeden pod:

kubectl get pods

No a nakoniec odinštalujeme celé vydanie (release) aj so všetkými pridruženými zdrojmi (nasadenia a služby):

helm uninstall helm-test-run

Nasadzujeme šablónu (chart) z repozitára

Aby sme mohli stiahnuť skúšobnú šablónu (chart) z repozitára, musíme najskôr pridať adresu (https://charts.bitnami.com/bitnami) a názov (bitnami) repozitára, z ktorého šablónu budeme sťahovať:

helm repo add bitnami https://charts.bitnami.com/bitnami

Následne stiahneme (pull) a rozbalíme (--untar) šablónu populárneho systému na správu obsahu WordPress z pridaného repozitára (v čase písania tohto návodu je aktuálna verzia 12.1.25) bitnami:

helm pull bitnami/wordpress --untar

Vytvoril sa priečinok s názvom wordpress, z ktorého si Helm vyberie údaje potrebné na nasadenie deploymentu a následne služby pomocou typu LoadBalancer (druhý riadok). Pred inštaláciou vydania ešte môžeme prejsť nastavenia v súbore ~/wordpress/values.yaml (prvý riadok) a zmeniť tak napr. prihlasovacie údaje do databázy, či do WordPressu:

nano ~/wordpress/values.yaml
helm install moj-wordpress ~/wordpress --namespace default

Spustil sa webový server a databázový server, vďaka ktorým môže fungovať CMS WordPress.

Zistíme CLUSTER-IP služby s názvom moj-wordpress (LoadBalancer) a overíme funkčnosť služby:

kubectl get services
curl CLUSTER-IP

Nakoniec nasadenú šablónu (chart) odinštalujeme:

helm uninstall moj-wordpress

V prípade potreby iných aplikácií a nasadenia prislúchajúcich služieb, je možné v repozitári vyhľadávať. Povedzme, že by sme napr. chceli nainštalovať CMS Drupal, vyhľadáme ho takto:

helm search repo drupal

Ostatné možnosti nástroja Helm sú dobre popísané v oficiálnom návode na domovskej stránke projektu.

Hľadáte manažovaný Kubernetes? Využite služby našich skúsených profesionálov na cloud native – radi vám pripravíme riešnie na mieru.

Zhrnutie

V poslednom diele seriálu o systéme Kubernetes sme ukázali, ako je možné vďaka správcovi balíkov Helm automatizovať nasadenie služieb komplexnej aplikácie (napr. webový server + databázový server + WordPress). Stačí iba chart (šablóna), ktorú si hotovú nájdeme v repozitári a ostatné už zariadi Helm.

Aktualizované 14. júna 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu