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.