V dnešní době spousta společností používá Kubernetes pro orchestraci kontejnerů a říkal jsem si, že by mohlo být zajímavé podívat se na to, co vám přináší kontejnery samotné - tj. ještě předtím než se do všeho vloží právě Kubernetes.
Vsadím se, že jste už slyšeli o Kubernetes. A vsadím se, že si mnoho z vás (stejně jako poprvé já) googlilo, co to přesně znamená a k čemu Kubernetes slouží. “Kubernetes jsou nástroj pro orchestraci kontejnerů.” stojí v definici. No jo, ale co jsou to kontejnery?
Kontejner je logický “balíček”, který obsahuje vše, co aplikace (jakékoliv velikosti) potřebuje k tomu, aby běžela (např. aplikace jako taková, její závislosti, knihovny, konfigurační soubory, atd.)
Ke kontejnerům nás vlastně dostal docela logický evoluční cyklus:
Zhruba v 90. letech bylo běžné používat fyzické servery, na kterých aplikace běžely
S příchodem nového milénia byla vymyšlena virtualizace. Na jednom fyzickém železe šlo konečně rozjet větší množství virtuálních strojů.
A kolem roku 2013 přišly kontejnery. Díky kterým dnes už nevirtualizujeme celé stroje, ale pouze aplikace (spolu se vším, co k běhu potřebují). Kontejnery neobsahují OS image a jsou proto mnohem menší, snáze přenositelné a flexibilnější.
Kontejnery jsou tedy naprosto nezávislé na prostředí, ve kterém běží. Můžete tedy vzít kontejner s vaší aplikací a bez problémů ho rozjet v prostředí AWS, GCP, Azure, ve vašem datovém centru nebo klidně na vašem laptopu. Tato skutečnost s sebou přináší spoustu výhod, protože se vývojáři mohou soustředit hlavně na vývoj aplikací a (v ideálním případě) je jim jedno, kde a jak jejich aplikace poběží.
Jak již bylo zmíněno, obrovská síla kontejnerů tkví v tom, že je můžete spustit kdekoliv. Velmi populární jsou dnes hybridní setupy infrastruktury - to znamená, že část vašich aplikací běží ve vašem soukromém datacentru a část v public cloudu. Momentálně pro toto hybridní řešení neexistuje lepší postup než “kontejnerizovat” vaše aplikace. Google nedávno přišel s nástrojem Anthos, který vám přesně toto umožňuje.áte zde jeden interface pomocí kterého spouštíte kontejnery kdekoliv.
Z kontejnerů budou mít radost i vaše Ops (DevOps) týmy. Nebudou totiž muset řešit, , kde kontejner nasadí. Toto řešení je komfortní i pro samotné developery. Vývojář si totiž kontejner může úplně klidně pouštět u sebe na laptopu (Sandbox).
Kontejnery jsou oproti klasickým virtuálním strojům malé (tedy většinou - je samozřejmé, že pokud do kontejneru zabalím obrovský monolith, bude i kontejner taky velký) a vyžadují mnohem méně zdrojů (paměť, CPU). Z toho plyne, že můžete velmi efektivně využívat vaše fyzické zdroje - na jeden server můžete poskládat kontejnery tak šikovně, abyste dostupné zdroje maximálně využili a měli minimum železa na které se jen práší.
Pokud zmiňuji agilitu a rychlost - mám na mysli dvě věci: agilita a rychlost samotných kontejnerů a zároveň agilita a rychlost lidí, kteří s kontejnery pracují.
Kontejnery jsou štíhlé a tím pádem (lightweight container) se dají velmi rychle nastartovat (či zabít), lze je rychle replikovat (nebo-li horizontálně škálovat) nebo patchovat.
Týmy, které s kontejnery pracují (ať už je vyvíjí nebo je provozují) mohou být nezávislé věnovat méně času debuggingu a opravám.
Všechno to napomáhá rychlejšímu a efektivnějšímu vývoji, rychlejšímu odbavování požadavků businessu, snazšímu provozu aplikací a stabilnější infrastruktuře, která je schopna reagovat na časté změny - ať už změnou myslím časté vydávání nových verzí nebo třeba proměnlivý traffic.
A navíc.. Kontejnery adoptovali velcí globální hráči jako Google, Netflix nebo třeba Twitter - a to už o něčem vypovídá.
Na závěr bych ještě rád poznamenal, že síla kontejnerů roste s:
Možností kontejnery horizontálně škálovat (replikovat je)
Rozdělením infrastruktury na menší celky
Ve výsledku pravděpodobně nezůstanete u jednoho kontejneru a na to už potřebujete řešení, které je bude řídit/orchestrovat. A tím se dostáváme zpět ke Kubernetes, které přesně tuto funkci splňují. Více o Kubernetes se dozvíte v mém předchozím článku zde.