Automatizační nástroj Ansible: Lepidlo heterogenní infrastruktury Coinmate.io

Profinit už pátým rokem vyvíjí úspěšnou burzu kryptoměn Coinmate.io, která patří v prostoru střední Evropy k lídrům trhu. Projekt začal v roce 2013 velmi skromně, ale postupem času se z něj stal v rámci Profinitu jeden z nejprogresivnějším projektů. Pro zákazníka zajišťujeme nejen návrh a vývoj softwaru, ale také se staráme o produkční infrastrukturu, která zajišťuje provoz burzy. Po malých krocích se infrastruktura rozrostla do rozměrů, kdy bylo nutné začít řešit automatizaci a s ní spojenou striktní dokumentaci.

V současné době všechna prostředí obsluhuje téměř třicet serverů, které jsou rozmístěné v rámci Amazon Web Services, interní sítě Profinitu a nebo dalších externích dodavatelů. Včetně produkčního prostředí se staráme o celkem čtyři další prostředí, kde u každého řešíme specifické požadavky a vypořádáváme se s odlišnostmi danými poskytovatelem fyzické infrastruktury. Coinmate také používá širokou škálu softwaru. Od základních technologií jako je Tomcat a nebo databáze Oracle se můžeme přes reverzní proxy Nginx, databázi PostgreSQL a nebo Graylog dostat až k peněženkám jednotlivých kryptoměn, se kterými burza obchoduje. Aby toho nebylo málo – i na našem projektu si svoje místo na slunci získaly kontejnery, ve kterých běží, mimo části z výše jmenovaného, i další podpůrné služby pro burzu.

Nezanedbatelný rozsah infrastruktury spojený s její různorodostí nás postavil před úkol, jak učinit správu takových systémů udržitelnou, opakovatelnou a dokumentovatelnou. Po prvotní analýze dostupných možností, na našem projektu vyhrál nástroj Ansible, který splnil všechny naše požadavky, mezi něž patřila zejména široká škála podporovaných technologií, žádní agenti na cílových serverech a lidsky čitelná dokumentace infrastruktury a konfigurace nástroje v jednom.

Ansible se konfiguruje pomocí takzvaných playbooků, které prostřednictvím značkovacího jazyka YAML definují cílový stav konfigurovaného systému. Velkou výhodou YAMLu je jeho lidská čitelnost, kdy v drtivé většině případů playbooky mohou sloužit, a u nás také slouží, jako dokumentace infrastruktury. Ve spojení s Gitem se všechny, původně chaotické či adhoc, procesy okolo správy a rozvoje infrastruktury velmi přibližují procesům používaným při vývoji softwaru.

Součástí konfigurace Ansiblu nejsou pouze playbooky, ale také inventář serverů a proměnných, které jsou přiřazené ke konkrétním systémům anebo jejich skupinám. Samotné playbooky se seskupují do takzvaných rolí, což je ucelená kolekce úloh, proměnných, souborů, šablon a dalšího. Jako typickou roli si lze představit například roli s názvem Nginx, která v sobě obsahuje playbooky definující instalaci a konfiguraci reverzní proxy Nginx. Její součástí jsou rovněž šablony konfiguračních souborů, výchozí proměnné anebo vlastní moduly Nginxu. Taková role je potom univerzální a po jejímu přiřazení konkrétnímu serveru se zkonfiguruje pomocí proměnných z inventáře.

Rolí jako je ta popsaná v předchozím odstavci máme více než deset. Za zmínku stojí role, která se používá pro nasazení nové verze samotné aplikace burzy. Celý proces je rozprostřený přes několik serverů a obsahuje přes dvacet kroků, mezi něž patří mimo nasazení samotné aplikace i databázové úpravy, publikace statického obsahu anebo úpravy konfiguračních souborů. Díky použití Ansiblu jsme minimalizovali riziko problémů při nasazení a samotný proces nyní trvá místo obvyklé půl hodiny méně než minutu. Tato role se dá použít i pro nasazení na zelené louce a plní tak i úlohu disaster recovery a dokumentace.

Druhou rolí, která stojí za zmínku, je role pro nasazování Docker kontejnerů. V současné době na našem projektu nejsou kontejnery použity v takovém měřítku, aby mělo smysl pro ně stavět dedikovaná prostředí ve formě clusterů. Všechny naše potřeby pro jejich orchestraci tak pokrývá Ansible skrz roli s názvem Container, která je velmi dobře konfigurovatelná, umožňuje nastavit kompletní prostředí pro běh kontejnerů a k němu nadefinovat jaké kontejnery a s jakou konfigurací na něm mají běžet.

Z předchozího textu je patrné, že naše infrastruktura se neustále rozvíjí a posouvá vpřed. Takový posun nicméně není z organizačních, ale ani ekonomických důvodů, možné udělat hned a proto se u nás vyskytují řešení klasická i moderní. Pro skloubení této různorodosti se nástroj jako je Ansible výborně hodí a i když jeho pozice s přechodem ke kontejnerům mírně slábne, stále si drží svoje pevné místo v našich operačních procesech.

Martin Šťastný