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.
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.
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.