3x open source orchestrace kontejnerů s Azure Container Service

 

Kontejnery, open source a Azure? To jde perfektně dohromady. Za asi deset minut můžete mít produkční spolehlivý cluster postavený na orchestrátoru dle vaší volby - Docker Swarm, Kubernetes nebo DC/OS (Mesos).

Docker bez orchestrátoru

Vývojáři mají rádi kontejnery, protože jim umožní na běžném notebooku provozovat obrovské množství virtuálních prostředí. Zkoušet kód přímo v notebooku je těžké, protože různé projekty potřebují třeba různé verze knihoven, frameworků a tak podobně. Navíc co když potřebujete spustit víc aplikací současně? Docker tohle všechno řeší velmi elegantně.

Další využívají Docker jako způsob pro distribuci aplikace. Místo PDF s release notes (což přináší hodně ručních instalací), instalačního balíčku (což klade nároky na přípravu instalátoru a pokud se neinstaluje "do čistého", tak to nemusí dopadnou dobře) nebo hotové VM image (to je moc velké a špatně se s tím manipuluje) může vývojář zabalit aplikaci a všechno co ta potřebuje do kontejneru. Viděl jsem situace, kdy lidé provozují Docker čistě na jednom nodu jako způsob jak jednoduše spustit aplikaci.

Přidejte k tomu výborné API, možnost automatizovat vznik image (dockerfile), síťovou konektivitu a namapování souborů "z venku" a je jasné, že pro vývojáře je to velmi příjemné.

Proč orchestrátor kontejnerů?

Pokud se ale rozhodnete kontejnery skutečně provozovat, zjistíte, že samotný Docker nestačí. Nechci ručně zjišťovat hostitele, který má volno a můžu tam spustit kontejner (tedy chci cluster kontejnerů a scheduler). Chci, aby systém poznal, že například selhal node a nastartoval kontejnery jinde. Hodilo by se mi, aby byla nějak rozumně vyřešena síťařina mezi kontejnery. Rád bych ovládal systém desired state principem, tedy například řekl, že kontejner chci v clusteru pětkrát a orchestrátor to zajistil a udržoval. Kromě toho, aby měl schopnost rolling upgrade (například po update image na novější verzi aplikace je postupně za provozu popřehazoval). Ideálně, aby zajistil balancování provozu na tyto instance kontejnerů. A to stále ještě není všechno. Orchestrátor tedy určitě potřebuji, když myslím nasazení kontejnerů alespoň trochu vážně.

Jaký zvolit? Variant je několik, ale open source svět má v tuto chvíli tři hlavní tahouny.

Docker Swarm

Docker sám se pouští do orchestrace a tou je Swarm. Zásadní výhodou je, že API pro Swarm je prakticky stejné, jako API pro jednoduchý Docker. Celý cluster ovládáte téměř shodně, jako jeden samostatný Docker. Z velké trojky byl Swarm obvykle trochu opožděný, ale dnes už dokáže pokročilé věci jako jsou balancovaná služba a rolling update.

Mesos (resp. Marathon v Mesosphere DC/OS)

Apache Mesos existuje o několik let déle, než Docker (2009 vs. 2013). Mesos je dvouúrovňový scheduler inspirovaný tím, co ve svém DC dělal Google se systémem Borg (nicméně Google za Mesos nikdy nestál a nemá o to zájem, jedním z prvních uživatelů Mesos byl Twitteru, později Airbnb a Apple). První úroveň přiděluje zdroje frameworkům (Big Data, kontejnery, messaging) a druhá úroveň pak řeší scheduling v rámci frameworku (například Marathon, který orchestruje kontejnery). Mesos konverguje víc věcí do jediného systému (orchestrace kontejnerů je tak jen jeho podmnožinou). Je ověřen v obrovských instalacích, má vysokou spolehlivost.

Kubernetes

Google vnitřně používá vlastní systém Borg, který je v zásadě ideovým základem i Mesos. Nicméně co se kontejnerů týče Google některé své pozitivní a negativní zkušenosti sebral jako vstup do open source projektu Kubernetes. To je kontejnerový scheduler/orchestrátor. Netuším jak to používají vnitřně, ale technicky je možné, aby byl Kubernetes druhou úrovní schedulingu v rámci Borgu (ostatně to lze i s Mesos - teoreticky můžete Marathon nebo Aurora v Mesos nahradit Kubernetesem). Kubernetes má specifické API (nesedne každému), koncept podů (shluků kontejnerů) a IP per pod (to se ukazuje jako velmi užitečné). Tenhle projekt je dnes asi nejbouřlivější, velmi populární a co do funkcí často v čele.

Co používá Azure Container Service

Sestavit takový cluster nemusí být jednoduché co do instalace a zejména síťařiny, perzistence storage apod. Získat cluster na kliknutí by se hodilo. Některé public cloudy jdou cestou jedné varianty bez možnosti výběru, ale Azure plně podporuje, spravuje a provisionuje hnedka všechny tři. Je na vás, co si vyberete - každý má své výhody, tak proč si omezovat možnosti.

Jak vypadá Azure Container Service

Nejprve si určíme uživatelské jméno a SSH klíč pro přístup k VM, které v rámci clusteru kontejnerových hostitelů budeme používat.

To hlavní přichází hned na další obrazovce - vyberte si orchestrátor. Docker Swarm? Mesosphere DC/OS? Kubernetes? To všechno je jen otázkou, na co kliknete - jednodušší to být snad nemůže. V případě Kubernetes tady ještě navíc bude volba principála, tedy vytvořeného Azure účtu - Kubernetes si totiž dokáže s Azure povídat a automaticky nastavovat (z jeho pohledu  externí) Azure Load Balancer (o tom jindy).

V dalším kroku určíme, kolik a jakých zdrojů chceme v clusteru mít. Tedy kolik řídících, chcete-li master VM. U nich si typicky volíte z počtů 1, 3 nebo 5 a velikost VM je pevně daná (Azure tým to má odladěné, otestované a podporované a z těchto důvodů potřebuje přesně dané zdroje). K tomu vybíráte počet agentů, tedy nodů, na kterých pak běží kontejnerové workloady. U nich už si vybíráte velikost VM, takže můžete při stejném budgetu volit třeba vícero malých hostitelů nebo menší počet větších - to je na vás.

Pak už jen všechno odklikáme a čekáme. Co pro nás ACS vytvořil za zdroje? V mém případě jde o 21 položek - storage accounty, VM s mastery a agenty, balancery pro mastery a agenty, externí IP adresa apod. Kromě toho Azure nastaví všechno potřebné ve VMkách - spojí mastery, nastaví klíče, přidá agenty a v některých případech napojí do orchestrátorů například Azure Load Balancer (orchestrátor kontejneru může ovládat Azure balancer). Tyto všechny znalosti Azure týmu máte k dispozici na kliknutí a to v zásadě zdarma (v ACS platíte jen za použité infrastrukturní zdroje, ne za automatizaci sestavení celého clusteru).

V dalších článcích už se zaměřím postupně na všechny orchestrátory a trochu si pohrajeme.

 

Chcete objevovat kontejnery? Neztrácejte čas trápením se instalací a sestavováním clusteru, síťařinou apod. Soustřeďte se na to, jak vám pomůžou kontejnery zrychlit vývoj, testování a nasazování aplikací. Použijte Azure Container Service a máte cluster za 10 minut. Večer už ho nepotřebujete? Stačí smazat a neplatíte, sestavíte si ho zase až ráno. Projekt se podařil o potřebujete rozšířit počet agentů? Žádný problém, stačí kliknout. Chcete dnes zkusit Swarm, zítra Kubernetes a pozítří DC/OS? Však víte, kam s tím směřuji...

 



Kubernetes prakticky: síťová bezpečnost s Network Policy Kontejnery Kubernetes
Kubernetes prakticky: vystavování služeb přes objekt Service Kontejnery Kubernetes
Kubernetes prakticky: nasazování Java aplikací Kontejnery Kubernetes
Kubernetes prakticky: backup a DR s Heptio Ark Kontejnery Kubernetes
Azure Kubernetes Service bez mašin aneb virtuální nody Kubernetes Kontejnery