MicroK8s: tři roky zkušeností s Kubernetes v Ubuntu

9. 10. 2024
Doba čtení: 6 minut

Sdílet

 Autor: Depositphotos
V článcích na internetu často narazíte jen na krátkodobé zkušenosti. Proto jsem se rozhodl podělit o svou tříletou zkušenost s Kubernetes řešením MicroK8s od Canonicalu, abyste věděli, co očekávat a na co si dát pozor.

Když si na internetu pročítáte recenze u výrobků či recenze od redaktorů nějakého časopisu, často narazíte na to, že daný redaktor či recenzent má zkušenost v řádu dnů či týdnů, a to není úplně vypovídající. Proto jsem se rozhodl napsat recenzi Kubernetes řešení MicroK8s od Canonicalu po třech letech používání, abyste věděli, co vás čeká, kde jsem udělal chyby, i kde se můžete snadno spálit.

Pro koho je MicroK8s

Předně, MicroK8s je řešení pro malé vývojové týmy a lokální instalace Kubernetes, které potřebujete rychle lokálně zprovoznit. Může se jednat i o produkční řešení, nicméně opravdu nějaký velký projekt bych na tom asi neprovozoval.

Jako příklad uživatelů se berou menší vývojářská studia, nebo třeba nějaké lokální řešení urychlovače v CERN. Alespoň tím se Canonical chlubí, jako případovou studií.

Prvotní instalace

Prvotní instalace MicroK8s je snadná, když víte jak na to a přečtete si manuál, pokud jste v Kubernetes úplný nováček, a jdete metodou pokus omyl, snadno se spálíte – ovšem to bych asi nebral jako chybu Canonicalu.

MicroK8s nainstalujete jako jednoduchý balíček „snap“ do svého Ubuntu, a chtěl jsem napsat, že můžete hned fungovat, ale není to tak. Samozřejmě potřebujete zprovoznit nějaké diskové úložiště – Persistent Volume, buďto v rámci NFS nebo třeba lokálního disku. Také potřebujete zprovoznit ingress, což je vlastně taková reverzní proxy, a taky Helm, což je zase balíčkovací manažer pro Kubernetes.

Zde nastala moje prvotní chyba, když jsem začínal, vše jsem se snažil nějak doinstalovat sám. U MicroK8s si tak zbytečně přiděláváte práci a „bojujete s větrnými mlýny“. Vše je totiž dostupné jako přídavný balíček, tzv. „add-on“, který můžete doinstalovat jedním příkazem, například  microk8s enable ingress.

Doporučuji si na webu projít seznam všech přídavných modulů, ať zbytečně znovu neobjevujete kolo. Pokud půjdete jejich přímou instalací, myslím že Kubernetes rozběhnete v klidu do hodiny.

Výhody MicroK8s

Výhodou MicroK8s je dostupný dashboard, kterým můžete Kubernetes spravovat přes web. Další výhodou je velmi snadná aktualizace přes balíček snap a relativně spolehlivý provoz – nějaké větší problémy jsem nezaznamenal. Dokonce je to i distribuce, kterou snadno rozběhnete na Raspberry Pi.

Dashboard v MicroK8s

Zkoušíme si vlastní instalaci

Instalace Grafany nabízí jednoduchou možnost, jak si vše vyzkoušet. Nejprve nainstalujeme MicroK8s na Ubuntu pomocí balíčku snap.

$ sudo snap install microk8s --classic

Poté přidáme aktuálního uživatele do seznamu uživatelů MicroK8s.

$ sudo usermod -aG microk8s $USER
$ sudo chown -f -R $USER ~/.kube

Nakonec aktivujeme nezbytné moduly.

$ microk8s enable dns
$ microk8s enable ingress
$ microk8s enable helm3
$ microk8s enable storage

Zde se zastavím u krátkého vysvětlení. Předně je třeba říct, že Kubernetes spouští jednotlivé kontejnery bez přístupu ke klasickému DNS resolveru, který máte nainstalovaný v operačním systému. Tedy pokud neaktivujete DNS v clusteru, nedostanete se na internet. Standardně se tedy v clusteru spustí tzv. služba Core DNS, která má vlastní upstream server a přeposílá veškeré požadavky na server zmíněný v  /etc/resolv.conf.

Další věcí, kterou aktivujeme je ingress. Standardně Kubernetes používá služby, to je každý pod (skupina kontejnerů využívající stejný síťový jmenný prostor) se připojuje ke službě, na kterou je možné posílat požadavky na port, třeba 8080 TCP. To by ovšem většině uživatelů nestačilo, protože na jedné doméně provozují více služeb a jednu doménu zpravidla obsluhuje více kontejnerů. Proto je třeba rozdělit provoz mezi kontejnery pomocí doménového jména, nebo cesty v doménovém jméně pomocí reverzní proxy. V názvosloví Kubernetes se právě tomuhle říká ingress.

Třetí věcí, kterou aktivujeme je Helm. To je vlastně balíčkovací systém určený pro Kubernetes. Ten nám umožňuje snadno instalovat nějaký produkt, který si sám řeší ingress, služby, úložiště a kontejnery s konfigurací v jednom souboru.

Poslední věcí, kterou si doinstalujeme je balíček storage. Ten by nám měl vytvořit výchozí storage class, což je vlastně třída úložiště, u které si žádáme o diskový prostor. Funguje to poměrně jednoduše, vy si pomocí Persistent Volume Claim (PVC) zažádáte například o úložiště 10GB nějakou třídu úložiště (standardně tu výchozí, ale může jich být víc, třeba nějaká v NFS, nebo AWS EBS apod.), a ta vám dané úložiště poskytne. Tyto definice PVC jsou například součástí balíčku Helm.

Nyní si stáhneme balíček Helm.

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update

Nakonec ho rozbalíme a vyextrahujeme soubor Values.yml.

$ helm pull grafana/grafana –untar

Až stáhneme balíček a vyextrahujeme, měli bychom narazit na soubor Values.yml. V tom tradičně nejvíce upravujeme položky „ingress“ a „storageclass“ podle svého nastavení, případně třeba také výchozí hesla.

Balíček nainstalujeme.

$ helm install grafana ./grafana --values ./grafana/values.yaml

Ke Grafaně přistoupíme na port 80. Pokud jsme aktivovali ingress, tak na portu 80 operačního systému bychom měli vidět rozhraní Grafany, samozřejmě jen v případě, že máme správně nastaven ingress. Případně si přidejte doménu do /etc/hosts a nastavte si ji na ingressu.

Běžící Grafana

Na jaké problémy jsem narazil

Prvním problémem, s kterým dodnes bojuji je záloha databáze etcd. S aktualizací MicroK8s na novější verzi se to rozbilo, je na to vytvořen bug report a mnoho uživatelů chybu potvrzuje. Bohužel se měsíce  nic dalšího neděje, což by mě trošku odrazovalo od nasazení takového nástroje v produkčním prostředí. Ale principiálně, pokud máte způsob zálohy jiný (třeba zálohujete celý virtuál), nemusí to vlastně tolik vadit.

Dalším problémem, na který přijdete po delším čase, je zabírání místa na disku nepoužívanými obrazy kontejnerů. Existuje sice neoficiální nástroj „microk8s prune“, ale Canonical na to hned v počátku vůbec nemyslí, a tak pokud jste na štíru s místem na disku, můžete rychle narazit. Zmíněný nástroj vám místo pročistí, můžete si ho dát třeba do cronu.

Posledním problémem, který spatřuji je, že se jedná o aplikaci v Ubuntu. Musíte tedy čas od času aktualizovat hostitelský systém mezi verzemi, což se nemusí obejít bez komplikací. Například při aktualizaci z verze Ubuntu 24.04 na verzi 24.04.1 se mi rozbil Nginx, kde se vývojáři rozhodli rozdělit jeho zásuvné moduly do samostatného balíčku, který se s aktualizací sám nenainstaloval.

Ještě abych nezapomněl, MicroK8s má jednu takovou zvláštnost. Normálně se řeší síťování v Kubernetes pomocí plug-inu CNI – Container Network Interface, který upravuje pravidla v IPtables. V novějších distribucích je vedle IPtables k dispozici také modernější firewall Nft. MicroK8s bohužel používá starší IPtables pomocí nástrojů iptables-legacy.

Skvělý pro začátečníky

Myslím si, že MicroK8s je skvělá distribuce Kubernetes pro začátečníky, interní vývoj a domácí produkci. Do komerční produkce se podle mě jedná o produkt nevhodný, ani sám výrobce jej tam necílí.

Pokud si po instalaci projdete dokumentaci, a základní funkcionalitu doinstalujete pomocí zásuvných modulů, nebudete se ani moc trápit. Pokud půjdete metodou pokusů a omylů, můžete se natrápit značně víc.

ict ve školství 24

Osobně mi několik let non-stop běží v pohodě server, kde mám desítky služeb – zásadnější problémy jsem nezpozoroval. Co bych udělal jinak, kdybych začínal od začátku? Opravdu bych si nejdřív do detailu přečetl celou dokumentaci, která není zase tak dlouhá.

(Autorem obrázků je Martin Koníček.)

Autor článku

V oboru informačních technologií se pohybuje přes 20 let. V současné době pracuje jako kontraktor pro DevOps.