Pospeševanje Ansible

Pospeševanje Ansible
Ni skrivnost, da s privzetimi nastavitvami Ansible svojega dela ne more opraviti zelo hitro. V članku bom izpostavil več razlogov za to in ponudil koristen minimum nastavitev, ki bodo zelo verjetno dejansko povečale hitrost vašega projekta.

Tukaj in spodaj razpravljamo o Ansible 2.9.x, ki je bil nameščen v sveže ustvarjeno virtualenv na vaš najljubši način.

Po namestitvi ustvarite datoteko »ansible.cfg« zraven vašega playbooka - ta lokacija vam bo omogočila prenos teh nastavitev skupaj s projektom, poleg tega se bodo naložile povsem samodejno.

Cevovod

Nekateri so morda že slišali za potrebo po uporabi cevovoda, to je ne kopiranja modulov v datotečni sistem ciljnega sistema, temveč prenos arhiva zip, zavitega v Base64, neposredno v stdin tolmača Python, drugi morda ne, toda dejstvo ostaja dejstvo: to nastavitev še vedno ostaja podcenjen. Na žalost nekatere priljubljene distribucije Linuxa, ki se uporabljajo za konfiguracijo sudo, privzeto niso zelo dobre - tako da je ta ukaz zahteval tty (terminal), zato je Ansible pustil to zelo uporabno nastavitev privzeto onemogočeno.

pipelining = True

Zbiranje dejstev

Ali ste vedeli, da Ansible s privzetimi nastavitvami za vsako igro sproži zbiranje dejstev za vse gostitelje, ki pri tem sodelujejo? Na splošno, če niste vedeli, zdaj veste. Da se to ne bi zgodilo, morate omogočiti način izrecne zahteve za zbiranje dejstev (izrecno) ali pametni način. V njem bodo zbrana dejstva samo od tistih gostiteljev, ki jih v prejšnjih igrah niste srečali.
UPD. Pri kopiranju boste morali izbrati eno od teh nastavitev.

gathering = smart|explicit

Ponovna uporaba ssh povezav

Če ste kdaj zagnali Ansible v načinu za odpravljanje napak (možnost "v", ponovljena od enega do devetkrat), ste morda opazili, da se povezave ssh nenehno vzpostavljajo in prekinjajo. Torej, tudi tukaj je nekaj tankosti.

Koraku ponovne vzpostavitve povezave ssh se lahko izognete na dveh ravneh hkrati: neposredno v odjemalcu ssh in pri prenosu datotek na upravljanega gostitelja iz upravitelja.
Za ponovno uporabo odprte povezave ssh preprosto posredujte potrebne ključe odjemalcu ssh. Nato bo začel delati naslednje: pri prvi vzpostavitvi ssh povezave bo dodatno ustvaril tako imenovano kontrolno vtičnico, ob nadaljnjih namestitvah bo preveril obstoj prav te vtičnice in v primeru uspeha ponovno uporabil obstoječo ssh povezavo. In da bo vse to imelo smisel, nastavimo čas za vzdrževanje povezave, ko je neaktivna. Več si lahko preberete v ssh dokumentacijo, v kontekstu Ansible pa preprosto uporabimo "posredovanje" potrebnih možnosti odjemalcu ssh.

ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"

Za ponovno uporabo že odprte povezave ssh pri prenosu datotek na upravljanega gostitelja samo določite drugo neznano nastavitev ssh_tranfer_method. Dokumentacije na to temo je izjemno skop in zavajajoče, ker ta možnost deluje zelo dobro! Ampak branje izvorna koda vam omogoča, da razumete, kaj točno se bo zgodilo: ukaz dd bo zagnan na upravljanem gostitelju in bo neposredno delal z želeno datoteko.

transfer_method = piped

Mimogrede, v veji »razvoj« obstaja tudi ta nastavitev ne gre nikamor.

Ne boj se noža, boj se vilic

Druga uporabna nastavitev so vilice. Določa število delovnih procesov, ki se bodo hkrati povezovali z gostitelji in izvajali naloge. Zaradi posebnosti Pythona kot jezika se uporabljajo procesi, ne niti, ker Ansible še vedno podpira Python 2.7 - brez asyncio za vas, tukaj nima smisla uvajati asinhronega vedenja! Privzeto teče Ansible pet delavcev, a če je pravilno vprašan, bo sprožil več:

forks = 20

Samo takoj vas opozorim, da lahko pride do nekaterih težav, povezanih z razpoložljivo količino pomnilnika na krmilnem stroju. Z drugimi besedami, seveda lahko nastavite forks=100500, a kdo je rekel, da bo delovalo?

Vse skupaj

Posledično so lahko potrebne nastavitve za ansible.cfg (format ini) videti takole:

[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped

In če želite vse skriti v običajnem YaML-popisu zdrave osebe, potem lahko izgleda nekako takole:

---
all:
  vars:
    ansible_ssh_pipelining: true
    ansible_ssh_transfer_method: piped
    ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m

Na žalost to ne bo delovalo z nastavitvami »gathering = smart/explicit« in »forks = 20«: njihovi ekvivalenti YaML ne obstajajo. Nastavimo jih v ansible.cfg ali pa jih posredujemo skozi spremenljivki okolja ANSIBLE_GATHERING in ANSIBLE_FORKS.

O Mitogenu
- Kje je to glede Mitogena? - imate pravico vprašati, dragi bralec. Nikjer v tem članku. Toda če ste res pripravljeni prebrati njegovo kodo in ugotoviti, zakaj se vaša knjiga z igrami zruši z Mitogenom, deluje pa dobro z vanilla Ansibleom, ali zakaj je ista knjiga z igrami prej dobro delovala, po posodobitvi pa je začela delati čudne stvari - no, Mitogen bi lahko bil vaše orodje. Uporabite ga, razumejte, pišite članke - z zanimanjem ga bom prebral.

Zakaj jaz osebno ne uporabljam Mitogena? Kajti Gladiolus deluje le, dokler so naloge res preproste in vse v redu. Če pa zaviješ malo v levo ali desno – to je to, pa smo prispeli: v odgovor nate leti peščica nerazločnih izjem, za popolnost slike pa manjka le pogost stavek “hvala vsem” , vsi so svobodni.” Na splošno preprosto ne želim izgubljati časa z iskanjem razlogov za naslednje "podzemno trkanje".

Nekatere od teh nastavitev so bile odkrite med postopkom branja izvorna koda vtičnik za povezavo pod samoumevnim imenom “ssh.py”. Rezultate branja delim v upanju, da bo še koga navdihnilo, da pogleda vire, jih prebere, preveri izvedbo, primerja z dokumentacijo - navsezadnje vam bo vse to prej ali slej prineslo pozitivne rezultate. Vso srečo!

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Katero od naslednjih nastavitev Ansible uporabljate za pospešitev svojih projektov?

  • 69,6%cevovod=true32

  • 34,8%zbiranje = pametno/eksplicitno16

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

  • 17,4%metoda_prenosa = cevovod8

  • 63,0%vilice = XXX29

  • 6,5%Nič od tega, samo Mitogen3

  • 8,7%Mitogen + bom zabeležil, katere od teh nastavitev4

Glasovalo je 46 uporabnikov. 21 uporabnik se je vzdržal.

Želite več o Ansible?

  • 78,3%ja, seveda 54

  • 21,7%ja, samo želim več hardcore stvari!15

  • 0,0%ne, in to ni potrebno za nič0

  • 0,0%ne, zapleteno je!!!0

Glasovalo je 69 uporabnikov. 7 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar