Linux E X P R E S

Facebook

Ansible – z fikcie do reality

Ansible

Na rozdiel od sci-fi Ansible síce neudržiava kontinuálne spojenie medzi hviezdnymi kolóniami, ale „iba“ medzi strojmi po celej Zemi. Ani to však nebolo v čase vzniku tohto pojmu samozrejmé. Dnes sa už za štandard považuje automatizácia a orchestrácia tisícov serverov jediným tímom. Prečo teda nie pomocou Ansible?


Spomedzi všetkých open-source automatizačných a orchestračných nástrojov sa práve Ansible stal oficiálne členom rodiny produktov firmy RedHat. Komerčné dôvody spôsobili rozštiepenie projektu na viac prúdov, z ktorých je voľne dostupná práve tu rozoberaná „community“ verzia. Napríklad Ansible engine disponuje podporou výrobcu i funkciami navyše, zatiaľ čo Ansible Tower je kompletný produkt s GUI a mnohými enterprise vlastnosťami navyše, vrátane prepracovanej databázy. Posledne spomínané verzie si však môžete vyskúšať vo forme dema.

Vzhľadom ku komplexnosti aplikácie a rozsahu článku určite nebude možné podať detailný popis jeho vlastností. Budem však uvádzať aspoň základné linky pre prípadných záujemcov.

Komunitná verzia Ansible je dostupná v repozitároch pre jednotlivé distribúcie (napr. pre RH family je to v epel). Inštalácia je teda štandardná, vrátane využitia pythonovského Pip. Poinštalačná konfigurácia spočíva v prípadnej úprave konfiguračných súborov. Dokumentácia je vynikajúco spracovaná, všetko potrebné na prácu nájdeme v User Guide. Ansible nám stačí inštalovať len na jednom stroji, tzv. Control Serveri, čo je väčšinou Linux (ee, na Windows nie) :). Z tohto stroja potom dokážeme manažovať aj iné OS, vrátane BSD, SunOS a Windows.

Prvým krokom po inštalácii a nastavení je vytvorenie inventára. Ten bude obsahovať zoznam strojov (používajú sa rôzne formáty), ktoré chceme spravovať. A to si píšte, že nemusí byť len statický :). Dynamický, ako už názov naznačuje, sa vytvára pomocou skriptov pre rôzne externé systémy, ako je cobbler, AWS, OpenStack, BSD Jails, OpenShift atď. Skripty pre tie spomínané sú dostupné v git repozitári. V inventári si stroje môžeme zadeliť podľa vlastných kritérií, pričom sa dajú dosiahnuť veľmi zložité variácie. Na servre musíme samozrejme mať sieťové spojenie aj platné prihlasovacie údaje. Ansible predpokladá používanie OpenSSH, SFTP aj SSH kľúčov, to sa však dá prispôsobiť.

Ak teda máme zoznamy hotové, poďme s našimi strojmi niečo spraviť. Najjednoduchšie je používať na správu systémov AdHoc príkazy. Sú v podstate rovnaké, aké používame zvyčajne, ale tu pridávame niečo navyše:

# ansible weby -a "/usr/bin/who" -u username --become --become-user otheruser [--ask-become-pass]

Takto spustíme príkaz who na všetkých serveroch v skupine weby pod iným používateľom s vyžiadaním si hesla. Príkaz:

# ansible weby -a "/usr/bin/who" -f 10

spustí who pod aktuálnym userom, a to po dávkach v skupine weby na 10 strojoch naraz. Defaultne sú nastavené forky na 5. Pracovať môžeme i so vzormi (patterns). Dôležitým parametrom je aj -m:

# ansible weby -m shell -a 'echo $TERM'

-m spustí modul shell, ktorý používa kompletný shell-like syntax. Bez tohto modulu nemôžeme pracovať s pipes, premennými prostredia atď.

Moduly sú doslova srdcom Ansible. Ich zoznam je rozsiahly a len ilustruje komplexnosť aplikácie. Pomocou nich je možné kopírovať súbory, spravovať FS, LVM, storage, sieťové nastavenia, služby, user management, provisioning atď. Ak nám náhodou niečo chýba, stačí si to naprogramovať a doplniť. Každý z modulov je naozaj dobre zdokumentovaný aj s príkladmi použitia.

Predstavili sme si už moduly, inventáre a aj AdHoc príkazy. Ak si to všetko pospájame, dostaneme do rúk neskutočne silný nástroj a pri tom základný prvok Ansible: playbook.

Ide v podstate o súbory vo formáte YAML. Sú teda citlivé na syntax, ale to zvládneme skontrolovať napríklad takto:

# ansible playbook first.yml --syntax-check

Celá tematika playbooku je v dokumentácii detailne vysvetlená. Navyše máme k dispozícii aj konkrétne príklady. My si tiež jeden jednoduchý na ilustráciu sami vytvoríme. Napríklad:

Obrázok 1: Príklad jednoduchého Playbooku Obrázok 1: Príklad jednoduchého Playbooku

Ako prvé si zadefinujeme, na akých serveroch sa playbook bude spúšťať; tu sú to stroje zaradené v skupine salt v našom inventári. Na ne sa potom aplikujú stanovené úlohy, pričom každá z nich je jednoznačne určená menom.

V prvej z nich Ansible skontroluje, či je na strojoch nainštalovaný balíček mc a gnome-utils. Ak nie je, doplní ho pomocou modulu yum. Následne necháme upgradovať všetky balíčky (name: ‘*‘), teda celý OS. Na záver servre už len reštartujeme.

Obrázok 2: Beh Playbooku ukončený Obrázok 2: Beh Playbooku ukončený

Ďalším často používaným prvkom programu je rola. Pod rolou rozumieme všetky časti programu a konfigurácie, ktoré potrebujeme na splnenie nejakej často sa opakujúcej úlohy. Zvyčajne to býva niekoľko playbookov, šablón (templates), premenných (variables), zoznam závislostí a pod. Rola samotná má stanovenú štruktúru podadresárov, kde sa spomínané dáta umiestnia. Na stránke projektu ansible galaxy nájdeme tisíce rolí, roztriedených, pripravených na použitie.

Ako vidno, z takýchto základných či jednoduchých úloh dokážeme vytvoriť playbook a role, vykonávajúce tie najkomplexnejšie systémové operácie. Aj keď v príkladoch na použitie rolí nájdeme naozaj zložité akcie, väčšinou sú len rozšírením základných inštrukcií.

V súvislosti s rolami spomeňme ešte aj nástroje v CLI, ktorými Ansible disponuje. Napríklad už spomínaný príkaz ansible-galaxy umožňuje stiahnuť rolu zo stránky projektu Galaxy, vytvoriť novú a pod. Z ostatných skúsme napr. ansible-console, ansible-pull či kryptujúcu utilitku ansible-vault.

Ansible je bez debaty špičkový projekt, a to i v komunitnej verzii. Jeho hlavnou devízou je veľmi dobrá škálovateľnosť, možnosti orchestrácie, automatizácie a podpora komunity. Hoci v porovnaní s komerčnými aplikáciami niektoré vlastnosti chýbajú (napr. role based-access control), tieto si však záujemcovia nájdu v platených verziách. Osobne si cením najmä to, že Ansible nepotrebuje na spravovaných serveroch inštalovať agentov. A už len to je veľké plus.

Diskuze (4) Nahoru