Kā izmantot iespējotās grāmatiņas, lai automatizētu sarežģītus uzdevumus vairākos attālajos serveros - 2. daļa


Iepriekšējā šīs Ansible sērijas rakstā mēs paskaidrojām, ka Ansible ir rīks bez aģentiem, kas ļauj ātri un efektīvi pārvaldīt vairākas mašīnas (pazīstamas arī kā mezgli - un veikt izvietošanu arī pie tām) no vienas sistēmas.

Pēc programmatūras instalēšanas kontroliera mašīnā, atslēgu izveidošanai, lai pieteiktos bez paroles, un nokopējot tās mezglos, ir pienācis laiks uzzināt, kā optimizēt šādu attālo sistēmu pārvaldības procesu, izmantojot Ansible.

Šajā rakstā, kā arī nākamajā, mēs izmantosim šādu testa vidi. Visi saimnieki ir CentOS 7 lodziņi:

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

Turklāt, lūdzu, ņemiet vērā, ka abi mezgli ir pievienoti vietējā/etc/ansible/hosts faila tīmekļa serveru sadaļā:

Sāksim ar šo tēmu.

Iepazīstinām ar Ansible Playbooks

Kā aprakstīts iepriekšējā rokasgrāmatā, komandu palaišanai attālos mezglos varat izmantot iespējamo utilītu šādi:

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

Iepriekš minētajā piemērā mēs izpildījām hostnamectl --static mezglos1 un mezglā2. Nepaiet ilgs laiks, lai saprastu, ka šī uzdevumu izpildes metode attālajos datoros darbojas labi īsām komandām, bet var ātri kļūt apgrūtinoša vai netīra sarežģītākiem uzdevumiem, kuriem nepieciešami vēl labi strukturēti konfigurācijas parametri vai mijiedarbība ar citiem pakalpojumiem

Piemēram, WordPress iestatīšana un konfigurēšana vairākos resursdatoros - par to mēs runāsim nākamajā šīs sērijas rakstā). Šeit parādās Playbooks.

Vienkārši sakot, Playbooks ir vienkārša teksta faili, kas rakstīti YAML formātā, un tajos ir saraksts ar vienumiem ar vienu vai vairākiem atslēgu/vērtību pāriem (kurus sauc arī par “jaucējkrānu” vai “vārdnīcu”).

Katras spēles grāmatas iekšpusē atradīsit vienu vai vairākas saimnieku grupas (katru no šīm grupām sauc arī par spēli), kurā jāveic vēlamie uzdevumi.

Piemērs no oficiālajiem dokumentiem palīdzēs mums ilustrēt:

1. resursdatori: tas ir mašīnu saraksts (atbilstoši/etc/ansible/hosts), kur tiks veikti šādi uzdevumi.

2. remote_user: attālais konts, kas tiks izmantots uzdevumu veikšanai.

3. mainīgie: mainīgie, ko izmanto, lai modificētu attālās sistēmas (-u) darbību.

4. uzdevumi tiek izpildīti secīgi, pa vienam, pret visām mašīnām, kas atbilst saimniekiem. Izrādes ietvaros visi saimnieki saņems vienādas uzdevumu direktīvas.

Ja konkrētam resursdatoram ir jāizpilda atšķirīgs saistīto uzdevumu kopums, pašreizējā Playbook izveidojiet citu spēli (citiem vārdiem sakot, lugas mērķis ir noteikt noteiktu resursdatoru atlasi precīzi definētiem uzdevumiem).

Tādā gadījumā sāciet jaunu spēli, apakšā pievienojot resursdatoru direktīvu un sākot no jauna:

---
- 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. apstrādātāji ir darbības, kas tiek aktivizētas uzdevumu sadaļas beigās katrā spēlē, un lielākoties tiek izmantotas pakalpojumu restartēšanai vai atkārtotas palaišanas aktivizēšanai attālajās sistēmās.

# mkdir /etc/ansible/playbooks

Un tur iekšpusē ir fails ar nosaukumu apache.yml ar šādu saturu:

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

Otrkārt, izveidojiet direktoriju/static_files:

# mkdir /static_files

kur glabāsit pielāgoto index.html failu:

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

Tas nozīmē, ka tagad ir pienācis laiks izmantot šo rotaļlietu, lai veiktu iepriekš minētos uzdevumus. Jūs ievērosiet, ka Ansible veiks katru uzdevumu pa saimniekdatoriem pa vienam un ziņos par šādu uzdevumu statusu:

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

Tagad redzēsim, kas notiek, atverot pārlūkprogrammu un norādot uz 192.168.0.29 un 192.168.0.30:

Pārejam vienu soli tālāk un manuāli apstādinām un atspējojam Apache mezglos1 un mezglā2:

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

Tad skrien vēlreiz,

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

Šoreiz uzdevums ziņo, ka Apache tīmekļa serveris tika palaists un iespējots katrā resursdatorā:

Lūdzu, apsveriet iepriekš minēto piemēru kā ieskatu Ansible spēkā. Lai gan tie ir salīdzinoši viegli uzdevumi, veicot nelielu skaitu serveru, tas var kļūt ļoti garlaicīgs un laikietilpīgs, ja tas pats jādara vairākās (iespējams, simtos) mašīnās.

Kopsavilkums

Šajā rakstā mēs aprakstījām, kā vienlaikus izpildīt komandas un izpildīt sarežģītus uzdevumus vairākos attālajos resursdatoros, izmantojot Ansible. GitHub krātuvē ir daudz piemēru un rokasgrāmatu, kā lietot Ansible gandrīz jebkura iedomājama uzdevuma sasniegšanai.

Sākot mācīties automatizēt uzdevumus attālos Linux resursdatoros, izmantojot Ansible, mēs vēlētos dzirdēt jūsu domas. Jautājumi, komentāri un ieteikumi arī vienmēr tiek laipni gaidīti, tāpēc jebkurā laikā sazinieties ar mums, izmantojot zemāk esošo veidlapu.