Kuinka käyttää mahdollisia soittokirjoja monimutkaisten tehtävien automatisointiin useilla etäpalvelimilla - osa 2


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

Kun olet asentanut ohjelmiston ohjainkoneeseen, luonut avaimet salasanattomalle kirjautumiselle ja kopioinut ne solmuihin, on aika oppia optimoimaan tällaisten etäjärjestelmien hallinta Ansible-ohjelmalla.

Tässä artikkelissa sekä seuraavassa artikkelissa käytämme seuraavaa testiympäristöä. 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:

Aloitetaan nyt käsillä olevasta aiheesta.

Esittelyssä Ansible Playbooks

Kuten edellisessä oppaassa on kuvattu, voit käyttää komentoa komentojen suorittamiseen etäsolmuissa seuraavasti:

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

Yllä olevassa esimerkissä suoritimme hostnamectl --static solmuille1 ja solmu2. Ei kestä kauaa, kun ymmärretään, että tämä menetelmä suorittaa tehtäviä etätietokoneilla toimii hyvin lyhyiden komentojen kohdalla, mutta voi nopeasti tulla raskaaksi tai sotkuiseksi monimutkaisemmissa tehtävissä, jotka edellyttävät tarkasti jäsenneltyjä määritysparametreja tai vuorovaikutusta muiden palveluiden kanssa

Esimerkiksi WordPressin määrittäminen ja määrittäminen useille isännille - josta käsittelemme tämän sarjan seuraavaa artikkelia). Täällä kohtaavat Playbooks.

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

Jokaisen pelikirjan sisältä löytyy yksi tai useampi isäntäryhmä (jokaista näistä ryhmistä kutsutaan myös näytelmiksi), joissa halutut tehtävät suoritetaan.

Esimerkki virallisista asiakirjoista auttaa meitä havainnollistamaan:

1. isännät: tämä on luettelo koneista (kuten/etc/ansible/hosts), 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 muuttamaan etäjärjestelmien käyttäytymistä.

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

Jos sinun on suoritettava eri joukko liitettyjä tehtäviä tietylle isännälle, luo uusi näytelmä nykyiseen soittokirjaan (toisin sanoen pelin tarkoituksena on kartoittaa tietty valikoima isäntiä hyvin määriteltyihin tehtäviin).

Aloita tällöin uusi peli lisäämällä isäntäkomento 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 laukaistaan jokaisen pelin tehtäväosion lopussa ja joita käytetään enimmäkseen palvelujen uudelleenkäynnistämiseen tai uudelleenkäynnistyksen käynnistämiseen etäjärjestelmissä.

# mkdir /etc/ansible/playbooks

Ja sisällä oleva tiedosto apache.yml, jonka sisältö on seuraava:

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

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

Tästä huolimatta nyt on aika käyttää tätä soittokirjaa aiemmin mainittujen tehtävien suorittamiseen. Huomaa, että Ansible käy läpi kaikki tehtävät isäntäkohtaisesti yksi kerrallaan ja raportoi tällaisten tehtävien tilasta:

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

Katsotaan nyt, mitä tapahtuu, kun avaat selaimen ja osoitamme sen osoitteisiin 192.168.0.29 ja 192.168.0.30:

Mennään yksi askel eteenpäin ja pysäytetään ja poistetaan Apache manuaalisesti solmusta1 ja solmusta 2:

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

Suorita sitten uudelleen

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

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

Harkitse yllä olevaa esimerkkiä välähdyksellä Ansiblein voimasta. Vaikka nämä ovat suhteellisen helppoja tehtäviä, kun ne suoritetaan pienellä määrällä palvelimia, se voi tulla hyvin tylsäksi ja aikaa vieväksi, jos sinun on tehtävä sama useissa (ehkä sadoissa) koneissa.

Yhteenveto

Tässä artikkelissa olemme kuvanneet komentojen suorittamisen ja monimutkaisten tehtävien suorittamisen useilla etäisännöillä samanaikaisesti Ansible-toiminnolla. GitHub-arkisto tarjoaa paljon esimerkkejä ja oppaita siitä, miten Ansible-ohjelmaa käytetään melkein minkä tahansa kuviteltavissa olevan tehtävän saavuttamiseen.

Kun alat oppia automatisoimaan tehtäviä Linux-etäisänissä Isännän avulla, haluamme kuulla ajatuksesi. Kysymykset, kommentit ja ehdotukset ovat myös aina tervetulleita, joten ota rohkeasti yhteyttä alla olevan lomakkeen avulla milloin tahansa.