Kako koristiti Ansible Playbooks za automatizaciju složenih zadataka na više udaljenih servera - 2. dio
U prethodnom članku ove Ansible serije, objasnili smo da je Ansible alat bez agenta koji vam omogućava da brzo i efikasno upravljate više mašina (takođe poznatih kao čvorovi – i vršite implementacije na njima) iz jednog sistema.
Nakon što instalirate softver u mašinu kontrolera, kreirate ključeve za prijavu bez lozinke i kopirate ih na čvorove, vrijeme je da naučite kako optimizirati proces upravljanja takvim udaljenim sistemima koristeći Ansible.
U ovom članku, kao iu sljedećem, koristit ćemo sljedeće testno okruženje. Svi hostovi su CentOS 7 kutije:
Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30
Osim toga, imajte na umu da su oba čvora dodana u odjeljak web servera lokalne /etc/ansible/hosts datoteke:
Ipak, počnimo s predmetnom temom.
Predstavljamo Ansible Playbooks
Kao što je opisano u prethodnom vodiču, možete koristiti ansible uslužni program za pokretanje komandi u udaljenim čvorovima na sljedeći način:
ansible -a "/bin/hostnamectl --static" webservers
U gornjem primjeru, pokrenuli smo hostnamectl --static
na čvoru1 i čvoru2. Ne treba dugo da se shvati da ova metoda izvršavanja zadataka na udaljenim računarima dobro funkcionira za kratke naredbe, ali može brzo postati opterećujuća ili neuredna za složenije zadatke koji zahtijevaju dalje dobro strukturirane konfiguracijske parametre ili interakcije s drugim uslugama.
Na primjer, postavljanje i konfiguriranje WordPress-a na više hostova – o čemu ćemo govoriti u sljedećem članku ove serije). Ovdje na scenu dolaze Playbooks.
Jednostavno rečeno, Playbooks su obični tekstualni fajlovi napisani u YAML formatu i sadrže listu sa stavkama sa jednim ili više parova ključ/vrijednost (također poznat kao „ >heš ” ili “rječnik ”).
Unutar svakog Playbook-a naći ćete jednu ili više grupa domaćina (svaka od ovih grupa se također naziva play) gdje će se izvršiti željeni zadaci.
Primjer iz službenih dokumenata pomoći će nam da ilustrujemo:
1. hostovi: ovo je lista mašina (prema /etc/ansible/hosts) na kojima će se obavljati sljedeći zadaci.
2. remote_user: udaljeni račun koji će se koristiti za obavljanje zadataka.
3. vars: varijable koje se koriste za modificiranje ponašanja udaljenih sistema.
4. zadaci se izvršavaju redom, jedan po jedan, protiv svih mašina koje odgovaraju hostovima. U okviru igre, svi domaćini će dobiti iste direktive zadatka.
Ako trebate izvršiti drugačiji skup povezanih zadataka za određenog domaćina, kreirajte još jednu igru u trenutnom Playbook-u (drugim riječima, svrha igre je mapiranje određenog izbora domaćina na dobro -definisani zadaci).
U tom slučaju, započnite novu igru dodavanjem direktive domaćina 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. Obrađivači su radnje koje se pokreću na kraju odjeljka zadataka u svakoj igri, a uglavnom se koriste za ponovno pokretanje usluga ili pokretanje ponovnog pokretanja u udaljenim sistemima.
mkdir /etc/ansible/playbooks
I fajl pod nazivom apache.yml unutra 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, kreirajte direktorij /static_files:
mkdir /static_files
gdje ćete pohraniti prilagođeni fajl 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>
Međutim, sada je vrijeme da koristite ovaj priručnik za obavljanje ranije spomenutih zadataka. Primijetit ćete da će Ansible proći kroz svaki zadatak po hostu, jedan po jedan, i izvijestit će o statusu takvih zadataka:
ansible-playbook /etc/ansible/playbooks/apache.yml
Sada da vidimo šta se dešava kada otvorimo pretraživač i usmerimo ga na 192.168.0.29 i 192.168.0.30:
Idemo korak dalje i ručno zaustavimo i onemogućimo Apache na čvoru1 i čvoru2:
systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd
onda ponovo trci,
ansible-playbook /etc/ansible/playbooks/apache.yml
Ovaj put, zadatak izvještava da je Apache web server pokrenut i omogućen na svakom hostu:
Razmotrite gornji primjer kao uvid u moć Ansiblea. Iako su ovo relativno laki zadaci kada se izvode na malom broju servera, mogu postati veoma zamorni i dugotrajni ako morate da uradite isto na nekoliko (možda stotinama) mašina.
Sažetak
U ovom članku smo opisali kako pokrenuti naredbe i izvršiti složene zadatke na nekoliko udaljenih hostova istovremeno koristeći Ansible. Službena dokumentacija i GitHub spremište pružaju mnogo primjera i vodiča o tome kako koristiti Ansible za postizanje gotovo svakog zamislivog zadatka.
Dok počnete učiti kako da automatizirate zadatke na udaljenim Linux hostovima koristeći Ansible, željeli bismo čuti vaše mišljenje. Pitanja, komentari i prijedlozi su također uvijek dobrodošli, pa nas slobodno kontaktirajte koristeći formu ispod u bilo koje vrijeme.