Kuinka käyttää mahdollisia ohjekirjoja monimutkaisten tehtävien automatisoimiseen useilla etäpalvelimilla - Osa 2


Tämän Ansible-sarjan edellisessä artikkelissa selitimme, että Ansible on agenttiton työkalu, jonka avulla voit nopeasti ja tehokkaasti hallita useita koneita (tunnetaan myös solmuina – ja suorittaa myös käyttöönottoja niille) yhdestä järjestelmästä.

Kun olet asentanut ohjelmiston ohjainkoneeseen, luonut salasanattoman kirjautumisen avaimet ja kopioinut ne solmuihin, on aika oppia optimoimaan tällaisten etäjärjestelmien hallintaprosessi Ansiblen avulla.

Käytämme seuraavaa testiympäristöä koko tässä artikkelissa, samoin kuin seuraavassa. Kaikki isännät ovat CentOS 7 -laatikoita:


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

Huomaa lisäksi, että molemmat solmut on lisätty paikallisen /etc/ansible/hosts-tiedoston verkkopalvelimet-osioon:

Siitä huolimatta aloitetaan käsillä olevasta aiheesta.

Esittelyssä Ansible Playbooks

Kuten edellisessä oppaassa kuvattiin, voit käyttää mahdollista-apuohjelmaa komentojen suorittamiseen etäsolmuissa seuraavasti:


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

Yllä olevassa esimerkissä suoritimme hostnamectl --static:n solmu1 ja node2. Ei kestä kauan tajuta, että tämä tehtävien suorittamistapa etätietokoneissa toimii hyvin lyhyillä komennoilla, mutta voi nopeasti tulla raskaaksi tai sotkuiseksi monimutkaisemmissa tehtävissä, jotka vaativat lisää hyvin jäsenneltyjä määritysparametreja tai vuorovaikutusta muiden palvelujen kanssa.

Esimerkiksi WordPressin määrittäminen useilla isännillä – mitä käsittelemme tämän sarjan seuraavassa artikkelissa). Tässä kohtaa Playbooks tulevat esiin.

Yksinkertaisesti sanottuna Playbooks ovat pelkkiä tekstitiedostoja, jotka on kirjoitettu YAML-muodossa ja sisältävät luettelon kohteista, joissa on yksi tai useampi avain/arvo-pari (tunnetaan myös nimellä " >hash” tai ”sanakirja”).

Jokaisen pelikirjan sisällä on yksi tai useampi isäntäryhmä (joista näistä ryhmistä kutsutaan myös leimikseksi), joissa halutut tehtävät suoritetaan.

Esimerkki virallisista asiakirjoista auttaa meitä havainnollistamaan:

1. isännät: tämä on luettelo koneista (kohteen /etc/ansible/hosts mukaisesti), joissa seuraavat tehtävät suoritetaan.

2. remote_user: etätili, jota käytetään tehtävien suorittamiseen.

3. muuttujat: muuttujat, joita käytetään muokkaamaan etäjärjestelmien toimintaa.

4. tehtävät suoritetaan järjestyksessä, yksi kerrallaan kaikkia isäntiä vastaavia koneita vastaan. Näytelmän sisällä kaikki isännät saavat samat tehtäväohjeet.

Jos sinun on suoritettava eri joukko liittyviä tehtäviä tietylle isännälle, luo uusi esitys nykyiseen Playbookiin (toisin sanoen näytelmän tarkoitus on kartoittaa tietty valikoima isäntiä hyvin -määritellyt tehtävät).

Aloita siinä tapauksessa uusi toisto lisäämällä isäntädirektiivi alareunaan ja aloittamalla alusta:


---
- 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. Käsittelijät ovat toimintoja, jotka käynnistyvät jokaisen pelin tehtäväosion lopussa ja joita käytetään useimmiten palvelujen käynnistämiseen tai uudelleenkäynnistyksen käynnistämiseen etäjärjestelmissä.


mkdir /etc/ansible/playbooks

Ja sen sisällä apache.yml-niminen tiedosto, jossa on seuraava sisältö:


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

Toiseksi luo hakemisto /static_files:


mkdir /static_files

johon tallennat mukautetun index.html-tiedoston:


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

Nyt on kuitenkin aika käyttää tätä ohjekirjaa aiemmin mainittujen tehtävien suorittamiseen. Huomaa, että Ansible käy läpi jokaisen tehtävän isäntäkohtaisesti yksi kerrallaan ja raportoi tällaisten tehtävien tilasta:


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

Katsotaan nyt, mitä tapahtuu, kun avaamme selaimen ja osoitamme sen numeroihin 192.168.0.29 ja 192.168.0.30:

Mennään yksi askel pidemmälle ja pysäytetään ja poistetaan Apache manuaalisesti käytöstä solmussa1 ja node2:ssa:


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

Juokse sitten uudestaan,


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

Tällä kertaa tehtävä raportoi, että Apache-verkkopalvelin on käynnistetty ja otettu käyttöön jokaisessa isännässä:

Pidä yllä olevaa esimerkkiä välähdyksenä Ansiblen voimasta. Vaikka nämä ovat suhteellisen helppoja tehtäviä, kun ne suoritetaan pienellä määrällä palvelimia, siitä voi tulla erittäin työlästä ja aikaa vievää, jos sinun on tehtävä sama useissa (ehkä sadoissa) koneissa.

Yhteenveto

Tässä artikkelissa olemme kuvanneet, kuinka komentoja ja monimutkaisia tehtäviä suoritetaan useilla etäisännillä samanaikaisesti Ansiblen avulla. Virallinen dokumentaatio ja GitHub-arkisto tarjoavat paljon esimerkkejä ja oppaita Ansiblen käyttämisestä melkein minkä tahansa kuviteltavissa olevan tehtävän saavuttamiseen.

Kun alat oppia automatisoimaan tehtäviä Linux-etäisännillä Ansiblen avulla, haluaisimme kuulla ajatuksesi. Myös kysymykset, kommentit ja ehdotukset ovat aina tervetulleita, joten ota meihin yhteyttä milloin tahansa alla olevalla lomakkeella.