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.