Az Ansible Playbooks használata összetett feladatok automatizálására több távoli szerveren – 2. rész
Az Ansible sorozat előző cikkében kifejtettük, hogy az Ansible egy ügynök nélküli eszköz, amely lehetővé teszi több gép (más néven csomópontok) gyors és hatékony kezelését egyetlen rendszerből.
Miután telepítette a szoftvert a vezérlőgépre, létrehozta a jelszó nélküli bejelentkezés kulcsait, és átmásolta azokat a csomópontokba, ideje megtanulnia, hogyan optimalizálhatja az ilyen távoli rendszerek kezelésének folyamatát az Ansible segítségével.
Ebben a cikkben és a következőben is a következő tesztkörnyezetet fogjuk használni. Minden gazdagép CentOS 7 doboz:
Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30
Ezenkívül vegye figyelembe, hogy mindkét csomópont hozzá lett adva a helyi /etc/ansible/hosts fájl webszerver részéhez:
Ennek ellenére kezdjük a témával.
Az Ansible Playbooks bemutatása
Az előző útmutatóban leírtak szerint az ansible segédprogrammal a következőképpen futtathat parancsokat távoli csomópontokban:
ansible -a "/bin/hostnamectl --static" webservers
A fenti példában a hostnamectl --static
parancsot futtattuk a node1 és node2 pontokon. Nem tart sokáig, amíg az ember rájön, hogy a feladatok távoli számítógépeken történő futtatásának ez a módszere jól működik rövid parancsok esetén, de gyorsan megterhelővé vagy zavaróvá válhat bonyolultabb feladatoknál, amelyek további jól strukturált konfigurációs paramétereket vagy más szolgáltatásokkal való interakciót igényelnek.
Például a WordPress beállítása és konfigurálása több gazdagépen – erről a sorozat következő cikkében fogunk beszélni). Itt lépnek színre a Playbookok.
Egyszerűen fogalmazva, a Playbooks egyszerű szöveges fájlok YAML formátumban írva, és egy listát tartalmaznak egy vagy több kulcs/érték párral (más néven " >hash ” vagy egy „szótár ”).
Minden játékfüzetben talál egy vagy több házigazdát (a csoportok mindegyikét játéknak is nevezik), ahol a kívánt feladatokat el kell végezni.
Egy példa a hivatalos dokumentumokból segít a szemléltetésben:
1. gazdagépek: ez azon gépek listája (az /etc/ansible/hosts szerint), amelyeken a következő feladatokat hajtják végre.
2. távoli_felhasználó: távoli fiók, amelyet a feladatok végrehajtására használunk.
3. vars: a távoli rendszer(ek) viselkedésének módosítására használt változók.
4. a feladatokat sorrendben, egyenként hajtják végre minden olyan gépen, amely megfelel a gazdagépeknek. Egy darabon belül minden házigazda ugyanazt a feladat utasítást kapja.
Ha egy másik társított feladatsort kell végrehajtania egy adott gazdagéphez, hozzon létre egy másik játékot az aktuális Playbook-ban (más szóval, a játék célja, hogy egy adott gazdagépet jól leképezzen. -meghatározott feladatok).
Ebben az esetben kezdjen el egy új játékot úgy, hogy az aljára adja hozzá a hosts direktívát, és kezdje elölről:
---
- hosts: webservers
remote_user: root
vars:
variable1: value1
variable2: value2
remote_user: root
tasks:
- name: description for task1
task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
- name: description for task1
task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
handlers:
- name: description for handler 1
service: name=name_of_service state=service_status
- hosts: dbservers
remote_user: root
vars:
variable1: value1
variable2: value2
…
5. A kezelők olyan műveletek, amelyek minden játékban a feladatok szakasz végén indulnak el, és többnyire szolgáltatások újraindítására vagy újraindítások indítására szolgálnak a távoli rendszerekben.
mkdir /etc/ansible/playbooks
És benne egy apache.yml nevű fájl a következő tartalommal:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: replace default index.html file
copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
Másodszor, hozzon létre egy /static_files könyvtárat:
mkdir /static_files
ahol tárolni fogja az egyéni index.html fájlt:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
</script>
</head>
<body>
<h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
</body>
</html>
Ennek ellenére itt az ideje, hogy ezt a játékkönyvet használja a korábban említett feladatok elvégzésére. Megjegyzendő, hogy az Ansible minden feladaton gazdagépenként, egyenként megy keresztül, és jelentést készít az ilyen feladatok állapotáról:
ansible-playbook /etc/ansible/playbooks/apache.yml
Most pedig nézzük meg, mi történik, ha megnyitunk egy böngészőt, és a 192.168.0.29 és 192.168.0.30 címre irányítjuk:
Lépjünk egy lépéssel tovább, és manuálisan állítsuk le és tiltsuk le az Apache-t a node1 és node2 oldalon:
systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd
Aztán fuss újra,
ansible-playbook /etc/ansible/playbooks/apache.yml
Ezúttal a feladat azt jelenti, hogy az Apache webszerver elindult és engedélyezve lett minden gazdagépen:
Kérjük, tekintse a fenti példát az Ansible erejének egy pillantásának. Bár ezek viszonylag egyszerű feladatok, ha kevés szerveren hajtják végre, nagyon fárasztó és időigényes lehet, ha több (talán több száz) gépen kell ugyanezt megtennie.
Összegzés
Ebben a cikkben leírtuk, hogyan futtassunk parancsokat és hajtsunk végre összetett feladatokat több távoli gazdagépen egyidejűleg az Ansible használatával. A hivatalos dokumentáció és a GitHub adattár sok példát és útmutatót tartalmaz arra vonatkozóan, hogyan használhatjuk az Ansible-t szinte bármilyen elképzelhető feladat elvégzésére.
Amint elkezdi megtanulni, hogyan automatizálhatja a feladatokat távoli Linux-gazdagépeken az Ansible segítségével, szeretnénk hallani az Ön gondolatait. Kérdéseit, észrevételeit és javaslatait is szívesen fogadjuk, ezért bármikor forduljon hozzánk bizalommal az alábbi űrlap segítségével.