Përshpejtojmë Ansible

Përshpejtojmë Ansible
Nuk është sekret për askënd se me konfigurimet "default", Ansible mund ta bëjë punën e tij jo shumë shpejt. Në këtë artikull do të theksoj disa arsye për këtë dhe do të ofroj një minimum të dobishëm konfigurimesh, të cilat, është shumë e mundur, do të rrisin realisht shpejtësinë e punës së projektit tuaj.

Diskutojmë këtu dhe më pas mbi Ansible 2.9.x, i cili u instalua në një virtualenv të krijuar rishtazi me mënyrën tuaj të preferuar.

Pas instalimit krijoni afĂ«r playbook-ut tuaj skedarin "ansible.cfg" — kjo vendosje do tĂ« lejojĂ« transferimin e kĂ«tyre konfigurimeve sĂ« bashku me projektin, pĂ«r mĂ« tepĂ«r do tĂ« ngarkohen automatikisht.

Konteinerizimi

Dikush mund të ketë dëgjuar për nevojën për të përdorur pipelining, domethënë jo kopjimin e moduleve në sistemin e targetuar, por dërgimin e një arkivi zip të mbështjellë me Base64 drejtpërdrejt në stdin të interpretorit Python, ndonëse fakti mbetet fakt: kjo konfigurim këto konfigurations kanë mbetur të nënvlerësuara. Fatkeqësisht, një nga distribucionet e njohura të Linux gjithashtu ndihmoi që sudo të nuk është konfiguruar shumë mirë nga planifikimi, duke bërë që kjo komandë të kërkonte një tty (terminal), kështu që në Ansible kjo konfigurim shumë e dobishme mbetet e çaktivizuar nën default.

pipelining = True

Mblidhen fakte

A e dini se me konfigurimet e defaultit, Ansible për çdo play iniciaton mbledhjen e fakteve për të gjitha hostet që përfshihen? Nëse nuk e dinit, tani e know. Për të parandaluar këtë, duhet të aktivizoni ose modin e kërkesës eksplicite për mbledhjen e fakteve (explicit), ose modin e zgjuar (smart). Në këtë mod, faktet do të mblidhen vetëm nga ato hoste që nuk janë hasur në play-përpara.
UPD. Kur kopjoni, do t'ju duhet të zgjidhni një nga këto konfigurime.

gathering = smart|explicit

Rivendosja e lidhjeve ssh

Nëse keni ndonjëherë ekzekutuar Ansible në modalitetin e informacionit të depërtimit (opsioni 'v', i përsëritur nga një deri në nëntë herë), mund të keni vënë re se lidhjet ssh vazhdimisht krijohen dhe ndërpriten. Këtu gjithashtu ka disa nuanca.

Mund të shmangni fazën e riinstalimit të lidhjes ssh në dy nivele: si në klientin ssh, ashtu edhe gjatë transferimit të skedarëve në hostin e menaxhuar nga menaxhuesi.
Për të ripërdorur lidhjen e hapur ssh, mjafton t'i kaloni çelësat e nevojshëm klientit ssh. Atëherë ai do të fillojë të bëjë këtë: gjatë instalimit të parë të lidhjes ssh, do të krijojë një "control socket" dhe gjatë lidhjeve të ardhshme do të kontrollojë ekzistencën e këtij soketi dhe, nëse është e suksesshme, do të ripërdorë lidhjen ekzistuese ssh. Për të pasur kuptim, le të caktojmë kohën e ruajtjes së lidhjes gjatë inaktivitetit. Mund të lexoni më shumë në dokumentacionin për ssh, ndërsa në kontekstin e Ansible thjesht përdorim "kalimin" e opsioneve të nevojshme për klientin ssh.

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

Për të ripërdorur tashmë lidhjen ssh të hapur gjatë transferimit të skedarëve në hostin e menaxhuar, mjafton të tregoni një cilësim të panjohur ssh_transfer_method. Dokumentacioni për këtë është jashtëzakonisht i shkurtër dhe gjithashtu në jep konfuzion, sepse kjo mundësi është plotësisht funksionale! Por lexim i kodit burimor tregon se çfarë do të ndodhë: në hostin e menaxhuar do të ekzekutohet komanda dd, e cila punon drejtpërdrejt me skedarin e nevojshëm.

transfer_method = piped

Nga ana tjetër, në degën «develop» ky parametr ekziston gjithashtu dhe nuk ka shkruar askund..

Mos ki frikë nga thika, ki frikë nga piruni.

NjĂ« tjetĂ«r parametr i dobishĂ«m Ă«shtĂ« forks. Ai pĂ«rcakton numrin e proceseve punuese qĂ« do tĂ« lidhen njĂ«kohĂ«sisht me hostet dhe do tĂ« kryejnĂ« detyra. PĂ«r shkak tĂ« veçorive tĂ« Python si njĂ« gjuhĂ« programimi, pĂ«rdoren pikĂ«risht proceset dhe jo thread-at, sepse Ansible ende mbĂ«shtet Python 2.7 — asnjĂ« asyncio, nuk ka çfarĂ« tĂ« bĂ«jmĂ« me asinkroninĂ« kĂ«tu! Me defakt, Ansible nis pesĂ« punĂ«torĂ«, por nĂ«se kĂ«rkoni siç duhet, do tĂ« nisĂ« mĂ« shumĂ«:

forks = 20

Por menjëherë paralajmëroj se këtu mund të ketë disa vështirësi të lidhura me volumet ekzistuese të memories në makinën menaxhuese. Në të tjera fjalë, është e mundur të vendosësh forks=100500, por kush e tha se do të funksionojë?

Të gjitha së bashku

Pra, për ansible.cfg (format ini) parametrat e nevojshëm mund të duken kështu:

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

Dhe nëse dëshiron të fshehësh gjithçka në një YaML-inventory të shëndetshëm, ai mund të duket gjithashtu kështu:

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

Fatkeqësisht, me konfigurimet «gathering = smart/explicit» dhe «forks = 20» kjo nuk do të kalojë: ekvivalentët e tyre YaML nuk ekzistojnë. Ose i caktojmë në ansible.cfg, ose i kalojmë përmes variablave të mjedisit ANSIBLE_GATHERING dhe ANSIBLE_FORKS.

Për Mitogen
— Ku Ă«shtĂ« kĂ«tu pĂ«r Mitogen? — mund tĂ« pyesĂ«sh, lexues i nderuar. NĂ« kĂ«tĂ« artikull — askund. Por nĂ«se je vĂ«rtet gati tĂ« lexosh kodin e tij dhe tĂ« kuptosh pse playbook-u yt bie me Mitogen, ndĂ«rsa me Ansible-n e zakonshĂ«m punon normalisht, ose pse ky playbook deri tani ka punuar mirĂ«, dhe pas azhurnimit filloi tĂ« bĂ«jĂ« gjĂ«ra tĂ« çuditshme — atĂ«herĂ«, Mitogen potencialisht mund tĂ« jetĂ« instrumenti yt. PĂ«rdor, kupto, shkruaj artikuj — do t’i lexoj me interes.

Pse unĂ« personalisht nuk e pĂ«rdor Mitogen? Sepse ai funksionon vetĂ«m pĂ«r detyrat mjaft tĂ« thjeshta dhe kur gjithçka shkon mirĂ«. MegjithatĂ«, sa herĂ« qĂ« are duhet tĂ« devijoni pak majtas ose djathtas — mbaroi: kĂ«tu bien njĂ« mori pĂ«rjashtimesh tĂ« paqartĂ«, dhe pĂ«r tĂ« pĂ«rfunduar tablonĂ«, vetĂ«m fraza e zakonshme «faleminderit tĂ« gjithĂ«ve, jeni tĂ« lirë» mungon. PĂ«rgjithĂ«sisht, nuk dua tĂ« humbas kohĂ« duke zbuluar arsyet e njĂ« `tĂ« rĂ«nĂ« tĂ« nĂ«nshkruar` tĂ« fundit.

Disa nga kĂ«to cilĂ«sime u gjetĂ«n gjatĂ« leximin kodit burimor plugin-it me emrin e pĂ«rfolur «ssh.py». Po ndaj rezultatet e leximet shpresoj qĂ« kjo tĂ« frymĂ«zojĂ« edhe ndokĂ«nd tjetĂ«r tĂ« shikojĂ« nĂ« kodin burimor, ta lexojĂ«, ta verifikojĂ« implementimin, ta krahasojĂ« me dokumentacionin — sepse tĂ« gjitha kĂ«to pĂ«rfundimisht do t'ju sjellin rezultate pozitive. Suksese!

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.

Cilat nga cilësimet e Ansible-it për të përshpejtuar projektet tuaja përdorni?

  • 69,6%pipelining = true32

  • 34,8%gathering = smart/explicit16

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

  • 17,4%transfer_method = piped8

  • 63,0%forks = XXX29

  • 6,5%AsgjĂ« nga kĂ«to, vetĂ«m Mitogen3

  • 8,7%Mitogen + do tĂ« theksoj, cilat nga kĂ«to cilĂ«sime4

46 përdorues votuan. 21 përdorues u përmbajtën.

Keni dëshirë për më shumë informacione mbi Ansible?

  • 78,3%po, sigurisht54

  • 21,7%po, vetĂ«m dua mĂ« shumĂ« gjĂ«ra hardcore!15

  • 0,0%jo, as nuk mĂ« duhet0

  • 0,0%jo, shumĂ« e komplikuar!!!0

69 përdorues kanë votuar. 7 përdorues janë abstenuar.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster