Hlavní navigace

Konfigurační a orchestrační nástroj Ansible: úvod

David Karban 27. 8. 2013

Počet serverů stále roste, díky virtualizaci není neobvyklé mít na několika fyzických serverech i desítky nezávislých systémů. Taková množství už není možné spravovat ručně, proto vznikly různé automatizační nástroje. Ansible je jedním z nich. Čím se liší od ostatních a co vám může jako adminům přinést?

Pravděpodobně už jste slyšeli o nástroji Puppet nebo Chef. Když se s nimi naučíte pracovat, ulehčíte si práci, kdykoliv potřebujete na servery cokoliv překonfigurovat, nainstalovat, apod. V principu oba fungují stejně. Na každém serveru vám běží agent, plus máte jeden master server, kde je uložená konfigurace. Agent si konfiguraci jednou za čas ověří a pokud pro něj nastala změna, tak ji aplikuje. 

Tenhle přístup je skvělý na údržbu a instalace nového software. Problém je, pokud potřebujete na serverech provést nějakou ad-hoc akci. V tom vám Puppet ani Chef nepomůžou. Například postupný deploy nové verze aplikace na několik webových serverů tak, aby nedošlo k výpadku služby. Na deploy se pak používají další aplikace. To vede k tomu, že konfiguraci serverů máte nejméně ve dvou systémech. Ansible spojuje oba světy, umožňuje jak údržbu konfigurace, tak deploy aplikací.

Ansible staví na následujících principech:

  • běh bez agentů – nastavení a deploy se provádí pomocí (masově paralelizovaného) SSH
  • pro update konfigurace se používá push, ne pull
  • snadno čitelná konfigurace (yaml soubory)
  • snadné psaní nových modulů

Jedná se o příjemný minimalismus, na serverech nepotřebujete mít další běžící službu, přístup umožňuje SSH, které se také postará o zabezpečení komunikace. Ansible podporuje sudo, takže není nutné se připojovat jako root uživatel. Není potřeba mít nainstalovaný ruby stack, pokud nepracujete s ruby.

Instalace a základní konfigurace

V článcích budu používat aktuální verzi 1.2, kterou je možné přímo nainstalovat z EPEL repositáře. K dispozici jsou i balíčky pro další distribuce i PPA pro Ubuntu. Uživatele distribucí, pro které nejsou zkompilované balíky, určitě potěší, že tvůrci Ansible dělají vše pro to, aby byla instalace jednoduchá. Například u Debianu stačí v adresáři se zdrojovými soubory dát make debian, který pro vás vytvoří .deb balíček. Možnosti instalace najdete na stránkách ansible.

Instalace je za námi, teď vytvoříme seznam serverů. Do souboru /etc/ansible/hosts napište své servery, na každý řádek jeden server. Uveďte DNS název, nebo IP adresu. Nejjednodušší seznam může vypadat například takto (IP adresy mám v  /etc/hosts):

mujnotebook
prvniserver.cz
druhyserver.cz
tretiserver.cz

Pro případ nestandardních konfigurací můžete dodat další parametry. Například Ansible spouštím ze svého notebooku, kde není potřeba se připojovat přes ssh, proto doplním ansible_connection=local. Pokud bychom se na servery nechtěli připojovat jako root (což není konec konců špatný nápad), je možné Ansible říci, jakého uživatele má použít, dá se nastavit i nestandardní ssh port. Servery si také můžeme rozdělit do skupin:

mujnotebook ansible_connection=local
[webservers]
prvniserver.cz ansible_ssh_user=ansible ansible_ssh_port=5001
druhyserver.cz ansible_ssh_user=ansible
[mysqlservers]
tretiserver.cz ansible_ssh_user=ansible

Ad-hoc příklady

Nyní už můžeme posílat příkazy, například si můžeme zkontrolovat spojení se servery pomocí  ansible all -m ping.

~#ansible all -m ping
mujnotebook | success >> {
    "changed": false,
    "ping": "pong"
}

prvniserver.cz | success >> {
    "changed": false,
    "ping": "pong"
}

druhyserver.cz | success >> {
    "changed": false,
    "ping": "pong"
}

tretiserver.cz | success >> {
    "changed": false,
    "ping": "pong"
}

Ping je modul Ansible, který po úspěšném připojení na server odpoví „pong“. Moduly najdete v /usr/share/ansible, je jich široká škála od nastavování ssh klíčů a povolení pro selinux, přes nastavení downtime pro servery v Nagiosu, až po správu cloudových instancí na Amazonu a Rackspace. Můžeme taky spustit konkrétní příkaz, například zjistit, jaká máme na serverech jádra:

~#ansible all -a "uname -r"
mujnotebook | success | rc=0 >>
3.2.0-35-generic

prvniserver.cz | success | rc=0 >>
2.6.32-042stab076.5

druhyserver.cz| success | rc=0 >>
2.6.32-042stab076.5

tretiserver.cz | success | rc=0 >>
2.6.32-358.6.1.el6.x86_64

Zkopírujeme na servery resolv.conf, který máme připraven v  /etc/ansible/resolv.conf:

~#ansible webservers:mysqlservers -m copy -a "src=/etc/ansible/resolv.conf dest=/etc/resolv.conf mode=644 owner=root group=root"
druhyserver.cz | success >> {
    "changed": false,
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/etc/resolv.conf",
    "size": 172,
    "state": "file",
    "uid": 0
}

prvniserver.cz | success >> {
    "changed": false,
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/etc/resolv.conf",
    "size": 172,
    "state": "file",
    "uid": 0
}

tretiserver.cz | success >> {
    "changed": false,
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "root",
    "path": "/etc/resolv.conf",
    "size": 172,
    "state": "file",
    "uid": 0
}

Vidíme, že se servery dělají paralelně, pořadí ve výpisu je dáno rychlostí zpracování požadavku. Pokud uživatel Ansible potřebuje pro práci zadání hesla, musíte zadat parametr --ask-sudo-pass ( -K). Můžete se také přepnout na jiného uživatelem než root, s pomocí parametru --sudo-user ( -U).

Závěrem

V tomto článku jsme viděli základní mechanismy toho, jak Ansible funguje a ukázali jsme si několik základních operací. Příště popíšu, jak vytvořit konfiguraci pro jednotlivé servery, včetně využití informací o systému, použití templatů a zmíním koncept rolí, který umožňuje dekompozici konfigurace na menší logické celky.

Našli jste v článku chybu?

29. 8. 2013 0:21

A kdyz budou dva uzivatele venca a franta, oba s uid=0, tak jako nebudou mit oddelenou historii shellu a nebudou zalogovana jejich prihlaseni?

31. 8. 2013 16:20

bwbw (neregistrovaný)

ano a nepodporuje vsetky platformy, co potrebujem (chyba mi tam aix a hpux).

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Manželka je bio, ale na sex moc není

Manželka je bio, ale na sex moc není

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Vitalia.cz: Drahé i levné. Tyhle potraviny nosili na charitu

Drahé i levné. Tyhle potraviny nosili na charitu

Měšec.cz: Přejete si číslo účtu na přání?

Přejete si číslo účtu na přání?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

Vitalia.cz: Co pomáhá dítěti při zácpě?

Co pomáhá dítěti při zácpě?