Përshpejtimi i Ansible

Përshpejtimi i Ansible
Nuk është sekret që me cilësimet e paracaktuara Ansible nuk mund ta bëjë punën e tij shumë shpejt. Në artikull do të theksoj disa arsye për këtë dhe do të ofroj një minimum të dobishëm cilësimesh që, me shumë mundësi, do të rrisin shpejtësinë e projektit tuaj.

Këtu dhe më poshtë do të diskutojmë Ansible 2.9.x, i cili u instalua në një virtualenv të sapokrijuar në mënyrën tuaj të preferuar.

Pas instalimit, krijoni një skedar "ansible.cfg" pranë librit tuaj të luajtjes - ky vend do t'ju lejojë të transferoni këto cilësime së bashku me projektin, plus ato do të ngarkohen plotësisht automatikisht.

Tubacionet

Disa mund të kenë dëgjuar tashmë për nevojën për të përdorur pipelining, domethënë, të mos kopjojnë module në sistemin e skedarëve të sistemit të synuar, por të transferojnë një arkivë zip të mbështjellë në Base64 direkt në stdin e interpretuesit Python, por të tjerët mund të jo, por fakti mbetet fakt: këtë cilësim ende mbetet e nënvlerësuar. Fatkeqësisht, disa nga shpërndarjet e njohura Linux të përdorura për të konfiguruar sudo jo shumë mirë si parazgjedhje - kështu që kjo komandë kërkonte një tty (terminal), kështu që Ansible e la këtë cilësim shumë të dobishëm të çaktivizuar si parazgjedhje.

pipelining = True

Mbledhja e fakteve

A e dini se me cilësimet e paracaktuara, Ansible për çdo luajtje fillon mbledhjen e fakteve për të gjithë hostet që marrin pjesë në të? Në përgjithësi, nëse nuk e dinit, tani e dini. Për të parandaluar që kjo të ndodhë, duhet të aktivizoni ose modalitetin e kërkesës eksplicite për mbledhjen e fakteve (të qarta) ose modalitetin inteligjent. Në të, do të mblidhen fakte vetëm nga ata mikpritës që nuk janë hasur në shfaqjet e mëparshme.
UPD. Kur kopjoni, do t'ju duhet të zgjidhni një nga këto cilësime.

gathering = smart|explicit

Ripërdorimi i lidhjeve ssh

Nëse e keni përdorur ndonjëherë Ansible në modalitetin e korrigjimit (opsioni "v", i përsëritur një deri në nëntë herë), mund të keni vënë re se lidhjet ssh janë duke u krijuar dhe prishur vazhdimisht. Pra, ka edhe disa hollësi këtu.

Mund të shmangni hapin e rivendosjes së një lidhjeje ssh në dy nivele njëherësh: si drejtpërdrejt në klientin ssh, ashtu edhe kur transferoni skedarë në hostin e menaxhuar nga menaxheri.
Për të ripërdorur një lidhje të hapur ssh, thjesht kaloni çelësat e nevojshëm te klienti ssh. Pastaj do të fillojë të bëjë sa më poshtë: kur krijon një lidhje ssh për herë të parë, do të krijojë gjithashtu një të ashtuquajtur prizë kontrolli, pas instalimeve të mëvonshme, do të kontrollojë ekzistencën e kësaj prize, dhe nëse është e suksesshme, do të ripërdorë lidhje ekzistuese ssh. Dhe për ta bërë të gjitha kuptimplotë, le të vendosim kohën për ruajtjen e lidhjes kur është joaktive. Mund të lexoni më shumë në dokumentacioni ssh, dhe në kontekstin e Ansible ne thjesht përdorim "përcjelljen" e opsioneve të nevojshme te klienti ssh.

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

Për të ripërdorur një lidhje tashmë të hapur ssh kur transferoni skedarë në një host të menaxhuar, thjesht specifikoni një cilësim tjetër të panjohur ssh_tranfer_method. Dokumentacioni për këtë temë është jashtëzakonisht dorështrënguar dhe mashtruese, sepse ky opsion funksionon mjaft mirë! Por duke lexuar Kodi i burimit ju lejon të kuptoni se çfarë saktësisht do të ndodhë: komanda dd do të lëshohet në hostin e menaxhuar, duke punuar drejtpërdrejt me skedarin e dëshiruar.

transfer_method = piped

Nga rruga, në degën "zhvilloni" ky cilësim ekziston gjithashtu nuk shkon askund.

Mos kini frikë nga thika, kini frikë nga piruni

Një tjetër cilësim i dobishëm janë pirunët. Ai përcakton numrin e proceseve të punës që do të lidhen njëkohësisht me hostet dhe do të kryejnë detyra. Për shkak të veçorive të Python-it si gjuhë, përdoren procese, jo thread, sepse Ansible ende mbështet Python 2.7 - nuk ka asyncio për ju, nuk ka kuptim të prezantoni sjellje asinkrone këtu! Si parazgjedhje, Ansible ekzekutohet pesë punëtorët, por nëse kërkohet saktë, do të nisë më shumë:

forks = 20

Unë thjesht ju paralajmëroj menjëherë se këtu mund të ketë disa vështirësi në lidhje me sasinë e disponueshme të memories në makinën e kontrollit. Me fjalë të tjera, sigurisht që mund të vendosni forks=100500, por kush tha se do të funksiononte?

Duke i bashkuar të gjitha

Si rezultat, për ansible.cfg (format ini), cilësimet e nevojshme 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 doni të fshehni gjithçka në një inventar normal YaML të një personi të shëndetshëm, atëherë mund të duket diçka si kjo:

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

Fatkeqësisht, kjo nuk do të funksionojë me cilësimet "mbledhje = zgjuar/e qartë" dhe "forks = 20": ekuivalentët e tyre YaML nuk ekzistojnë. Ose i vendosim në ansible.cfg, ose i kalojmë përmes variablave të mjedisit ANSIBLE_GATHERING dhe ANSIBLE_FORKS.

Rreth Mitogjenit
- Ku është kjo për Mitogen? - ke të drejtë të pyesësh lexues i dashur. Askund në këtë artikull. Por nëse jeni vërtet gati të lexoni kodin e tij dhe të kuptoni pse libri juaj i luajtjes përplaset me Mitogen, por funksionon mirë me vaniljen Ansible, ose pse i njëjti libër luajtjeje funksiononte mirë më parë, por pas një përditësimi filloi të bënte gjëra të çuditshme - mirë, Mitogen potencialisht mund të jetë mjeti juaj. Zbatojeni, kuptoni, shkruani artikuj - do ta lexoj me interes.

Pse nuk e përdor personalisht Mitogen? Sepse Gladiolus funksionon vetëm për sa kohë që detyrat janë vërtet të thjeshta dhe gjithçka është në rregull. Sidoqoftë, nëse kthehesh pak majtas ose djathtas - kjo është ajo, kemi mbërritur: si përgjigje, një grusht përjashtimesh të paqarta fluturojnë drejt jush, dhe për të plotësuar pamjen, gjithçka që mungon është fraza e zakonshme "faleminderit të gjithëve , të gjithë janë të lirë.” Në përgjithësi, thjesht nuk dua të humbas kohë për të gjetur arsyet e "trokitjes së nëndheshme" të radhës.

Disa nga këto cilësime u zbuluan gjatë procesit të leximit Kodi i burimit shtojca e lidhjes nën emrin vetë-shpjegues "ssh.py". Unë ndaj rezultatet e leximit me shpresën se do të frymëzojë dikë tjetër të shikojë burimet, t'i lexojë ato, të kontrollojë zbatimin, të krahasojë me dokumentacionin - në fund të fundit, herët a vonë e gjithë kjo do t'ju sjellë rezultate pozitive. Paç fat!

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

Cilin nga cilësimet e mëposhtme të Ansible përdorni për të shpejtuar projektet tuaja?

  • 69,6%tubacion=true32

  • 34,8%grumbullim = i zgjuar/eksplicit16

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

  • 17,4%metoda_transferimi = tubacion8

  • 63,0%pirunët = XXX29

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

  • 8,7%Mitogjen + Unë do të vërej se cilin nga këto cilësime4

46 përdorues kanë votuar. 21 përdorues abstenoi.

Dëshironi më shumë gjëra rreth Ansible?

  • 78,3%po, sigurisht54

  • 21,7%po, dua vetëm më shumë gjëra të forta!15

  • 0,0%jo, dhe nuk është e nevojshme për asgjë0

  • 0,0%jo, eshte e komplikuar!!!0

69 përdorues votuan. 7 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment