Nije tajna da sa podrazumevanim postavkama Ansible ne može brzo da obavi svoj posao. U članku ću ukazati na nekoliko razloga za to i ponuditi koristan minimum postavki koje će, vrlo moguće, zapravo povećati brzinu vašeg projekta.
Ovdje i ispod razmatramo Ansible 2.9.x, koji je instaliran u svježe kreirani virtualenv na vaš omiljeni način.
Nakon instalacije, kreirajte “ansible.cfg” datoteku pored vašeg playbook-a - ova lokacija će vam omogućiti da prenesete ove postavke zajedno s projektom, plus one će se učitati prilično automatski.
Cjevovod
Neki su možda već čuli za potrebu za korištenjem pipelininga, odnosno ne kopiranja modula u sistem datoteka ciljnog sistema, već prijenosa zip arhive umotane u Base64 direktno na stdin Python interpretera, ali drugi možda ne, ali činjenica je da ostaje činjenica:
pipelining = True
Prikupljanje činjenica
Jeste li znali da sa zadanim postavkama, Ansible za svaku igru inicira prikupljanje činjenica za sve domaćine koji učestvuju u njoj? Generalno, ako niste znali, sada znate. Da biste spriječili da se to dogodi, morate omogućiti ili način eksplicitnog zahtjeva za prikupljanje činjenica (eksplicitni) ili pametni način rada. U njemu će se prikupljati činjenice samo od onih domaćina koje se nisu susrele u prethodnim predstavama.
UPD. Prilikom kopiranja, morat ćete odabrati jednu od ovih postavki.
gathering = smart|explicit
Ponovno korištenje ssh veza
Ako ste ikada pokrenuli Ansible u modu za otklanjanje grešaka (opcija "v", ponovljena jedan do devet puta), možda ste primijetili da se ssh veze stalno stvaraju i prekidaju. Dakle, i ovdje postoji nekoliko suptilnosti.
Možete izbjeći korak ponovnog uspostavljanja ssh veze na dva nivoa odjednom: i direktno u ssh klijentu, i prilikom prijenosa datoteka na upravljani host iz upravitelja.
Da ponovo koristite otvorenu ssh vezu, jednostavno prosledite potrebne ključeve ssh klijentu. Tada će početi raditi sljedeće: pri prvom uspostavljanju ssh konekcije dodatno će kreirati tzv. kontrolnu utičnicu, nakon naknadnih instalacija provjerit će postojanje baš te utičnice i ako je uspješna, ponovo koristiti postojeća ssh veza. A da bi sve ovo imalo smisla, postavimo vrijeme za održavanje veze kada je neaktivna. Više možete pročitati u
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"
Za ponovno korištenje već otvorene ssh veze prilikom prijenosa datoteka na upravljani host, samo navedite drugu nepoznatu postavku ssh_tranfer_method. Dokumentacija na ovu temu je izuzetno
transfer_method = piped
Inače, u grani „razvoj“ postoji i ova postavka
Ne boj se noža, plaši se viljuške
Još jedna korisna postavka je viljuške. Određuje broj radnih procesa koji će se istovremeno povezati na hostove i izvršavati zadatke. Zbog specifičnosti Pythona kao jezika, koriste se procesi, a ne niti, jer Ansible još uvijek podržava Python 2.7 - nema asyncio za vas, nema smisla uvoditi asinhrono ponašanje ovdje! Po defaultu se Ansible pokreće
forks = 20
Samo vas odmah upozoravam da ovdje može doći do poteškoća u vezi s dostupnom količinom memorije na kontrolnoj mašini. Drugim riječima, možete, naravno, postaviti forks=100500, ali ko je rekao da će to raditi?
Stavljajući sve zajedno
Kao rezultat toga, za ansible.cfg (ini format), potrebne postavke mogu izgledati ovako:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
A ako želite da sakrijete sve u normalnom YaML-inventaru zdrave osobe, onda to može izgledati otprilike ovako:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
Nažalost, ovo neće raditi s postavkama “gathering = smart/explicit” i “forks = 20”: njihovi YaML ekvivalenti ne postoje. Ili ćemo ih postaviti u ansible.cfg, ili ih proslijediti kroz varijable okruženja ANSIBLE_GATHERING i ANSIBLE_FORKS.
O Mitogenu
- Gde je ovo o Mitogenu? - imate pravo da pitate, dragi čitaoče. Nigdje u ovom članku. Ali ako ste zaista spremni da pročitate njegov kod i shvatite zašto se vaš priručnik ruši s Mitogenom, ali dobro radi sa vanilla Ansibleom, ili zašto je isti priručnik prije radio dobro, ali nakon ažuriranja počeo je raditi čudne stvari - pa, Mitogen potencijalno može biti vaš alat. Primijenite, razumite, pišite članke - čitat ću to sa zanimanjem.
Zašto ja lično ne koristim Mitogen? Jer Gladiolus radi samo dok su zadaci zaista jednostavni i dok je sve u redu. Međutim, ako skrenete malo ulijevo ili udesno - to je to, stigli smo: kao odgovor leti vam pregršt nejasnih izuzetaka, a da slika bude upotpunjena, nedostaje samo uobičajena fraza "hvala svima , svi su slobodni.” Općenito, jednostavno ne želim gubiti vrijeme na otkrivanje razloga sljedećeg "podzemnog kucanja".
Neke od ovih postavki su otkrivene tokom procesa čitanja
Samo registrovani korisnici mogu učestvovati u anketi.
Koje od sljedećih Ansible postavki koristite da biste ubrzali svoje projekte?
-
69,6%pipelining=true32
-
34,8%okupljanje = pametno/eksplicitno16
-
52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24
-
17,4%transfer_method = piped8
-
63,0%viljuške = XXX29
-
6,5%Ništa od ovoga, samo Mitogen3
-
8,7%Mitogen + Napomenuću koje od ovih postavki4
Glasalo je 46 korisnika. 21 korisnik je bio uzdržan.
Želite više stvari o Ansibleu?
-
78,3%da, naravno54
-
21,7%da, samo želim više hardcore stvari!15
-
0,0%ne, i nije potrebno za ništa0
-
0,0%ne, komplikovano je!!!0
Glasalo je 69 korisnika. Uzdržano je bilo 7 korisnika.
izvor: www.habr.com