Ansible

Serveru automatizācija ir vienmēr bijusi tāda interesanta padarīšana, atceros pašos pirmsākumos to darīju uz katra servera kopējot kaut kādu scriptu kopumu kas veica kaut kādu noteiktu darbību, tad sāka palikt grūti uzturēt šos scriptus un tam atmetu ar roku, daudz ko darīju ar rociņām, jo tā vienkāršāk. Tad parādijās visādi cfengine, puppet, chef (tie par kuriem šajā periodā biju dzirdējis), viss jau būtu labi, tikai mani biedēja fakts, ka jebkurā gadījumā lietojot šo rīku man jāuztraucas lai konekcijas starp serveri un klientu darbotos, kā arī lai sāktu tas viss darboties ir vispirms jāsāk ar klienta instalēšanu uz servera. Jūs teiksiet tas jau viegli un tā, bet es teikšu jā viegli, bet tomēr vēlviena lieta kas griežas uz servera un var atmirt. Tad nāca mana šobrīdējā darbavieta un es iepazinos ar Ansible (github repo). 

Ansible atšķirībā no iepriekš pieminētajiem rīkiem neprasa instalēt klientu uz servera, ansible izmanto ssh konfigurāciju labošanai/veidošanai. Par cik diezgan grūti iedomāties kādu serveri kurš ir bez ssh pieejas, tas nozīmē ka nekādi papildus porti uz serveriem nav jāver, papildus tam es varu mainīt serveru konfigurāciju neveicot nekādas izmaiņas centralizētā vietā. 

Ansible konfigurācijas apraksti tiek veikti salīdzinoši vieglā valodā yaml. Pati ansible ir rakstīta Python programmēšanas valodā, kas arī uz serveriem jau ir uzinstalēta pēc noklusējuma. 

Kādos gadījumos ansible mums var palīdzēt? Principā jebkurā, atliek tikai izvēlēties veidu kā kaut ko panākt, vai tas ir modulis, vai scripts.

Pirmais kas nepieciešams ir serveru saraksts, sākotnēji mēs sākām izmantot klasisko veidu serveru sarakstam, tas ir ini stila konfigurācijas fails

Kad serveru daudzums un grupu daudzums auga mēģinājām dalīt vairākos failos, bet tad sāka veidoties bardaks un bija problēmas izsekot kurš hosts ir kurā grupā utt.. Sāka parādīties nepieciešamība pēc dinamiskā serveru saraksta, jo serveru saraksta failā sāka veidoties bardaks. Ansible jau pēc noklusējuma atbalsta dinamisku serveru sarakstu, kur piemēram python scripts kā mums izmantojot API pieprasījumus uzģenerē json kā inventory. Protams Redhat piedāvā tādu makstas rīku kā Ansible tower, kas principā ir ļoti labs, bet maksā arī labas naudiņas, par to citreiz.
Ansibli iespējams darbināt vairākos veidos

  • pirmais ir klasiskais ad-hoc veids izmantojot ansible komandu
  • izmantojot iespēju laist ansible spēli izmantojot ansible-playbook komandu
  • izmantojot ansible –pull

ad-hoc komanda ir visātrākais veids kā izdarīt konkrētas lietas uz vairākiem serveriem vienlaicīgi izsaucot konkrēti nepieciešamo moduli ar parametriem. Papildus tam nav nepieciešama nekāda iepriekš veidota konfigurācija. Piemēram var paskatīties uz visiem serveriem kādā grupā kāds ir laiks.

ansible -i inventory -m shell -a "date" grupa3 (dinamiskā serveru saraksta gadījumā mēs inventory vietā norādīsim inventory.py un ansible zinās ka scripts ir jāizpilda un iegūs dinamisko serveru sarakstu)

Šī komanda atgriezīs rezultātu no katra servera kurš ir grupā grupa3

Ansible Oficiālo moduļu saraksts, bet pameklējot var atrast arī kaut ko neoficiālu vai jebkurā gadījumā ja kaut kā nav un ir nepieciešamība ar nelielām python zināšanām to var izveidot (mums ir iekšējs modulis kas maina serveriem paroles un saglabā tās paroļu repozitorijā – tas nodrošina to ka neviens no darbiniekiem nezin root lietotāja paroli kamēr nav paskatījies iekš paroļu repozitorija

Šādā veidā mēs varam izdarīt pilnīgi visu ko mēs būtu darījuši ielogojoties katrā no serveriem ar vienu komandu. Šis ir veids kā sākt lietot ansible neiedziļinoties sarežtīgās procedūrās. 

Nākošais veids jau ir izmantojot ansibles spēli (ansible-playbook) šis jau ir nedaudz sarežģītāks veids jo spēj izpildīt vairākas darbības pēc kārtas. 

Lai izmantotu ansible-playbook pirmais kas ir nepieciešams ir spēles grāmata kas ir aprakstīta yaml

Šī vienkāršā spēle nodrošinās to, ka uz servera ir uzinstalēta paka httpd un tā ir pēdējā pieejamā, un tā ir piestartēta. Tālāk jau uzdevumus var pārcelt uz lomām, un tad šeit norādīt nevis uzdevumus, bet lomas kuras jāizpilda. 

Lai ansible spēle zinātu ko darīt varam veidot vērtību failus gan hostiem gan grupām 

Ansible nodrošina arī drošu vērtību glabāšanu secure.yml failā izmantojot ansible-vault, kam nepieciešama parole lai atšifrētu. 

Lomas direktoriju shēma:

Kā jau pēc faila paplašinājuma noprotam tad viss tiek aprakstīts yaml formātā.

Handlers (pat nezinu kā latviski nosaukt – apstrādātāji?) ir lieta kas ir noderīga piemēram vienas aplikācijas vairāku konfigurācijas failu atjaunošanās gadījumā, nebūs jārestartē aplikācija pēc katra faila izmaiņas, bet tiek nosūtīta komanda ka būs jarestartē aplikācija un tas notiks pašās spēles beigās, protams ja neviens no konfigurācijas failiem nav izlabots spēles laikā, tad aplikācijas restartēšana nenotiks.

šādi var veidot sarežģītas konfigurācijas norādot katrai grupai/hostam savas vērtības, bet izmantojot vienu veidni.

Veidnēm tiek izmantots  jinja2, kas ir veidņu valoda rakstīta priekš python. Šim es daudz nepieskaršos, par cik šī lieta ir diezgan vienkārša un saprotama.

Mūsu gadījumā mēs ar ansibli daram visu, tajā skaitā arī instalējam jaunus serverus, tad tos sakonfigurējam pēc prasībām izmantojot kādu no lomām. Lomas bieži vien ir atsevišķas priekš OS domātas lomas, ka arī lomas kas pat ir sadalītas vairākās daļās kādas aplikācijas uzlikšanai uz servera.

Cerams ka neliels ieskats ir izdevies, piedodiet par haotiskumu bet reizēm tā gadās, nu labi vienmēr :)

 

This entry was posted in GNU/Linux. Bookmark the permalink.
%d bloggers like this: