Išsamus konfigūracijos valdymo su Ansible vadovas, apimantis diegimą, „playbook‘us“, modulius, roles ir geriausias infrastruktūros automatizavimo praktikas.
Konfigūracijos valdymas: Automatizavimo įsisavinimas su Ansible
Šiandienos sparčiai besivystančioje IT aplinkoje efektyvus ir patikimas konfigūracijos valdymas yra svarbiausias dalykas. Organizacijos visame pasaulyje ieško būdų, kaip automatizuoti infrastruktūros paruošimą, programų diegimą ir bendrą sistemos administravimą, siekdamos sumažinti rankinį darbą, minimizuoti klaidas ir paspartinti pateikimą į rinką. Ansible, galingas atvirojo kodo automatizavimo variklis, tapo vienu iš pagrindinių sprendimų šiems tikslams pasiekti. Šiame išsamiame vadove bus gilinamasi į pagrindines konfigūracijos valdymo su Ansible koncepcijas, apimant viską nuo diegimo ir pagrindinio naudojimo iki pažangių metodų ir geriausių praktikų.
Kas yra konfigūracijos valdymas?
Konfigūracijos valdymas (angl. Configuration Management, CM) – tai procesas, kurio metu sistemingai valdomi ir kontroliuojami IT sistemų konfigūracijos pakeitimai. Jis užtikrina, kad sistemos būtų nuosekliai konfigūruojamos pagal apibrėžtus standartus, nepriklausomai nuo jų dydžio ar sudėtingumo. Pagrindiniai konfigūracijos valdymo aspektai yra šie:
- Infrastruktūra kaip kodas (IaC): Infrastruktūros konfigūracijų vaizdavimas kaip kodo, leidžiantis taikyti versijų kontrolę, atkartojamumą ir automatizuotą diegimą.
- Norimos būsenos konfigūracija (DSC): Sistemos norimos būsenos apibrėžimas ir automatinis tos būsenos palaikymas.
- Idempotentiškumas: Užtikrinimas, kad tos pačios konfigūracijos pritaikymas kelis kartus duoda tą patį rezultatą.
- Versijų kontrolė: Konfigūracijos pakeitimų stebėjimas laikui bėgant, leidžiantis grįžti prie ankstesnių būsenų.
- Automatizavimas: Pasikartojančių užduočių, tokių kaip programinės įrangos diegimas, pataisų diegimas ir konfigūracijos atnaujinimai, automatizavimas.
Kodėl verta rinktis Ansible?
Ansible išsiskiria iš kitų konfigūracijos valdymo įrankių savo paprastumu, architektūra be agentų ir galingomis galimybėmis. Štai keletas svarių priežasčių rinktis Ansible:
- Architektūra be agentų: Ansible nereikalauja, kad tikslinėse sistemose būtų įdiegti agentai. Jis komunikuoja per SSH ar kitus standartinius protokolus, supaprastindamas diegimą ir sumažindamas pridėtines išlaidas. Tai supaprastina administravimą įvairiose aplinkose, nuo debesijos egzempliorių iki vietinių serverių skirtinguose žemynuose.
- Paprasta ir žmogui suprantama sintaksė: Ansible naudoja YAML (YAML Ain't Markup Language) konfigūracijos instrukcijoms apibrėžti, todėl „playbook'ai“ yra lengvai suprantami ir prižiūrimi.
- Galingi moduliai: Ansible teikia didžiulę modulių biblioteką, skirtą įvairiems IT infrastruktūros aspektams valdyti, įskaitant operacines sistemas, duomenų bazes, žiniatinklio serverius ir debesijos platformas.
- Idempotentiškumas: Ansible užtikrina, kad konfigūracijos būtų taikomos tik tada, kai tai būtina, taip išvengiant nenumatytų pakeitimų.
- Mastelio keitimas: Ansible gali efektyviai valdyti tiek mažas, tiek didelio masto aplinkas.
- Atvirasis kodas: Ansible yra atvirojo kodo įrankis su didele ir aktyvia bendruomene, teikiančia gausią pagalbą ir išteklius.
- Bendruomenės palaikymas: Klestinti bendruomenė užtikrina nuolatinį tobulinimą, lengvai prieinamus sprendimus dažniausiai pasitaikančioms problemoms ir didžiulę bendruomenės sukurtų modulių ir rolių biblioteką.
Ansible diegimas
Ansible diegimas yra paprastas. Diegimo procesas priklauso nuo jūsų operacinės sistemos.
Linux (Debian/Ubuntu)
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
Linux (Red Hat/CentOS/Fedora)
sudo dnf install epel-release
sudo dnf install ansible
macOS
brew install ansible
Po diegimo patikrinkite, ar Ansible įdiegtas teisingai, paleisdami:
ansible --version
Pagrindinės Ansible koncepcijos
Norint efektyviai valdyti konfigūracijas, būtina suprasti pagrindines Ansible koncepcijas. Jos apima:
- Valdymo mazgas (Control Node): Kompiuteris, kuriame įdiegtas Ansible ir iš kurio vykdomi „playbook'ai“.
- Valdomi mazgai (Managed Nodes): Tikslinės sistemos, kurias valdo Ansible.
- Inventorius (Inventory): Valdomų mazgų sąrašas, suskirstytas į grupes. Inventorius gali būti paprastas tekstinis failas arba dinaminis inventoriaus scenarijus, kuris gauna mazgų informaciją iš debesijos tiekėjo ar kito šaltinio.
- Playbook'ai (Playbooks): YAML failai, apibrėžiantys užduotis, kurias reikia atlikti valdomuose mazguose. „Playbook'ai“ yra Ansible automatizavimo šerdis.
- Užduotys (Tasks): Atskiri veiksmai, kuriuos reikia atlikti valdomuose mazguose. Kiekviena užduotis naudoja Ansible modulį.
- Moduliai (Modules): Daugkartinio naudojimo kodo vienetai, atliekantys konkrečias užduotis, pavyzdžiui, paketų diegimą, failų kūrimą ar paslaugų valdymą.
- Rolės (Roles): Būdas organizuoti ir pakartotinai naudoti „playbook'us“, užduotis ir kitus Ansible komponentus. Rolės skatina moduliškumą ir kodo pakartotinį naudojimą.
- Kintamieji (Variables): Naudojami reikšmėms saugoti ir pakartotinai naudoti „playbook'uose“. Kintamuosius galima apibrėžti „playbook'o“, inventoriaus ar rolės lygiu.
- Faktai (Facts): Informacija apie valdomus mazgus, kurią Ansible surenka automatiškai. Faktai gali būti naudojami „playbook'uose“ konfigūracijoms pritaikyti pagal tikslinių sistemų charakteristikas.
Pirmojo „Playbook“ kūrimas
Sukurkime paprastą „playbook“, kad įdiegtume Apache žiniatinklio serverį valdomame mazge. Pirmiausia sukurkite inventoriaus failą pavadinimu `hosts` su jūsų valdomo mazgo IP adresu arba pagrindinio kompiuterio pavadinimu:
[webservers]
192.168.1.100
Toliau sukurkite „playbook“ pavadinimu `install_apache.yml`:
---
- hosts: webservers
become: yes
tasks:
- name: Įdiegti Apache
apt:
name: apache2
state: present
- name: Paleisti Apache
service:
name: apache2
state: started
enabled: yes
Šiame „playbook'e“:
- `hosts: webservers` nurodo, kad „playbook“ turi būti vykdomas `webservers` grupėje, apibrėžtoje inventoriuje.
- `become: yes` nurodo Ansible naudoti privilegijų eskalavimą (sudo) užduotims vykdyti.
- `tasks` sekcija apibrėžia dvi užduotis: Apache diegimą ir Apache paslaugos paleidimą.
- `apt` modulis naudojamas `apache2` paketui įdiegti.
- `service` modulis naudojamas `apache2` paslaugai paleisti ir įjungti.
Norėdami paleisti „playbook“, vykdykite šią komandą:
ansible-playbook -i hosts install_apache.yml
Ansible prisijungs prie valdomo mazgo, įdiegs Apache ir paleis paslaugą.
Darbas su moduliais
Ansible moduliai yra automatizavimo statybiniai blokai. Jie suteikia standartizuotą būdą sąveikauti su įvairiomis sistemomis ir programomis. Ansible apima didžiulę modulių biblioteką, skirtą operacinėms sistemoms, duomenų bazėms, žiniatinklio serveriams, debesijos platformoms ir kt. valdyti.
Štai keletas dažniausiai naudojamų Ansible modulių:
- `apt` (Debian/Ubuntu): Valdo paketus naudojant `apt` paketų tvarkyklę.
- `yum` (Red Hat/CentOS/Fedora): Valdo paketus naudojant `yum` paketų tvarkyklę.
- `file`: Valdo failus ir katalogus.
- `template`: Kuria failus iš Jinja2 šablonų.
- `service`: Valdo paslaugas.
- `user`: Valdo vartotojų paskyras.
- `group`: Valdo grupes.
- `copy`: Kopijuoja failus į valdomus mazgus.
- `command`: Vykdo apvalkalo (shell) komandas.
- `shell`: Vykdo apvalkalo komandas su išplėstinėmis parinktimis.
- `cron`: Valdo cron užduotis.
Norėdami rasti visą Ansible modulių sąrašą ir jų dokumentaciją, apsilankykite Ansible dokumentacijos svetainėje.
Kintamųjų panaudojimas
Kintamieji yra būtini, kad „playbook'ai“ būtų lankstesni ir daugkartinio naudojimo. Jie leidžia pritaikyti konfigūracijas pagal skirtingas aplinkas ar valdomus mazgus. Ansible palaiko kelis kintamųjų tipus:
- Inventoriaus kintamieji: Apibrėžiami inventoriaus faile.
- „Playbook“ kintamieji: Apibrėžiami „playbook'e“.
- Rolių kintamieji: Apibrėžiami rolėse.
- Faktai: Automatiškai surinkta informacija apie valdomus mazgus.
- Komandinės eilutės kintamieji: Perduodami `ansible-playbook` komandai naudojant `-e` parinktį.
Štai pavyzdys, kaip naudoti inventoriaus kintamuosius:
Inventoriaus failas (hosts):
[webservers]
192.168.1.100 webserver_port=80
192.168.1.101 webserver_port=8080
„Playbook“ (configure_webserver.yml):
---
- hosts: webservers
become: yes
tasks:
- name: Konfigūruoti žiniatinklio serverį
template:
src: webserver.conf.j2
dest: /etc/apache2/sites-available/000-default.conf
notify: restart_apache
handlers:
- name: restart_apache
service:
name: apache2
state: restarted
Šablono failas (webserver.conf.j2):
<VirtualHost *:{{ webserver_port }}>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Šiame pavyzdyje kintamasis `webserver_port` yra apibrėžtas inventoriaus faile ir naudojamas Jinja2 šablone konfigūruoti žiniatinklio serverio virtualųjį prieglobstį.
Organizavimas su rolėmis
Rolės suteikia būdą organizuoti ir pakartotinai naudoti „playbook'us“, užduotis ir kitus Ansible komponentus. Rolė yra savarankiškas automatizavimo vienetas, kurį galima pritaikyti keliems valdomiems mazgams. Rolės skatina moduliškumą, kodo pakartotinį naudojimą ir palaikomumą.
Rolę paprastai sudaro šie katalogai:
- `tasks`: Sudėtyje yra pagrindinis rolės užduočių sąrašas.
- `handlers`: Sudėtyje yra tvarkytuvai (handlers), kuriuos suaktyvina užduotys.
- `vars`: Sudėtyje yra rolės naudojami kintamieji.
- `defaults`: Sudėtyje yra numatytosios kintamųjų reikšmės.
- `files`: Sudėtyje yra statiniai failai, kurie kopijuojami į valdomus mazgus.
- `templates`: Sudėtyje yra Jinja2 šablonai, kurie naudojami generuoti failus valdomuose mazguose.
- `meta`: Sudėtyje yra metaduomenys apie rolę, pvz., jos pavadinimas, autorius ir priklausomybės.
Norėdami sukurti rolę, naudokite `ansible-galaxy` komandą:
ansible-galaxy init webserver
Tai sukurs katalogą pavadinimu `webserver` su standartine rolės struktūra. Tada galite užpildyti rolę užduotimis, tvarkytuvais, kintamaisiais, failais ir šablonais.
Norėdami naudoti rolę „playbook'e“, įtraukite `roles` raktinį žodį:
---
- hosts: webservers
become: yes
roles:
- webserver
Pažangios technikos
Įsisavinę Ansible pagrindus, galite tyrinėti pažangesnes technikas, kad dar labiau patobulintumėte savo automatizavimo galimybes.
Sąlyginis vykdymas
Sąlyginis vykdymas leidžia vykdyti užduotis tik tada, kai įvykdomos tam tikros sąlygos. Tai naudinga pritaikant konfigūracijas pagal valdomų mazgų charakteristikas. Galite naudoti `when` raktinį žodį, kad nurodytumėte sąlygą užduočiai.
- name: Įdiegti Apache tik Debian pagrindo sistemose
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"
Ciklai
Ciklai leidžia vykdyti užduotį kelis kartus su skirtingomis reikšmėmis. Tai naudinga iteruojant per paketų, vartotojų ar kitų elementų sąrašus. Galite naudoti `loop` raktinį žodį, kad nurodytumėte reikšmių sąrašą.
- name: Įdiegti kelis paketus
apt:
name: "{{ item }}"
state: present
loop:
- apache2
- php
- mysql-server
Tvarkytuvai (Handlers)
Tvarkytuvai yra užduotys, kurios vykdomos tik tada, kai apie jas praneša kita užduotis. Tai naudinga perkraunant paslaugas ar atliekant kitus veiksmus, kurie turėtų būti suaktyvinti tik pasikeitus konfigūracijai. Galite naudoti `notify` raktinį žodį pranešti tvarkytuvui.
- name: Konfigūruoti žiniatinklio serverį
template:
src: webserver.conf.j2
dest: /etc/apache2/sites-available/000-default.conf
notify: restart_apache
handlers:
- name: restart_apache
service:
name: apache2
state: restarted
Klaidų apdorojimas
Tinkamas klaidų apdorojimas yra labai svarbus norint užtikrinti jūsų automatizavimo patikimumą. Ansible suteikia keletą būdų klaidoms apdoroti:
- `ignore_errors`: Leidžia užduočiai nepavykti nesustabdant „playbook“ vykdymo.
- `rescue`: Apibrėžia užduočių rinkinį, kuris bus vykdomas, kai užduotis nepavyksta.
- `block`: Sugrupuoja užduočių rinkinį, leidžiantį apibrėžti bendrą klaidų tvarkytuvą visam blokui.
- block:
- name: Įdiegti paketą
apt:
name: some_package
state: present
rescue:
- name: Apdoroti klaidą
debug:
msg: "Diegiant paketą įvyko klaida"
Ansible Tower / AWX
Ansible Tower (komercinis) ir AWX (atvirojo kodo) yra žiniatinklio pagrindu veikiančios vartotojo sąsajos, skirtos Ansible. Jos suteikia tokias funkcijas kaip:
- Centralizuotas valdymas: Valdykite Ansible projektus, inventorius ir kredencialus vienoje vietoje.
- Rolėmis pagrįsta prieigos kontrolė: Kontroliuokite, kas gali pasiekti ir vykdyti „playbook'us“.
- Planavimas: Suplanuokite „playbook'ų“ automatinį paleidimą nustatytu laiku.
- Žiniatinklio API: Integruokite Ansible su kitomis sistemomis naudodami REST API.
- Stebėjimas realiuoju laiku: Stebėkite „playbook'ų“ vykdymą realiuoju laiku.
Ansible Tower / AWX supaprastina Ansible aplinkų valdymą, ypač didelėse organizacijose, turinčiose kelias komandas ir projektus. Jie siūlo centrinį tašką automatizavimo darbo eigoms valdyti, gerina bendradarbiavimą ir didina saugumą.
Ansible Galaxy
Ansible Galaxy yra iš anksto sukurtų rolių ir kolekcijų saugykla, kurią galima naudoti norint paspartinti automatizavimo pastangas. Ji suteikia patogų būdą atrasti ir pakartotinai naudoti bendruomenės sukurtą turinį. Galite naudoti `ansible-galaxy` komandą ieškoti, atsisiųsti ir įdiegti roles bei kolekcijas iš Ansible Galaxy.
ansible-galaxy search webserver
ansible-galaxy install geerlingguy.apache
Naudodami roles iš Ansible Galaxy galite sutaupyti laiko ir pastangų, pasinaudodami Ansible bendruomenės patirtimi. Tačiau prieš naudojant roles svarbu atidžiai jas peržiūrėti, kad įsitikintumėte, jog jos atitinka jūsų saugumo ir kokybės standartus.
Geriausios praktikos
Norint sukurti tvirtą ir prižiūrimą Ansible automatizavimą, būtina laikytis geriausių praktikų. Štai keletas rekomendacijų:
- Naudokite versijų kontrolę: Saugokite savo „playbook'us“, roles ir inventoriaus failus versijų kontrolės sistemoje, pavyzdžiui, Git. Tai leidžia sekti pakeitimus, bendradarbiauti su kitais ir grįžti prie ankstesnių versijų.
- Rašykite idempotentinius „playbook'us“: Užtikrinkite, kad jūsų „playbook'ai“ būtų idempotentūs, t. y., kad tos pačios konfigūracijos pritaikymas kelis kartus duotų tą patį rezultatą. Tai apsaugo nuo nenumatytų pakeitimų ir užtikrina nuoseklumą.
- Naudokite roles: Organizuokite savo „playbook'us“ į roles, kad skatintumėte moduliškumą ir kodo pakartotinį naudojimą.
- Naudokite kintamuosius: Naudokite kintamuosius, kad jūsų „playbook'ai“ būtų lankstesni ir daugkartinio naudojimo.
- Testuokite savo „playbook'us“: Kruopščiai testuokite savo „playbook'us“ prieš diegdami juos į gamybinę aplinką. Naudokite tokius įrankius kaip Molecule, kad automatizuotumėte testavimą.
- Saugokite savo kredencialus: Apsaugokite savo Ansible kredencialus, pvz., SSH raktus ir slaptažodžius. Naudokite Ansible Vault jautriems duomenims šifruoti.
- Dokumentuokite savo „playbook'us“: Aiškiai ir glaustai dokumentuokite savo „playbook'us“. Tai padės kitiems lengviau suprasti ir prižiūrėti jūsų automatizavimą.
- Nuolat atnaujinkite Ansible: Sekite naujausius Ansible leidimus, kad pasinaudotumėte naujomis funkcijomis, klaidų pataisymais ir saugumo pataisomis.
- Laikykitės nuoseklios pavadinimų suteikimo tvarkos: Naudokite aiškią ir nuoseklią pavadinimų suteikimo tvarką savo „playbook'ams“, rolėms ir kintamiesiems. Tai pagerins skaitomumą ir palaikomumą.
- Stebėkite savo automatizavimą: Stebėkite savo „playbook'ų“ vykdymą, kad nustatytumėte ir išspręstumėte bet kokias problemas. Naudokite Ansible Tower / AWX ar kitus stebėjimo įrankius, kad stebėtumėte „playbook'ų“ vykdymą ir našumą.
Pavyzdžiai iš realaus pasaulio
Ansible galima naudoti įvairioms IT užduotims automatizuoti. Štai keletas pavyzdžių iš realaus pasaulio:
- Debesijos infrastruktūros paruošimas: Automatizuokite virtualių mašinų, tinklų ir saugyklų kūrimą bei konfigūravimą debesijos aplinkose, tokiose kaip AWS, Azure ir Google Cloud. Pavyzdžiui, pasaulinė įmonė galėtų naudoti Ansible, kad automatiškai paruoštų identiškas aplinkas keliuose debesijos regionuose, užtikrindama dubliavimą ir minimizuodama delsą vartotojams visame pasaulyje.
- Programų diegimas: Automatizuokite programų, įskaitant žiniatinklio programas, duomenų bazes ir mikroservisus, diegimą keliuose serveriuose. Įsivaizduokite tarptautinę e. prekybos įmonę, diegiančią naują kodą vienu metu serveriuose Šiaurės Amerikoje, Europoje ir Azijoje.
- Konfigūracijos valdymas: Užtikrinkite nuoseklias konfigūracijas visose sistemose, įskaitant operacinės sistemos nustatymus, programinės įrangos versijas ir saugumo politiką. Tai galėtų apimti saugumo nustatymų standartizavimą visuose darbuotojų nešiojamuosiuose kompiuteriuose, nepriklausomai nuo jų buvimo vietos.
- Saugumo automatizavimas: Automatizuokite saugumo užduotis, tokias kaip pažeidžiamumų taisymas, ugniasienių valdymas ir sistemų auditas siekiant atitikties. Pavyzdžiui, automatinis saugumo pataisų taikymas visiems serveriams po pažeidžiamumo paskelbimo, užtikrinant greitą atsaką į galimas grėsmes.
- Duomenų bazių administravimas: Automatizuokite duomenų bazių užduotis, tokias kaip atsarginių kopijų kūrimas, atkūrimas ir schemos atnaujinimai. Finansų institucija galėtų naudoti Ansible, kad automatizuotų naktines duomenų bazių atsargines kopijas keliose geografinėse vietovėse.
- Tinklo automatizavimas: Automatizuokite tinklo konfigūravimo užduotis, tokias kaip maršrutizatorių, komutatorių ir ugniasienių konfigūravimas. Įsivaizduokite telekomunikacijų įmonę, naudojančią Ansible, kad automatiškai konfigūruotų tinklo įrenginius naujai įdiegtuose mobiliojo ryšio bokštuose.
Išvada
Ansible yra galingas ir universalus automatizavimo variklis, galintis žymiai pagerinti jūsų IT operacijų efektyvumą ir patikimumą. Įsisavinę pagrindines Ansible koncepcijas, pasinaudodami jo moduliais ir rolėmis bei laikydamiesi geriausių praktikų, galite automatizuoti platų užduočių spektrą ir supaprastinti savo infrastruktūros valdymą. Organizacijoms toliau diegiant DevOps ir debesijos kompiuteriją, Ansible vaidins vis svarbesnį vaidmenį skaitmeninėje transformacijoje, skatindamas automatizavimą. Nesvarbu, ar esate mažas startuolis, ar didelė įmonė su pasauliniu buvimu, Ansible gali padėti jums pasiekti didesnį efektyvumą, nuoseklumą ir lankstumą jūsų IT operacijose, galiausiai suteikiant konkurencinį pranašumą rinkoje. Svarbiausia pradėti nuo mažų dalykų, eksperimentuoti ir palaipsniui plėsti savo automatizavimo pastangas, įgyjant patirties ir pasitikėjimo. Pasinaudokite Ansible galia ir atskleiskite visą savo IT infrastruktūros potencialą.