Kontejnery jsou dnes základem pro mnoho moderních aplikací. Pokud vaše firemní IT tuto technologii příliš nezná, o hodně přicházíte. Jde o velmi užitečného spojence, který může pomoci překonat mnohá omezení, se kterými se potkáváte v monolitických legacy aplikacích.
Více než jen odlehčené virtuální stroje
Mnohým se může zdát, že se de facto jedná o virtuální stroje na dietě. Ve skutečnosti jsou kontejnery často provozovány nad virtuálními stroji. Nefungují nad hypervizorem (až na výjimky), ale přímo nad jádrem operačního systému. Čili ano, můžeme říci, že jsou „lehčí“ než virtuální stroje, nicméně to nevystihuje jejich podstatu. Jejich velké plus sice opravdu spočívá v tom, že se startují velmi rychle a ke svému chodu využívají paměť a CPU tak, jak je skutečně potřeba, čímž umožňují podniku lépe optimalizovat zdroje. Ale klíčovou výhodou je jejich velmi dobrý mechanismus pro izolování softwaru od jeho základního prostředí a od ostatních kontejnerů. Vývojáři tak mohou zabalit své aplikace s požadovanými závislostmi a knihovnami, takže specialisté zodpovědní za provoz systémů je mohou beze změn nasadit v různých prostředních – vytvoří kontejner, kde je podstatné, jak se chová navenek, ale není vidět dovnitř.
Dovolte mi ještě porovnat virtuální stroje a kontejnery v tom, jaký vliv měly na jednotlivé IT týmy. Podíváme-li se trochu blíže, zjistíme, že nasazování virtuálních strojů ovlivnilo především způsob práce specialistů zodpovědných za provoz. Museli se totiž naučit jejich správu, vytváření snapshotů a novému způsobu migrace dat. Hlavním předmětem zájmu se stal virtuální stroj, nikoli fyzický server. Pro vývojáře aplikací virtuální stroje příliš velkou změnu nepředstavovaly – server jako server. Avšak přechod ke kontejnerizovaným workloadům, stejně jako později jejich nasazování v nástroji Kubernetes ovlivnilo jak vývojáře, tak správce. Kontejnery totiž mění způsob, jakým jsou aplikace navrhovány a psány, stejně tak, jako ovlivňují to, jakým způsobem jsou spravovány a monitorovány.
Proč si vývojáři oblíbili Kubernetes?
Nové metody vývoje softwaru střídají starší přístupy a vývojáři zjistili, že vhodnou cestou, jak zjistit, které nápady patří mezi ty nejlepší, je nechat je vyzkoušet přímo zákazníky a to co nejdříve. Maximalizace počtu iterací, rychlost, nebo časové rozpětí mezi tím, kdy vývojář napíše řádek kódu a kdy jej můžeme vyzkoušet, má obrovský přínos. Tak se zrodil agilní vývoj. Zároveň se zjistilo, že tento přístup funguje nejlépe na relativně malých ohraničených funkčních celcích, z nichž se poté skládá celá aplikace. To dalo vzniku koncepci mikroslužeb, které však nebylo efektivní provozovat ve virtuálních strojích kvůli značné režii. A právě zde se nachází důvod, proč si mnoho vývojářů oblíbilo kontejnery a jejich nadstavby pro řízení a správu, jako je Docker a Kubernetes. Přidání menších komponent v kontejnerech zabere několik sekund, zatímco podobná akce může u virtuálního stroje trvat 10 až 15 minut. Testování malých celků je relativně snadné a přehledné. Popis pro sestavení kontejneru je součástí kódu mikroslužby, je součástí každého testu – mnohem méně překvapení při nasazení do produkce.
Kubernetes představuje zajímavé řešení, jak snadněji přidat změnu do již nasazené aplikace, pomáhá řešit škálovatelnost, redundanci, dostupnost a životní cyklus mikroslužeb a vytvořit tak efektivní elastické a odolné aplikace. Popularita nástroje Kubernetes je stále větší díky možnosti zvýšení produktivity vývojářů. Avšak stále existují výzvy, se kterými se organizace potýkají.
Příště
Kubernetes ale sám o sobě k provozu aplikací nestačí a hladké propojení kontejnerizovaných aplikací s „tradičním světem“ nezajistí. Obvykle potřebujeme zajistit i například pokročilý loadbalancing, persistenci dat, správu rozhraní API, monitoring či správu samotného Kubernetes clusteru. Tyto oblasti ale dokážou elegantně vyřešit dodatečné nástroje. V příštím díle se proto budu zabývat výzvami, které organizace v souvislosti s nasazováním nástroje Kubernetes potkávají a jak na ně reagují moderní řešení.
Martin Diviš
Autor článku je systémový inženýr společnosti Cisco