1. Báza znalostí
  2. Cloud a servery
  3. Nástroje
  4. Ansible
  5. Ansible – 1. História, základný koncept, inštalácia a prvé spustenie

Ansible – 1. História, základný koncept, inštalácia a prvé spustenie

Ak spravujete server(y), alebo vlastníte viacero počítačov, rozhodne by ste mali vedieť o automatizačnom nástroji s otvoreným zdrojovým kódom Ansible. Stačí raz napísať jeden konfiguračný súbor vo formáte YAML a Ansible sa postará o nastavenie či inštaláciu softvéru z jedného počítača na množstve počítačov s operačným systémom Linux, macOS alebo Windows.

História projektu

Názov Ansible pochádza z vedecko-fantastického románu “Rocannon’s World”, ktorý napísala americká spisovateľka Ursula Kroeber Le Guinová. Termínom Ansible sa v knihe označuje fiktívny systém určený na okamžitú komunikáciu. V roku 2012 sa vývojár Michael DeHaan rozhodol použiť tento názov, aby mohol vydať prvú verziu nástroja Ansible. O rok neskôr založil organizáciu Ansible, Inc. slúžiacu na komerčnú podporu vývoja a spoločnosť Red Hat, Inc. v roku 2015 Ansible kúpila.

Ansible je oficiálne používaný na linuxových distribúciách podporovaných alebo vlastnených spoločnosťou Red Hat, Inc., a tiež na väčšine ostatných linuxových distribúciách, macOS a Windowse (od verzie 1.7).

Logo automatizačného nástroja Ansible

Ako Ansible funguje

Automatizačný nástroj Ansible funguje bez spúšťania služieb, démonov či databáz na pozadí (agentless). Vyžaduje iba možnosť komunikovať cez SSH (alebo WS-Management protocol pre Windows) a jazyk Python, vďaka ktorému prebieha automatizácia.

Ansible sa inštaluje iba na počítači, z ktorého automatizujeme ostatné počítače (control node). Aktuálna stabilná verzia (v čase písania tohto návodu ide o verziu core 2.11.6) vyžaduje na control node Python 3.8 a novší, pričom ako control node je možné použiť operačné systémy Linux a macOS (nie Windows).

Počítače, ktoré automatizujeme z control node, sa nazývajú managed nodes. Na tieto počítače nie je potrebné Ansible inštalovať. Managed node vyžaduje iba prítomnosť jazyka Python 3.8 a novší, pričom komunikácia medzi control node a managed node prebieha cez protokol SSH (SFTP, prípadne SCP) alebo cez protokol WS-Management protocol pre Windows (využíva sa PowerShell).

Nastavenia Ansible ukladá do súboru s názvom ansible.cfg vo formáte INI. Pre potreby tohto návodu budeme konfiguračný súbor ukladať vždy do priečinka, z ktorého budeme spúšťať moduly v úlohách z Playbooku. Jedno z nastavení je cesta k súboru, ktorý obsahuje zoznam adries managed nodes – Inventory. Tento súbor môže byť vo formáte INI alebo YAML.

Aby sme z control node mohli orchestrovať managed nodes, musíme najskôr napísať úlohy (tasks), podľa ktorých bude Ansible spúšťať moduly (modules). Pomocou modulov nastavujeme a inštalujeme softvér na všetkých zvolených managed nodes. Sada úloh sa nazýva Playbook. Syntax Playbooku píšeme vo formáte YAML, ktorý sa ľuďom ľahko píše a číta, preto sa často používa aj v iných populárnych nástrojoch (napr. Kubernetes či Docker). Údaje spätnej väzby (výstup) Ansible posiela vo formáte JSON.

Ansible funguje s každým serverovým produktom od Websupportu

Výhody nástroja Ansible

Automatizačný nástroj Ansible nastavuje infraštruktúru procesom infraštruktúra ako kód (Infrastructure as Code, IaC), čo zabezpečuje vždy rovnaké prostredie pre všetky zúčastnené strany (DevOps). Konfiguráciu Ansible aplikuje metódou push, takže riadiaci server sám odosiela konfiguráciu na cieľový systém. Typ prístupu Ansible používa deklaratívny (zameriava sa na to, čo mám byť výsledkom konfigurácie) ale aj imperatívny (zameriava sa na to, ako je potrebné infraštruktúru zmeniť, aby spĺňala požiadavky).

Z vyššie uvedeného vyplývajú tieto výhody nástroja Ansible:

  1. Nenáročná sieťová komunikácia – keďže Ansible používa metódu aplikovania konfigurácie push, komunikuje s cieľovým systémom iba vtedy, keď aplikuje konfiguráciu. Neustála komunikácia medzi serverom a klientom (ako napr. pri Kubernetes) teda neprebieha, čím sa minimalizuje záťaž siete a sieťových zariadení.
  2. Minimálne softvérové nároky – Ansible sa inštaluje iba na riadiacom systéme (control node) a na cieľových systémoch (managed nodes) sa využíva už prítomný softvér (Python alebo PowerShell). V praxi teda na managed nodes nie je potrebné nič inštalovať.
  3. Vstavané moduly – Ansible je možné použiť na spustenie príkazov, ktorým rozumie iba cieľový systém (napr. v prostrediach ako Bash alebo PowerShell), ale jeho sila sa prejaví až pri použití vstavaných modulov. Vďaka nim môžeme jediným príkazom napr. nainštalovať požadovaný softvér na ľubovoľnom podporovanom cieľovom systéme.
  4. Jednoducho čitateľná syntax – formát textového súboru YAML je ľahko čitateľný, upraviteľný a naučiteľný. Spĺňa tak jednu zo zásad Ansible, že na orchestráciu cieľových systémov by nemalo byť potrebné ovládať skriptovací či programovací jazyk.
  5. Rýchla automatizácia – vďaka nástroju Ansible stačí napísať alebo stiahnuť jeden Playbook (textový súbor vo formáte YAML) a zmeny v ňom zachytené môžeme nechať aplikovať až na tisíckach cieľových systémoch jediným príkazom z riadiaceho systému.

Inštalácia a prvé spustenie

Ako riadiaci systém (control node) budeme používať Ubuntu 20.04 LTS (Focal Fossa) a rovnaká distribúcia bude bežať aj na cieľových systémoch (managed nodes). Na všetkých systémoch je predinštalovaný Python 3.8, čím sú splnené softvérové nároky nástroja Ansible.

Najnovšiu verziu nástroja Ansible získame doinštalovaním balíka software-properties-common pridaním Personal Package Archive (PPA) ansible/ansible a následnou inštaláciou:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Overíme verziu nainštalovaného nástroja Ansible:

ansible --version

Aby sme zistili, či pripojenie k managed nodes funguje, spustíme tento príkaz:

ansible all -i "10.1.1.5,10.1.1.9," -u tibor -k -m ping

Pomocou možnosti all určujeme, aby Ansible komunikoval so všetkými managed nodes, ktoré nasledujú za prepínačom -i (ako inventory). IP adresy vašich managed nodes (tu "10.1.1.5,10.1.1.9,") sa pravdepodobne budú líšiť. Nezabudnite na čiarku za poslednou IP adresou. Prepínačom -u zadávame meno používateľa, pod ktorým sa Ansible pripojí na jednotlivé managed nodes cez SSH. Prepínač -k zabezpečí, že Ansible bude vyžadovať zadanie hesla, vďaka ktorému sa pripojení na managed nodes cez SSH. A nakoniec prepínač -m pošle modul (predpripravenú sadu príkazov – tu ping), ktorý sa má vykonať na všetkých managed nodes.

Ide o základný ad-hoc príkaz, ktorý v prípade úspešného pripojenia vráti krátku informáciu zeleným písmom vo formáte JSON. Hneď na začiatku môže byť však prínosné, ak si o managed nodes zistíme čo najviac informácií. Použijeme na to modul gather_facts:

ansible all -i "10.1.1.5,10.1.1.9," -u tibor -k -m gather_facts

Po úspešnom vykonaní modulu gather_facts sa nám v porovnaní s modulom ping vráti výrazne väčšie množstvo informácií o managed nodes. Vo výstupe sa dozvieme podrobné informácie o samotnom operačnom systéme, o zariadeniach, o sieti, o nainštalovanom jazyku Python, a tiež o ďalšom softvérovom vybavení a jeho nastavení.

Skutočná sila automatizačného nástroja Ansible sa však prejaví až vtedy, keď začneme používať externé súbory s nastaveniami, zoznamom adries managed nodes a playbooky. To bude predmetom ďalších častí seriálu.

Zhrnutie

V prvej časti seriálu o automatizačnom nástroji Ansible sme si stručne zhrnuli históriu projektu. Popísali sme tiež základný koncept fungovania, z ktorého vyplývajú určité výhody použitia nástroja Ansible. Po vymenovaní a krátkom priblížení výhod sme sa sústredili na inštaláciu nástroja Ansible. Nakoniec sme si ukázali, ako overiť pripojenie k cieľovým systémom (managed nodes) z riadiaceho servera (control node) a získať zároveň podrobné informácie o managed nodes.

Aktualizované 22. marca 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu