
Det Àr ingen hemlighet att Ansible med standardinstÀllningar kanske inte gör sitt jobb sÀrskilt snabbt. I artikeln kommer jag att pÄpeka nÄgra orsaker till detta och föreslÄ ett nyttigt minimum av instÀllningar som möjligtvis kan öka hastigheten pÄ ditt projekt.
Vi diskuterar hÀr och framöver Ansible 2.9.x, som installerades i en ny skapad virtualenv pÄ ditt favorit sÀtt.
Efter installationen skapar vi en fil "ansible.cfg" bredvid din playbook â en sĂ„dan placering gör det möjligt att flytta dessa instĂ€llningar med projektet, plus de kommer att laddas automatiskt.
Pipelinehantering
Att man bör anvĂ€nda pipelining, det vill sĂ€ga att inte kopiera moduler till filsystemet i mĂ„lmaskinen utan att överföra dem som en Base64-zipfil direkt till stdin för Python-tolkaren, har vissa kanske redan hört talas om, men faktum kvarstĂ„r: Ă€r fortfarande undervĂ€rderad. TyvĂ€rr har nĂ„gra populĂ€ra Linux-distributioner tidigare konfigurerat sudo ganska dĂ„ligt som standard â sĂ„ att detta kommando krĂ€vde en tty (terminal), sĂ„ i Ansible lĂ€mnades denna mycket anvĂ€ndbara instĂ€llning avstĂ€ngd som standard.
pipelining = TrueInsamling av fakta
Visste du att Ansible med standardinstÀllningar initierar insamling av fakta för varje play pÄ alla vÀrdar som ingÄr? Om du inte visste det, sÄ vet du det nu. För att förhindra detta kan man antingen aktivera det explicita lÀget för faktainsamling eller smartlÀge. I smartlÀget kommer fakta att samlas in endast frÄn de vÀrdar som inte har förekommit i tidigare plays.
UPD. Vid kopiering mÄste du vÀlja en av dessa instÀllningar.
gathering = smart|explicità teranvÀndning av ssh-anslutningar
Om du nÄgonsin har kört Ansible i debug-utdata-lÀge (med alternativet "v", upprepat mellan en och nio gÄnger), har du kanske mÀrkt att ssh-anslutningar hela tiden upprÀttas och kopplas ner. SÄ hÀr finns det ocksÄ ett par nyanser.
Att undvika steget med att Äterinstallera ssh-anslutningen kan göras pÄ tvÄ nivÄer: bÄde direkt i ssh-klienten och nÀr filer överförs till den hanterade vÀrden frÄn styrenheten.
För att ÄteranvÀnda en öppen ssh-anslutning rÀcker det med att bara överföra de nödvÀndiga nycklarna till ssh-klienten. DÄ kommer den att göra följande: vid första installationen av ssh-anslutningen skapa en sÄ kallad control socket, vid efterföljande anslutningar kontrollera existensen av just den socketen, och vid framgÄng ÄteranvÀnda den existerande ssh-anslutningen. För att detta ska ha mening stÀller vi in tiden för att behÄlla anslutningen vid inaktivitet. Mer information kan lÀsas i , och i kontexten av Ansible anvÀnder vi helt enkelt "passera" de nödvÀndiga alternativen till ssh-klienten.
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"För att ÄteranvÀnda en redan öppen ssh-anslutning vid överföring av filer till den hanterade vÀrden Àr det tillrÀckligt att ange en ytterligare okÀnd instÀllning ssh_tranfer_method. Dokumentationen om detta Àr oerhört och förvirrande, eftersom det hÀr alternativet faktiskt fungerar! Men att lÀsa ger insikt i vad som faktiskt kommer att hÀnda: pÄ den hanterade vÀrden kommer ett dd-kommando att köras som direkt arbetar med den nödvÀndiga filen.
transfer_method = pipedFör övrigt finns den hÀr instÀllningen ocksÄ i "develop"-grenen och .
Var inte rÀdd för kniven, var rÀdd för gaffeln
En annan anvĂ€ndbar instĂ€llning Ă€r forks. Den definierar antalet arbetsprocesser som kommer att ansluta till vĂ€rdar och utföra uppgifter samtidigt. PĂ„ grund av Python som programmeringssprĂ„k anvĂ€nds faktiskt processer, inte trĂ„dar, eftersom Ansible fortfarande stödjer Python 2.7 â ingen asyncio hĂ€r, ingen anledning att sprida asynkronitet! Som standard startar Ansible arbetare, men om man ber om det pĂ„ rĂ€tt sĂ€tt kan det starta fler:
forks = 20Men jag varnar direkt för att det kan uppstÄ vissa problem kopplade till det befintliga minnesutrymmet pÄ den styrande maskinen. Med andra ord, att sÀtta forks=100500 Àr förstÄs möjligt, men vem har sagt att det kommer att fungera?
LÄt oss sammanfatta allt
SÄ för ansible.cfg (ini-format) kan de nödvÀndiga instÀllningarna se ut sÄ hÀr:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
Och om du vill gömma allt i en snygg YaML-inventering för en sund mÀnniska kan det se ut ungefÀr sÄ hÀr:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
TyvÀrr, med instÀllningarna «gathering = smart/explicit» och «forks = 20» kommer detta inte att fungera: deras YaML-ekvivalenter finns inte. Antingen definierar vi dem i ansible.cfg, eller sÄ överför vi dem via miljövariabler ANSIBLE_GATHERING och ANSIBLE_FORKS.
Om Mitogen
â Men var Ă€r informationen om Mitogen hĂ€r? â kan du frĂ„ga, kĂ€ra lĂ€sare. I denna artikel finns den inte. Men om du verkligen Ă€r redo att lĂ€sa dess kod och förstĂ„ varför din playbook misslyckas med Mitogen, medan den fungerar normalt med det vanliga Ansible, eller varför samma playbook tidigare fungerade felfritt men efter en uppdatering nu beter sig mĂ€rkligt â ja dĂ„ kan Mitogen potentiellt vara ditt verktyg. AnvĂ€nd det, undersök det, skriv artiklar â jag kommer lĂ€sa med intresse.
Varför anvĂ€nder jag personligen inte Mitogen? För att det bara fungerar bra sĂ„ lĂ€nge uppgifterna Ă€r riktigt enkla och allt Ă€r i ordning. Men sĂ„ fort man svĂ€nger lite Ă„t vĂ€nster eller höger â dĂ„ kommer en mĂ€ngd otydliga undantag, och för att fullĂ€nda bilden saknas bara den typiska frasen «tack alla, ni Ă€r fria». SĂ„, jag vill helt enkelt inte spendera tid pĂ„ att ta reda pĂ„ orsakerna till Ă€nnu ett «underjordiskt ljud».
En del av dessa instĂ€llningar upptĂ€cktes under lĂ€sningen av anslutningspluginen med det talande namnet «ssh.py». Resultaten frĂ„n lĂ€sningen delar jag i hopp om att detta inspirerar flera att titta i kĂ€llkoden, lĂ€sa den, verifiera implementationen, jĂ€mföra med dokumentationen â för allt detta kommer förr eller senare att ge positiva resultat. Lycka till!
Endast registrerade anvÀndare kan delta i omröstningen. , tack.
Vilka av de nÀmnda Ansible-instÀllningarna för att pÄskynda dina projekt anvÀnder du?
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%Ingenting av detta, bara Mitogen3
8,7%Mitogen + jag kommer att notera vilka av dessa instÀllningar4
46 anvÀndare röstade. 21 anvÀndare avstod.
Vill du ha mer information om Ansible?
78,3%ja, sjÀlvklart54
21,7%ja, jag vill bara ha fler hardcore-grejer!15
0,0%nej, och jag vill inte ha det ens0
0,0%nej, för svÄrt!!!0
69 anvÀndare röstade. 7 anvÀndare avstod.
KĂ€lla: habr.com
