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:
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_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
transfer_method = piped
Usput, u grani "razvoj" ova postavka također postoji
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
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
U anketi mogu sudjelovati samo registrirani korisnici.
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