Kako uporabiti Ansible Playbooks za avtomatizacijo zapletenih nalog na več oddaljenih strežnikih - 2. del


V prejšnjem članku te serije Ansible smo razložili, da je Ansible orodje brez agentov, ki vam omogoča hitro in učinkovito upravljanje več strojev (znanih tudi kot vozlišča - in tudi uvedba zanje) iz enega sistema.

Po namestitvi programske opreme v krmilno napravo, ustvarjanju ključev za prijavo brez gesla in kopiranju na vozlišča je čas, da se naučite, kako optimizirati postopek upravljanja takšnih oddaljenih sistemov s pomočjo programa Ansible.

V celotnem članku, kot tudi v naslednjem, bomo uporabili naslednje testno okolje. Vsi gostitelji so CentOS 7 škatle:

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

Poleg tega upoštevajte, da sta bili obe vozlišči dodani v odsek spletnih strežnikov lokalne/etc/ansible/hosts datoteke:

Kljub temu pa začnimo s temo.

Predstavljamo Ansible Playbooks

Kot je opisano v prejšnjem priročniku, lahko uporabite pripomoček ansible za zagon ukazov v oddaljenih vozliščih, kot sledi:

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

V zgornjem primeru smo na node1 in node2 zagnali hostnamectl --static . Ne traja dolgo, da se nekdo zave, da ta način izvajanja nalog v oddaljenih računalnikih deluje dobro za kratke ukaze, vendar lahko hitro postane obremenjujoč ali neurejen za zahtevnejša opravila, ki zahtevajo nadaljnje dobro strukturirane konfiguracijske parametre ali interakcije z drugimi storitvami

Na primer nastavitev in konfiguriranje WordPressa na več gostiteljih - kar bomo obravnavali v naslednjem članku te serije). Tu nastopijo Playbooks.

Preprosto povedano, Playbooks so navadne besedilne datoteke, napisane v obliki YAML, in vsebujejo seznam z elementi z enim ali več pari ključ/vrednost (znan tudi kot\"hash" ali\"dictionary").

V vsaki knjigi Playbook boste našli eno ali več skupin gostiteljev (vsaka od teh skupin se imenuje tudi igra), kjer bodo izvedene želene naloge.

Primer iz uradnih dokumentov nam bo pomagal ponazoriti:

1. gostitelji: to je seznam strojev (po/etc/ansible/hosts), kjer bodo izvedene naslednje naloge.

2. remote_user: oddaljeni račun, ki bo uporabljen za izvajanje nalog.

3. vars: spremenljivke, ki se uporabljajo za spreminjanje vedenja oddaljenih sistemov.

4. naloge se izvajajo zaporedoma, po vrsti, na vseh strojih, ki se ujemajo z gostitelji. V predstavi bodo vsi gostitelji dobili enake napotke za naloge.

Če morate za določen gostitelj izvesti drugačen nabor s tem povezanih nalog, ustvarite drugo igro v trenutni knjigi Play (z drugimi besedami, namen igre je preslikati določen izbor gostiteljev v natančno določene naloge).

V tem primeru začnite novo igro tako, da na dnu dodate direktivo o gostiteljih in začnete znova:

---
- 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. upravljavci so dejanja, ki se sprožijo na koncu odseka z nalogami v vsakem predvajanju in se večinoma uporabljajo za ponovni zagon storitev ali sprožitev ponovnega zagona v oddaljenih sistemih.

# mkdir /etc/ansible/playbooks

In datoteka z imenom apache.yml znotraj z naslednjo vsebino:

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

Drugič, ustvarite imenik/static_files:

# mkdir /static_files

kamor boste shranili datoteko index.html po meri:

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

Kljub temu je zdaj čas, da to igro uporabite za izvajanje prej omenjenih nalog. Opazili boste, da bo Ansible vsako nalogo pregledoval posamezno nalogo in poročal o stanju takih nalog:

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

Zdaj pa poglejmo, kaj se zgodi, ko odpremo brskalnik in ga usmerimo na 192.168.0.29 in 192.168.0.30:

Pojdimo še korak naprej in ročno ustavimo in onemogočimo Apache na vozliščih1 in vozliščih2:

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

Nato spet teči,

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

Tokrat naloga poroča, da je bil spletni strežnik Apache zagnan in omogočen na vsakem gostitelju:

Zgornji primer upoštevajte kot vpogled v moč Ansible. Čeprav so to sorazmerno enostavna opravila, ki se izvajajo na majhnem številu strežnikov, lahko postane zelo dolgočasno in dolgotrajno, če morate to storiti v več (morda stotinah) strojih.

Povzetek

V tem članku smo opisali, kako hkrati izvajati ukaze in izvajati zapletene naloge na več oddaljenih gostiteljih z uporabo Ansible. Skladišče GitHub vsebuje veliko primerov in vodnikov o tem, kako uporabiti Ansible za dosego skoraj vseh zamislivih nalog.

Ko se začnete učiti, kako avtomatizirati naloge na oddaljenih gostiteljih Linuxa z uporabo Ansible, bi radi slišali vaše misli. Vprašanja, komentarji in predlogi so prav tako vedno dobrodošli, zato nas lahko kadar koli kontaktirate z uporabo spodnjega obrazca.