Spravujete servery interaktivně po přihlášení?
Je stále mnoho správců serverů, kteří své servery spravují (ovládají, konfigurují apod.) tak, že se na server přihlásí pomocí SSH a udělají tam, co je potřeba – tedy třeba upraví konfigurační soubor, doinstalují balíček, restartují službu atd. Pokud máte jen jeden server (nebo maximálně několik málo), dá se takový postup celkem dobře používat. S větším počtem serverů je to už prakticky „zaručené bolení hlavy“.
Proto na letošním ročníku konference LinuxDays zaznělo hned v několika přednáškách, že je takový postup špatný. Zejména při větším počtu serverů se lze snadno dopustit nějaké chyby, která se obtížně hledá a která současně může mít velmi negativní vliv na provoz serverů. Proto je mnohem výhodnější spravovat servery hromadně, z jednoho centrálního místa.
Této oblasti bylo na LinuxDays věnováno více přednášek, které se týkaly například nástrojů Puppet nebo Foreman (a pro oblast přípravy a testování ještě Vagrant). Zatímco oba zmíněné nástroje jsou vhodné pro větší sítě, pro ty menší se více hodí Ansible.
Ansible se představuje
„Zkoušel jsem Puppet,“ zahájil David Karban svou přednášku, „zkoušel jsem to tři týdny, potil jsem krev, snažil jsem se to naučit, pak jsem za dvě hodiny v Ansible udělal v podstatě to samé a rozhodl jsem se, že jdu pryč od Puppetu.“ Ansible je totiž udělané „minimalisticky“, nepotřebuje žádné agenty na serverech (jako je potřebuje například Puppet), které se před zahájením práce musejí nainstalovat.
David Karban představuje nástroj Ansible
Ansible se na servery, které má ovládat, připojuje pomocí SSH. Umí jak nastavovat servery, tak zajišťovat i provisioning a deployment aplikací. „Máte tedy jeden nástroj, kterým můžete kompletně nastavit webserver, cluster, cokoliv, a zároveň si tam nahrajete aplikaci, příště další verzi, bez problémů, nemusíte používat několik nástrojů,“ říká David Karban.
Výhodou také je, že se lze Ansible velmi jednoduše naučit. Práce s ním je víc popisování (deklarativní přístup) než programování. Ansible je idempotentní, tedy pokud opakovaně spustíte nějakou operaci, výsledek je tentýž, jako kdyby byla spuštěna jen jednou.
Jak se s Ansible spravují servery
Servery lze v Ansible spravovat prostřednictvím statického nebo dynamického inventáře. Ve statickém inventáři lze servery ručně dělit do skupin (i rekurzivně – jedna skupina může obsahovat další skupiny). Dynamický inventář se generuje automaticky podle dat získaných od cloudové služby (AWS, Rackspace, Docker…) a automaticky tvoří skupiny serverů podle různých kritérií.
Základem pro vlastní proces konfigurace serverů je tzv. playbook, což je předpis konfigurace psaný v jazyce YAML. „Ansible má jednu obrovskou výhodu, z mého pohledu, že neřeší závislosti, nýbrž běží shora dolů,“ komentuje Karban způsob práce technologie. „Takže když potřebujete nakonfigurovat webserver, nejdřív nainstalujete Apache, následně tam nahrajete konfiguraci a je hotovo.“
Playbook se skládá z několika plays (her), které vymezují jednotlivé celky úloh, například pro webservery. Tam se specifikuje, co je potřeba si připravit (například jaký uživatel musí být k dispozici), jako role se mají hrát (role je soubor úloh např. pro určitý webserver, databázový systém…) a jaké úlohy – kromě těch, co jsou obsaženy v rolích – se mají vykonat.
Ansible je modulární – pro každý typ úlohy (například operace s balíčkovým systémem, správou verzí, cloudovou službou apod.) se používá příslušný modul, kterých je ve standardní instalaci k dispozici více než 250. Lze si snadno vytvářet vlastní moduly. Ansible je systém řízený daty, takže lze využívat řadu různých druhů proměnných, například podle jednotlivých strojů a jejich skupin, různé „magické“ proměnné atd.
V rámci jednotlivých úloh lze vymezovat, kde (na kterých strojích), kdy (za jakých podmínek) a jak mají běžet. Obecně může úloha skončit třemi stavy, kromě úspěchu a selhání je tu také stav (changed), že došlo k nějakým změnám. „Osobně mám rád, aby těch 'changed' bylo co nejméně, ať vím, že když se 'nic nezměnilo', tak se opravdu nic nezměnilo,“ zdůrazňuje David Karban ohledně praxe psaní úloh.
Ansible také umožňuje používat tzv. handlery, tedy reakce na události. Pokud se například změní konfigurace, může se vyžádat její nové načtení běžícím procesem. Oproti přímému zavolání je výhoda v tom, že pokud se na více místech postupně vyvolá tatáž událost, zareaguje se na ni jen jednou. Konfigurační soubory pro Ansible lze podle potřeby šifrovat (používá se algoritmus AES-256), takže například přístupová hesla nebo obdobné informace nemusejí nikde ležet v otevřeném tvaru.
Co se týká vlastní práce s Ansible, po spuštění se pomocí SSH připojí na jeden či více serverů, a vykoná tam, co je potřeba (co obsahuje playbook a co se specifikovalo v parametrech při spuštění). Lze ho spouštět interaktivně, ale samozřejmě i v dávce.
Kdo po přednášce o Ansible ještě chvíli vydržel (a vyplnil anketu), mohl vyhrát některou z mnoha zajímavých cen
Pro Ansible existuje i grafické rozhraní Ansible Tower, které kromě snadné „klikací“ správy a ovládání Ansible také například generuje grafy. Má i REST API k propojení s jinými systémy. Na rozdíl od open-source Ansible je Ansible Tower proprietární a poměrně drahý software (základní verze Basic v úrovni do 100 spravovaných strojů stojí 5000 dolarů ročně). Existují ale i alternativní aplikace, například Semaphore.
Kdo nemohl navštívit konferenci LinuxDays nebo dal přednost jiné přednášce, může se na přednášku Davida Karbana o Ansible podívat na videu. Máte-li zájem se Ansible rychle naučit, podívejte se také na videotutoriál Ansible za 30 minut od Věroše Kaplana.
Shrnutí
Ansible je jednoduchý a přitom silný nástroj pro hromadnou centrální správu serverů. Lze ho rychle nasadit, bez nutnosti na spravované stroje něco instalovat. Ansible umožňuje připravovat sady úkolů podle rolí a využívat pro práci data různého druhu. Je k dispozici jak oficiální grafické rozhraní, tak i rozhraní alternativní.