Ubrzavanje Ansiblea

Ubrzavanje Ansiblea
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: ovo podešavanje i dalje ostaje potcijenjen. Nažalost, neke od popularnih Linux distribucija koje se koriste za konfiguriranje sudoa nisu baš dobro prema zadanim postavkama - tako da je ova naredba zahtijevala tty (terminal), pa je Ansible ostavio ovu vrlo korisnu postavku onemogućenu prema defaultu.

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 dokumentacija, a u kontekstu Ansible-a jednostavno koristimo “prosljeđivanje” potrebnih opcija ssh klijentu.

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 škrt i obmanjujuće, jer ova opcija radi prilično dobro! Ali čitanje izvorni kod omogućava vam da shvatite šta će se tačno dogoditi: naredba dd će se pokrenuti na upravljanom hostu, direktno radeći sa željenom datotekom.

transfer_method = piped

Inače, u grani „razvoj“ postoji i ova postavka ne idem nigde.

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 pet radnika, ali ako se ispravno pita, pokrenut će viš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 izvorni kod priključak za povezivanje pod samorazumljivim nazivom “ssh.py”. Dijelim rezultate čitanja u nadi da će to inspirirati nekog drugog da pogleda izvore, pročita ih, provjeri implementaciju, uporedi s dokumentacijom - uostalom, prije ili kasnije sve će vam to donijeti pozitivne rezultate. Sretno!

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

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

Dodajte komentar