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.

Jak vysvětlit Kubernetes?

Je to takový blob, velká komplexní věc, kterou dneska nikdo moc nechápe. Proto jsem si začal klást otázky, třeba proč to používat, jak to používat a co vám to přinese. A kde jsem hledal odpovědi?

Tak nějaké základní povědomí můžete získat tady:

Popravdě řečeno si myslím, že nějak víc moudřejší bude spíše člověk, který absolvoval mnou zmíňěná školení na Docker, a zkusil si sám nějakou aplikaci v dockeru vytvořit.

Co je poměrně zajímavá věc, kterou jsem zjistil, že existuje taková malá věc – MiniKube, což je vlastně taková odlehčená verze Kubernetes, na kterou nemusíte mít rozsáhlý a komplexně nakonfigurovaný cluster někde v Amazon EC2, ale jednoduchý stroj.

Problém, který začínám řešit já je ten, že bych minikube chtěl rozchodit spíše v nějaké virtuálce než na hardwaru přímo. Našel jsem tady nějaké řešení – https://github.com/robertluwang/docker-hands-on-guide/blob/master/minikube-none-installation.md, a o to bych se s vámi rád do budoucna podělil, jak jsem byl úspěšný.

O čem je Kubernetes?

Popravdě řečeno, Kubernetes, kontainery a vůbec celá kontinuální integrace, to jsou věci, co přicházejí do módy teprve nyní. V ČR je pár vlašťovek, co už dané technologie nasazují, a tuším průkopníkem je u nás mezinárodní korporát MSD, ale stále hodně firem jede tak nějak postaru a zjišťují, že ruční údržba a deployování kódu do produkce je stojí mnoho úsilí a peněz.

Já o těchto věcech mám nějaké základní povědomí, ale upřímně řečeno, s Kubernetes se chci teprve teď učit, a celým procesem vás provést. Není to moje pracovní věc, spíše jako rozvíjení ve volném čase, protože si myslím, že takováto technologie má budoucnost.

První věc, které jsem si všimnul je, že na správu kontajnerů je několik konkurenčních řešení. Můžeme se bavit třeba o OpenShift, Docker Swarm nebo nějaké cloudové řešení od Suse. Problém je v tom, že všechna tato řešení jsou komerční. Kubernetes se liší v tom, že ho z produkce uvolnilo Google a předalo Linux Foundation, neziskové organizaci starající se o otevřený software.

Já jsem velkým přítelem otevřeného softwaru. Ani ne tak proto, že je zdarma, ale hlavně proto, že jeho vývoj je stabilní – prostě se vám nestane to, že to nějaký z velkých bosů v korporaci zařízne, nebo vývoj posune úplně jiným směrem, a znehodnotí veškeré vaše investice do technologie.

Právě proto jsem se začal o Kubernetes zajímat.

Jak jsem vlastně začal s Dockerem?

No budu k vám upřímný, byl jsem tak nějak donucen prací, když jsem zjistil, že vývojáři řeší Docker, a měli k tomu čím dál nějak více dotazů, tak jsem si říkal, že to je vlastně dost moje věc, o kterou bych se mohl sám postarat.

Byl jsem proto na dvou školeních, nebyla drahá, jejich seznam píšu níže:

Celkem školení za 8.200 Kč bez daně bratru, s Ondřejem Sikou. Školení byla pohodová, a hlavně hodně praktická, takže jsem se naučil základy Dockeru, a vytváření aplikací na Dockeru, což mě vedlo k přepsání jedné mojí aplikace v Pythonu do balíčku v Dockeru – https://www.enigma14.eu/wiki/SSH_Tunnel_with_Autossh_and_Docker

Obecně si myslím, že Docker je poměrně skvělá věc. Hlavní výhodu spatřuji v tom, že člověk prostě úplně odděluje stavové informace v aplikaci (konfigurace, databáze, úložiště) od bezstavového kódu, který můžete libovolně modifikovat.

O čem se tu budeme vlastně bavit?

Tak jsem se rozhodl, že začnu experimentovat s Kubernetes. Proč vlastně s Kubernetes, co je to Docker, a jaký to má všechno smysl?

Pokusím se odpovědět popořadě, ne každý má zkušenosti s vývojem aplikací ve větším měřítku, myslím tím aplikací, které mají fakt vliv. Tam kde potřebujete aplikaci nějak postupně aktualizovat na produkci, nejlépe za chodu, aplikaci, kterou potřebujete udržovat co nejvíce stabilní a funkční.

Ono to vlastně není jen tak, zpravidla vývoj potřebuje aplikaci nějak vyvinout, otestovat, odzkoušet v nějaké betě, a potom dát na produkci. Tomu se říká zjednodušeně “Continuous integration”. Dnes je moderní agilní vývoj, a vlastně není důvod, proč by klasické “operations” mělo nasazovat nějakou verzi 10.0, a pak verzi 11.0 jako v době Windows 95, a pak třeba Windows 98, ale prostě více logiky dává nasazovat postupné aktualizace, ostatně tak to máme už ve Windows 10.

Ovšem jak na to? Základem je si uvědomit, že tu máme i moderní vývojové trendy, jako třeba mikro služby. Micro services jsou služby, kde jednotlivé části aplikace mezi sebou komunikují pomocí nějaké sběrnice (XML-RPC) nebo message brokera (RabbitMQ). Aplikace je poté rozdělena na několik menších částí, které je možné vyvíjet odděleně.

Výhoda je ta, že pokud zjistíte, že u auta potřebujete nové světlo, tak jako dosud nesestavujete celé nové auto (tedy celou aplikaci), ale vytvoříte pouze ono světlo (službu), a vyměníte pouze tuto část aplikace, což je mimo jiné ona kontainerizacece v Dockeru.

O tom vlastně je celé Kubernetes, že máte kompletní prostředí pro aplikaci rozsekanou na kousky v podobě kontainerů, které jsou ve vývojových, testovacích, preview a produkčních verzích. Výhoda je zřejmá, celý vývoj máte tak nějak více pod kontrolou a můžete pravidelně aktualizovat jednotlivé verze aplikace a velmi jednoduše nasazovat přes docker repozitáře na produkci.

Že je to pro vás španělská vesnice? Nebojte, postupem času se dostaneme více do detailů a projdeme si mnohé zajímavosti.