Helm, PVC a další vychytávky

Tak jsem se začal učit používat Helm, což je jakýsi balíčkovací systém pro Kubernetes. Samozřejmě to hned z počátku přineslo více otázek než odpovědí. Hned po instalaci Helmu jsem se totiž vrhnul do rozchození balíčku s MySQL, a světe div se, tady jsem se zasekl.

Na čem? První věc, co mě zaskočila bylo to, že MySQL mělo PVC – Persistent Volume Claim. Holt další věc, do které jsem musel zabrousit více. Postupem času jsem zjistil, že vlastně libovolný pod si může požádat o jakési úložné místo, a Kubernetes jej bez problémů přidělí – tedy pokud máte vše nakonfigurované, a ne, automatické přidělování volume nefunguje s lokálním storage, to Kubernetes nepodporuje.

Je tedy potřeba si nakonfigurovat NFS server na Linuxu, a pak přes helm doinstalovat NFS klienta. Teprve poté je možné automaticky zprovoznit instalaci balíčku MySQL přes helm – lession learned.

Faktem je, že do takovýchto podrobností moc tutoriálů prostě na Kubernetes nejde. Na tyhle věci si už tak nějak musíte přijít sami, a různě Googlit a hledat.

Další věc, co mě zarazila u PVC je fakt, že si vůbec nejsem jistý, jak se to obnoví v případě nějaké Disaster Recovery. Pokud totiž pod požádá o nový PVC, tak ten starý nepoužijete. To se dostáváme k zpět k tomu, že si musím prostudovat Helm více do detailu, a opět se více vrátit ke Stateful sets.

Je toho kupodivu fakt hodně. Netvrdím, že by Kubernetes bylo nějak složité, ale je to fakt hodně komplexní, člověk se musí snažit pochopit vše tak nějak v souvislostech, a to zabírá čas – kort když se tomu nemůžete věnovat na 100% (práce, posilování, němčina, atd. atd.). No dávám tomu ještě pár měsíců, a doufám že postoupím dále.

Zážitky z konference RedHatu

Tak se mi podařilo dostat se na konferenci RedHatu, tentokrát byla v prostorách kryptoanarchystického sdružení Paralelní Polis. Toto sdružení mě tak trošku děsí, protože i koupit si tam kafe a zaplatit kartou je problém, ale v duchu jsem doufal, že se o nějaké občerstvení RedHat postará, a tak se i stalo, i když na Michellinskou hvězdu by to asi nebylo.

Na konferenci jsme si sami zkoušeli trošku hrát s OpenShiftem, a i došlo k porovnání Kubernetes a OpenShiftu. Jako OpenShift mě docela nadchnul, je to takové hrozné lego, a úplně dokonale to automatizuje CI/CD workflow.

Dost mě v přednášce zaujalo jedno téma, a to byly Operátory. Vůbec jsem do teď netušil, že něco takového v Kubernetes existuje. Hned po konferenci jsem se tedy dal do prozkoumávání, a našel jsem operátor pro MySQL v nějaké alfa verzi, a vyzkoušel.

Pokud se pídíte po tom, co je to ten operátor, tak je to vlastně takový framework, jak se starat o jednotlivé kontainery, a například jak škálovat MySQL databázi, protože to není úplně přímočaré (ostatně MySQL databázi nelze jen nastartovat ve 3 instancích, musíte nějak řešit replikaci, škálování apod.). Všechnu takovou věc, kterou byste normálně museli ručně skriptovat a řešit za vás vyřeší vlastně Operátor.

Další zajímavá věc, o které jsem se dozvěděl je jakési learningové centrum OpenShiftu – https://learn.openshift.com/ , ke kterému se chci více dostat, jakmile vniknu více do tajů Kubernetes.

MicroK8s, Ubuntu

To už je to zase tady? Měsíc se s měsícem sešel, a já jsem se zase rozhodl publikovat svůj progress s Kubernetes. Jak asi víte, tak jsem začínal se skriptem, který deployoval Kubernetes na jednu mašinu v AWS, ale moc to nefungovalo, a stálo mě to zbytečné peníze.

Postupně jsem se tedy přeorientoval na minikube. Ovšem i minikube má mnoho nevýhod. Jednou z nevýhod je, že vyžaduje puštěnou virtuálku, takže minikube nelze spustit v linuxové virtuále na Windows. Ano, lze pustit přímo na Windows, ale do toho se mi nechtělo jít, protože správu takovýchto věcí v prostředí Windows moc nemusím.

Zatím jsem tedy minikube provozoval na své mašině v Linuxu, ale postupem jsem díky tomu, že je to virtuálka narážel na další omezení. Například jsem měl problém rozjet různé plug-iny, CNI, a také se mi nedařilo rozjet dashboard. Uvažoval jsem co s tím.

Ovšem díky tomu, že používám Ubuntu na mě furt vyskakovala “reklama” na microk8s. Tak jsem si řekl, proč to nezkusit. Microk8s je vlastně snap, ale jinak se jedná o micro verzi kubernetes, která běží přímo na Linuxu, a můžete velmi snadno zapnout různé plug-iny, či se připojit k jejím socketům.

Zatím jediná věc, na kterou jsem narazil, je fakt, že je trošku problém s přistupováním ke Kubernetes dashboard přes Chrome nebo IE kvůli self-signed certifikátu, ovšem ve Firefoxu vše funguje skvěle. Nějaké řešení to asi mít bude, ale já jsem do detailu toho zatím nešel, protože dost experimentuji s tvorbou vlastních PODů a nastavování zdrojů.

Osobně bych řekl, že už do toho začínám mírně pronikat. V příštím měsící bych se chtěl soustředit hlavně na vytváření vlastních deploymentů, provozování databází a disaster recovery, tak se těšte na další updaty.

Kubernetes za půl roku? Ano, nikam nespěchám!

Rozhodně jsem na Kubernetes nezapoměl! Studuji teď poměrně pravidelně oficiální dokumentaci, dostal jsem se k dokumentu
https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/ , kde je několik předpokladů, pro jeho přečtení. Lépe řečeno, už musíte něco umět, abyste to pochopili.

Protože moje znalosti zatím byly nižší, tak jsem pravidelně procházel do podrobna všechny předkládané dokumenty, které bych si měl nejdřív nastudovat, abych pochopil Stateful sets.

Co je příjemné je, že jak studuji postupně a obden něco malého, tak se mi ty různé příkazy a koncepty zarývají do paměti. Je mnohem lepší se každý den o 1% zlepšit, než si to nastudovat vše naráz, a pak za týden vše zapomenout.

Jenom nemám úplně čas jen na Kubernetes, zdokonaluji se zároveň ve VIMu a Pythonu. Každý den něco, je to taková moje součást budování návyků.

Ke konci týdne plánuji nějaké setkání ohledně Kubernetes přes www.meetup.com. Tak se snad něco nového opět dozvím.

Nemyslím si, že by Kubernetes bylo nějak složité, ale já jsem si dal za cíl projít si ho za půl roku. Takže de fakto nikam nespěchám. Ani si nechci dělat nějaké týdenní školení či se to rychle nabiflovat, chci to hlavně v klidu a pohodě pochopit, času na to mám dost.

Prošel jsem Kubernetes tutoriál

Na adrese https://kubernetes.io/docs/tutorials/kubernetes-basics/ naleznete jednoduchý tutoriál na Kubernetes, nedávno jsem si ho celý prošel, vlastně to není nic moc obtížného. V tutoriálu je sice k dispozici i běhové prostředí, ale já si vše zkoušel na mé instalaci minikube.

Co mě u Kubernetes poměrně zaujalo je pár rozdílů oproti OpenShift – například chybí webové klikátko, ale to možná považuji spíše za výhodu.

Čím dál více u Kubernetes zjišťuji, že je to opravdu budoucnost provozování aplikací. Celá ta infrastruktura, kde například jste schopni provádět upgrady verzí za běhu bez výpadku apod.

Jediný problém, na který jsem tak trošku u celé nové architektury mikroservices narazil (ale to se ani tak netýká Kubernetes) je přechod na NoSQL databáze, které prostě podle mě nejsou na mnoho nasazení nijak zvlášť vhodné. 

Dále také procházení dokumentace ke Kubernetes je zajímavé, je sice k dispozici spousta tutoriálů, ale problém je, že všechny jsou tak nějak pro začátečníky, když člověk už má jisté znalosti (například Dockeru), tak si nebudete procházet vše od znovu. Takže je potřeba se zaměřit více prakticky a studovat dokumentaci podrobně jen na to, co člověk přesně potřebuje.

No uvidíme, řekl jsem si, že si obden něco nastuduji, tak schválně kam se za pár měsíců posunu.

Minikube na mém serveru

Tak jsem se rozhodl, že minikube z AWS odinstaluji, přišlo mi to tak trošku jako zbytečný overkill a utrácení peněz, když doma mám domácí server, který jsem před časem upgradoval (z Pentium na Core i5), a který má 16GB RAM, z většiny nevyužitých.

Odinstalování Minikube z AWS proběhlo celkem hladce, díky Terraform stačilo pustit de fakto dva příkazy, a vše se samo zlikvidovalo a odinstalovalo, tedy až na nastavení Route53, které jsem musel smazat ručně.

Instalace Minikube na můj domácí server proběhla relativně bezproblémově podle manuálu, ale přiznám se, že na začátku bylo několik věcí, kde jsem trošku váhal. Sice si můžete vybrat virtualizační platformu, která se použije (VirtualBox, KVM, atd…), ale nebylo mi jasné, co se použije v základu, a jestli budu muset nějak řešit práva, aby vše šlo spustit pod uživatelem, a ne pod rootem.

Takže standardní virtualizace je headless VirtualBox, protože můj uživatel byl už ve skupině “vboxusers”, tak jsem žádná práva řešit nemusel, vše se nainstalovalo do adresáře “~/.minikube”, který si po základní instalaci vyžádal 2GB diskového prostoru. Co jsem tak přes htop vysledoval, tak si celá virtuálka vzala 4GB RAM, což docela ujde.

Řekl bych, že celá instalace Minikube byla značně snadnější a bezproblémovější, než instalace Minikube v AWS. Ale zase chybí nějaké standardní rozšíření, jako třeba dashboard, která budu muset doinstalovat.

Naopak dobrou zprávou je, že kubectl už tak nějak bylo automaticky předkonfigurováno, takže se vlastně nemuselo nic nastavovat. Rozhodně pozitivní věc. V každém případě čtěte dále, jak bojuji s Kubernetes, rozhodně tu hodlám časem zveřejnit více zajímavých informací.

OpenShift

Po počátečním nadšení jsem nyní trošku narazil na realitu všedního života, tedy čas, který tomu všemu můžu věnovat. Je dost omezený.

V práci jsme začali zavádět OpenShift, jedná se o jakýsi nadstandard Kubernetes. Byl jsem na přednášce od RedHatu, která byla zcela zdarma včetně workshopů, a lidí tam bylo znatelně méně než na konferenci o AWS, jako znatelně. Tj. třeba na konferenci o AWS jsem potkal 300 lidí, na konferenci o OpenShift 30 lidí.

Zdá se, že OpenShift tolik prostě netáhne, a mezi náma, je to taky hodně nová věc. Taky si dost myslím, že tomu přidává, jak je celý software komplexní a těžko ovladatelný a hlavně specifický.

Taky jsem z diskuzí na internetu zjistil, že existuje něco jako Amazon EKS. Tedy manažovaný cluster Kubernetes v AWS. Poměrně zajímavá technologie.

Zas o krok dál

Tak se mi to podařilo, rozjel jsem dashboard v Kubernetes. Hodně musím poděkovat týmu AWS Minikube, kteří reagovali na mojí issue (najdete tam i způsob řešení) během jednoho dne, ale i tak to byl trošku boj.

Zjistil jsem, že nemám účet k Dashboard, a ten musím vytvořit. Kubernetes je tak trošku enterprise nástroj, takže nepředpokládejte to, že byste někde zadali “adduser martin heslo”, ale musíte vytvořit YAML soubor, který aplikujete přes kubectl, a tím vytvoříte jak uživatele, tak mu přiřadíte roli (ukázka zde)

Možná jsem to zapomněl zmínit, ale Kubernetes používá RBAC (Role Based Access Control), stejně tak jako třeba Solaris. Rozhodně v enterprise prostředích je to super věc, jenom pokud si potřebujete vytvořit jeden účet totálního admina na testování, tak je to trošku overkill.

Tak nějak neustále uvažuji, kudy dál se posunout, jestli nějaký kurz na Udemy, případně oficiální dokumentace, nebo asi ta cesta, kterou se vydám, a to je oboje – ale zase čím začít?

Rozhodně můžu říci, že naučit se Kubernetes je trošku oříšek, ono totiž není moc od koho se učit. Ani třeba na stránce Codementor.io není moc mentorů (a podle výpisu bych spíše řekl, že žádný který umí dobře). Je to poměrně nová věc, jejíž hype a růst začal před 2 lety, takže to ještě de fakto nikdo moc neumí.

Tak těch 30 minut jsem hodně přehnal

Vlastně hned po instalaci MiniKube pro AWS jsem ještě nevěděl co mě čeká. Hned jak jsem to začal zprovozňovat, tak jsem si všiml, že dokumentace k produktu je zastaralejší než kód a neodráží skutečný stav věci, na některé věci jsem přišel, a na některé se dále doptávám, viz.

To je prostě hrozný, člověk nainstaluje klikací nejjednodušší verzi, doufá že se připojí na Dashboard, a ona půlka věcí nefunguje, a dokumentace střídá jeden pojem závislý na druhém, přičemž je dost neurčitá a člověk se točí v kruhu.

Kubernetes je opravdu velmi, ale velmi komplexní produkt se spoustou závislostí, ano chápu to, jedná se o komplexní řešení, ale je velmi těžké se takto něco jen tak naučit. No nic, počkám si chvíli na odpovědi – všiml jsem si, že autoři produktu docela reagují, a uvidím. Případně zkusím nějakou jinou cestu s instalací.

MiniKube v AWS za 30 minut

Přiznám se, že k instalaci něčeho na můj počítač jsem se moc neměl, počítačů totiž používám několik, a nechtěl jsem mít nic lokálně, a ani se mi na mém domácím serveru nechtělo patlat s veškerým nastavením a deploymentem.

Zpočátku jsem zvažoval, že bych využil 100 USD kredit, který nyní hojně nabízí DigitalOcean, co mě ovšem u DigitalOcean zklamalo byla nemožnost mašinu v případě nevyužívání vypnout, tak jako to jde v AWS, kde vám jsou po vypnutí mašiny účtovány poplatky pouze za využitý prostor, ale ne za procesorový čas.

Rozhodl jsem se tedy pro AWS, moje první volba padla hned na projekt AWS MiniKube, jedná se o docela zajímavý projekt, který vám umožní rozjet Kubernetes v AWS na jedné instanci za 30 minut.

Nejdříve mě zajímalo, kolik to bude stát, takže hezky popořadě

  • VPC (Virtual Private Cloud Network) – zdarma
  • Route53 (Směřování domén) – 0,5 USD/měsíc
  • Úložiště pro mašinu (SSD 50GB) – cca. 5 USD/měsíc
  • Mašina (t2.medium) – 0,05 USD/hodina, platíte jen čas kdy mašinu využíváte a je zapnutá

To mi přišlo jako rozumná částka, tak jsem se dal do instalace. První věc co na mě vybafla bylo, že potřebuji nastavit VPC, a mám to jako udělat přes skripty https://github.com/scholzj/aws-vpc pro TerraForm. Vůbec jsem netušil co to je Terraform, ale je to vcelku něco jako Ansible pro nastavování cloudu v AWS. Prostě konfigurační nástroj, jednoduše si stáhnete ZIP, rozbalíte v Linuxu binárku, a po zklonování GIT repozitáře se šablonou vše můžete pustit, a cloud se automaticky nastaví, vychytané!

Poté zbývalo nakonfigurovat DNS záznamy. Nechtěl jsem využívat vlastní doménu, a tak mě zajímalo, jestli můžu delegovat pro zprávu subdomény samostatné zóny. A hle, lze to (návod: Creating a Subdomain That Uses Amazon Route 53 as the DNS Service without Migrating the Parent Domain). Přihlásil jsem se na Cloudflare (můj správce NS záznamů), a pro mojí novou subdoménu jsem nastavil nameservery na Route53. Změna se projevila během 5ti minut. Takže jsem měl novou zónu spravovanou u AWS, jak chytré milý Watsone.

Nezbývalo nic jiného než instalace AWS Minikube, to byla otázka vysloveně 10ti minut. Nejdříve na mě vyhrkla příkazová řádka nějakou chybu s licencí, a tak jsem musel u AWS odsouhlasit licenci pro CentOS (zdarma), poté jsem jenom vše spustil znovu a na mašinu se přihlásil na adresu jméno-minikube.subdoména.enigma14.eu.

Přihlásil jsem se pomocí uživatelského jména centos (což bohužel nebylo nikde zmíněno, a přišel jsem na to až na několikátý pokus), a zjistil jsem, že mám rozběhanou testovací verzi Kubernetes.

No řeknu vám, nebylo to úplně jednoduché, ale taky ne nemožné, během pár desítek minut se mi podařilo hravě projít celým procesem a nějaké výraznější záseky jsem nenašel.

Důvod proč vše pouštím v cloudu je ten, že do budoucna bych chtěl otestovat rozsáhlejší clusterované řešení, a je mi jasné, že u mě doma na počítači či na nějakém serveru by to bylo mnohem komplikovanější než pomocí jednoduchých šablon s Terraform v cloudu.