Ubrzavanje Ansiblea

Ubrzavanje Ansiblea
Nije tajna da sa zadanim postavkama Ansible ne može vrlo brzo obaviti svoj posao. U članku ću istaknuti nekoliko razloga za to i ponuditi koristan minimum postavki koje će, vrlo vjerojatno, zapravo povećati brzinu vašeg projekta.

Ovdje i u nastavku raspravljamo o Ansible 2.9.x, koji je instaliran u svježe stvorenom virtualenv-u na vaš omiljeni način.

Nakon instalacije, stvorite datoteku “ansible.cfg” pored svoje knjige igranja - ova lokacija će vam omogućiti prijenos ovih postavki zajedno s projektom, plus one će se automatski učitavati.

Cjevovod

Neki su možda već čuli o potrebi korištenja cjevovoda, odnosno ne kopiranja modula u datotečni sustav ciljnog sustava, već prijenosa zip arhive omotane u Base64 izravno u stdin Python interpretera, ali drugi možda neće, ali činjenica ostaje činjenica: ovu postavku i dalje ostaje podcijenjen. Nažalost, neke od popularnih distribucija Linuxa koje se koriste za konfiguraciju sudoa prema zadanim postavkama nisu baš dobre - tako da je ova naredba zahtijevala tty (terminal), pa je Ansible ovu vrlo korisnu postavku ostavio onemogućenom prema zadanim postavkama.

pipelining = True

Prikupljanje činjenica

Jeste li znali da uz zadane postavke Ansible za svaku igru ​​pokreće prikupljanje činjenica za sve hostove koji u njoj sudjeluju? Općenito, ako niste znali, sada znate. Kako biste spriječili da se to dogodi, trebate omogućiti ili način eksplicitnog zahtjeva za prikupljanje činjenica (eksplicitno) ili pametni način rada. U njemu će se prikupljati činjenice samo od onih domaćina koji se nisu susreli u prethodnim igrama.
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 pogrešaka (opcija "v", ponovljena jedan do devet puta), možda ste primijetili da se ssh veze stalno uspostavljaju i prekidaju. Dakle, i ovdje postoji nekoliko suptilnosti.

Možete izbjeći korak ponovnog uspostavljanja ssh veze na dvije razine odjednom: izravno u ssh klijentu i prilikom prijenosa datoteka na upravljano računalo iz upravitelja.
Za ponovno korištenje otvorene ssh veze jednostavno proslijedite potrebne ključeve ssh klijentu. Zatim će početi raditi sljedeće: prilikom prve uspostave ssh veze dodatno će napraviti tzv. control socket, pri sljedećim instalacijama provjeravati postojanje upravo tog socketa, te ako uspije ponovno 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, au kontekstu Ansiblea 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 o ovoj temi je izuzetno velika skup i obmanjujuće, jer ova opcija radi prilično dobro! Ali čitanje izvorni kod omogućuje vam da shvatite što će se točno dogoditi: naredba dd pokrenut će se na upravljanom hostu, izravno radeći sa željenom datotekom.

transfer_method = piped

Usput, u grani "razvoj" ova postavka također postoji ne idući nikamo.

Ne boj se noža, boj se viljuške

Još jedna korisna postavka su vilice. Određuje broj radnih procesa koji će se istovremeno povezivati ​​s hostovima i izvršavati zadatke. Zbog osobitosti Pythona kao jezika, koriste se procesi, a ne niti, jer Ansible još uvijek podržava Python 2.7 - nema asinkronog ponašanja za vas, nema smisla uvoditi asinkrono ponašanje ovdje! Prema zadanim postavkama Ansible se izvodi pet radnicima, ali ako se točno pita, pokrenut će više:

forks = 20

Samo vas odmah upozoravam da bi ovdje moglo biti nekih poteškoća vezanih uz dostupnu količinu memorije na kontrolnom stroju. Drugim riječima, možete, naravno, postaviti forks=100500, ali tko je rekao da će to raditi?

Sve skupa

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 sve sakriti 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 "okupljanje = pametno/eksplicitno" i "forks = 20": njihovi YaML ekvivalenti ne postoje. Ili ih postavljamo u ansible.cfg ili ih prosljeđujemo kroz varijable okruženja ANSIBLE_GATHERING i ANSIBLE_FORKS.

O Mitogenu
- Gdje je ovo o Mitogenu? - imate pravo pitati, dragi čitatelju. Nigdje u ovom članku. Ali ako ste stvarno spremni pročitati njegov kod i shvatiti zašto se vaš playbook ruši s Mitogenom, ali radi dobro s vanilla Ansibleom, ili zašto je isti playbook prije dobro radio, ali je nakon ažuriranja počeo raditi čudne stvari - pa, Mitogen mogao potencijalno biti vaš alat. Primijenite ga, razumite, napišite članke - čitat ću ga sa zanimanjem.

Zašto ja osobno ne koristim Mitogen? Jer gladiola radi samo dok su zadaci zaista jednostavni i sve u redu. No, okrenete li se malo ulijevo ili udesno - to je to, stigli smo: kao odgovor na vas leti pregršt nerazgovjetnih iznimaka, a da slika bude potpuna, nedostaje samo uobičajena rečenica “hvala svima” , svi su slobodni.” Općenito, jednostavno ne želim gubiti vrijeme na otkrivanje razloga sljedećeg "podzemnog kucanja".

Neke od ovih postavki otkrivene su tijekom procesa čitanja izvorni kod dodatak za povezivanje pod samorazumljivim imenom “ssh.py”. Dijelim rezultate čitanja u nadi da će potaknuti još nekoga da pogleda izvore, pročita ih, provjeri implementaciju, usporedi s dokumentacijom - uostalom, prije ili kasnije sve će vam to donijeti pozitivne rezultate. Sretno!

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Koje od sljedećih Ansible postavki koristite za ubrzavanje svojih projekata?

  • 69,6%cjevovod=true32

  • 34,8%okupljanje = pametno/eksplicitno16

  • 52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24

  • 17,4%prijenos_metoda = cjevovodno8

  • 63,0%vilice = XXX29

  • 6,5%Ništa od ovoga, samo Mitogen3

  • 8,7%Mitogen + Zabilježit ću koje od ovih postavki4

Glasovalo je 46 korisnika. 21 korisnik je bio suzdržan.

Želite više informacija o Ansibleu?

  • 78,3%da, naravno 54

  • 21,7%da, samo želim još hardcore stvari!15

  • 0,0%ne, i nije potrebno za ništa0

  • 0,0%ne, komplicirano je!!!0

Glasovalo je 69 korisnika. Suzdržano je bilo 7 korisnika.

Izvor: www.habr.com

Dodajte komentar