Kako se pomoću Ansible Playbooks automatiziraju složeni zadaci na više udaljenih poslužitelja - 2. dio


U prethodnom članku ove serije Ansible objasnili smo da je Ansible alat bez agenata koji vam omogućuje brzo i učinkovito upravljanje više strojeva (također poznatih kao čvorovi - i izvršavanje implementacija na njima) iz jednog sustava.

Nakon instalacije softvera u stroj kontrolera, stvaranja ključeva za prijavu bez lozinke i kopiranja na čvorove, vrijeme je da naučite kako optimizirati postupak upravljanja takvim udaljenim sustavima pomoću Ansiblea.

Kroz ovaj članak, kao i sljedeći, koristit ćemo sljedeće testno okruženje. Svi su domaćini CentOS 7 kutije:

Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30

Uz to, imajte na umu da su oba čvora dodana u odjeljak web poslužitelja lokalne/etc/ansible/hosts datoteke:

To je reklo, krenimo s dotičnom temom.

Predstavljamo Ansible Playbooks

Kao što je opisano u prethodnom vodiču, uslužni program ansible možete koristiti za pokretanje naredbi u udaljenim čvorovima kako slijedi:

# ansible -a "/bin/hostnamectl --static" webservers

U gornjem primjeru pokrenuli smo hostnamectl --static na node1 i node2. Ne treba dugo da netko shvati da ova metoda izvođenja zadataka na udaljenim računalima dobro funkcionira za kratke naredbe, ali brzo može postati opterećujuća ili neuredna za složenije zadatke koji zahtijevaju daljnje dobro strukturirane konfiguracijske parametre ili interakciju s drugim uslugama

Na primjer, postavljanje i konfiguriranje WordPressa na više hostova - što ćemo obraditi u sljedećem članku ove serije). Ovdje se pojavljuju Playbooks.

Jednostavno rečeno, Playbooks su datoteke s običnim tekstom napisane u YAML formatu i sadrže popis stavki s jednim ili više parova ključ/vrijednost (poznati i kao „hash“ ili „rječnik“).

Unutar svake Playbook pronaći ćete jednu ili više grupa domaćina (svaka od tih grupa naziva se i igra) u kojoj se trebaju izvršiti željeni zadaci.

Primjer iz službenih dokumenata pomoći će nam da ilustriramo:

1. domaćini: ovo je popis strojeva (prema/etc/ansible/hosts) na kojima će se izvoditi sljedeći zadaci.

2. remote_user: udaljeni račun koji će se koristiti za izvršavanje zadataka.

3. vars: varijable koje se koriste za modificiranje ponašanja udaljenih sustava.

4. zadaci se izvršavaju redom, jedan po jedan, na svim strojevima koji odgovaraju domaćinima. Unutar predstave svi će domaćini dobiti iste smjernice zadatka.

Ako trebate izvršiti drugačiji skup povezanih zadataka za određenog domaćina, stvorite još jednu predstavu u trenutnoj Playbook-u (drugim riječima, svrha predstave je mapiranje određenog odabira domaćina u dobro definirane zadatke).

U tom slučaju započnite novu igru dodavanjem direktive hosts na dnu i počevši ispočetka:

---
- 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. rukovatelji su radnje koje se pokreću na kraju odjeljka zadataka u svakoj reprodukciji i uglavnom se koriste za ponovno pokretanje usluga ili pokretanje ponovnog pokretanja u udaljenim sustavima.

# mkdir /etc/ansible/playbooks

I datoteka nazvana apache.yml unutar nje sa sljedećim sadržajem:

---
- 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

Drugo, stvorite direktorij/static_files:

# mkdir /static_files

gdje ćete pohraniti prilagođenu datoteku index.html:

<!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>

Usprkos tome, sada je vrijeme da ovu knjigu priručnika koristite za izvršavanje ranije spomenutih zadataka. Primijetit ćete da će Ansible prolaziti svaki zadatak od strane domaćina, jedan po jedan, i izvješćivat će o statusu takvih zadataka:

# ansible-playbook /etc/ansible/playbooks/apache.yml

Pogledajmo sada što se događa kada otvorimo preglednik i usmjerimo ga na 192.168.0.29 i 192.168.0.30:

Idemo korak dalje i ručno zaustavimo i onemogućimo Apache na node1 i node2:

# systemctl stop httpd
# systemctl disable httpd
# systemctl is-active httpd
# systemctl is-enabled httpd

Zatim trči opet,

# ansible-playbook /etc/ansible/playbooks/apache.yml

Ovaj put zadatak izvještava da je Apache web poslužitelj pokrenut i omogućen na svakom hostu:

Molimo vas da gornji primjer smatrate uvidom snage Ansiblea. Iako su to relativno laki zadaci kada se izvode na malom broju poslužitelja, to može postati vrlo zamorno i dugotrajno ako to trebate učiniti na nekoliko (možda stotina) strojeva.

Sažetak

U ovom smo članku opisali kako izvršavati naredbe i izvršavati složene zadatke na nekoliko udaljenih hostova istovremeno koristeći Ansible. GitHub spremište pruža puno primjera i vodiča o tome kako koristiti Ansible za postizanje gotovo svih zamislivih zadataka.

Kad započnete učiti kako automatizirati zadatke na udaljenim Linuxovim hostovima koristeći Ansible, željeli bismo čuti vaše misli. Pitanja, komentari i prijedlozi također su uvijek dobrodošli, pa nas slobodno kontaktirajte putem donjeg obrasca u bilo kojem trenutku.