Få fart på Ansible

Få fart på Ansible
Det er ingen hemmelighet at Ansible med standardinnstillingene ikke kan gjøre jobben sin veldig raskt. I artikkelen vil jeg peke på flere årsaker til dette og tilby et nyttig minimum av innstillinger som, ganske mulig, faktisk vil øke hastigheten på prosjektet ditt.

Her og nedenfor diskuterer vi Ansible 2.9.x, som ble installert i en nyopprettet virtualenv på din favoritt måte.

Etter installasjonen, lag en "ansible.cfg"-fil ved siden av spilleboken din - denne plasseringen lar deg overføre disse innstillingene sammen med prosjektet, pluss at de lastes ganske automatisk.

Rørlegging

Noen har kanskje allerede hørt om behovet for å bruke pipelining, det vil si å ikke kopiere moduler til målsystemets filsystem, men overføre et zip-arkiv pakket inn i Base64 direkte til stdin til Python-tolken, men andre kan ikke, men faktum forblir et faktum: denne innstillingen er fortsatt undervurdert. Dessverre er noen av de populære Linux-distribusjonene som brukes til å konfigurere sudo ikke veldig bra som standard - slik at denne kommandoen krevde en tty (terminal), så Ansible lot denne svært nyttige innstillingen deaktivert som standard.

pipelining = True

Innhente fakta

Visste du at med standardinnstillinger, starter Ansible for hvert spill innsamlingen av fakta for alle verter som deltar i det? Generelt, hvis du ikke visste det, vet du det nå. For å forhindre at dette skjer, må du aktivere enten den eksplisitte forespørselsmodusen for å samle fakta (eksplisitt) eller den smarte modusen. I den vil fakta bare bli samlet inn fra de vertene som ikke ble møtt i tidligere skuespill.
UPD. Når du kopierer, må du velge en av disse innstillingene.

gathering = smart|explicit

Gjenbruk av ssh-tilkoblinger

Hvis du noen gang har kjørt Ansible i feilsøkingsmodus («v»-alternativet, gjentatt en til ni ganger), har du kanskje lagt merke til at ssh-tilkoblinger stadig blir opprettet og brutt. Så det er et par finesser her også.

Du kan unngå trinnet med å reetablere en ssh-forbindelse på to nivåer samtidig: både direkte i ssh-klienten, og når du overfører filer til den administrerte verten fra administratoren.
For å gjenbruke en åpen ssh-tilkobling, send ganske enkelt de nødvendige nøklene til ssh-klienten. Deretter vil den begynne å gjøre følgende: når den etablerer en ssh-forbindelse for første gang, vil den i tillegg opprette en såkalt kontrollsocket, ved påfølgende installasjoner vil den sjekke eksistensen av denne kontakten, og hvis den lykkes, gjenbruk eksisterende ssh-tilkobling. Og for å gjøre alt dette fornuftig, la oss sette tiden for å opprettholde forbindelsen når den er inaktiv. Du kan lese mer i ssh dokumentasjon, og i sammenheng med Ansible bruker vi ganske enkelt "videresending" av de nødvendige alternativene til ssh-klienten.

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

For å gjenbruke en allerede åpen ssh-tilkobling når du overfører filer til en administrert vert, spesifiser en annen ukjent innstilling ssh_tranfer_method. Dokumentasjonen om dette emnet er ekstremt stikkende og villedende, fordi dette alternativet fungerer ganske bra! Men lesing kildekode lar deg forstå nøyaktig hva som vil skje: dd-kommandoen vil bli lansert på den administrerte verten, og jobber direkte med ønsket fil.

transfer_method = piped

Forresten, i "utvikle"-grenen eksisterer denne innstillingen også går ikke noe sted.

Ikke vær redd for kniven, vær redd for gaffelen

En annen nyttig innstilling er gafler. Den bestemmer antall arbeidsprosesser som samtidig kobles til verter og utfører oppgaver. På grunn av særegenhetene til Python som språk, brukes prosesser, ikke tråder, fordi Ansible fortsatt støtter Python 2.7 - ingen asyncio for deg, det er ingen vits i å introdusere asynkron oppførsel her! Som standard kjører Ansible fem arbeidere, men hvis du blir spurt riktig, vil den starte flere:

forks = 20

Jeg advarer deg bare med en gang om at det kan være noen problemer her knyttet til tilgjengelig mengde minne på kontrollmaskinen. Med andre ord, du kan selvfølgelig sette gafler=100500, men hvem sa at det ville fungere?

Sette alt sammen

Som et resultat, for ansible.cfg (ini-format), kan de nødvendige innstillingene se slik ut:

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

Og hvis du vil skjule alt i en normal YaML-inventar for en sunn person, kan det se omtrent slik ut:

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

Dessverre vil dette ikke fungere med innstillingene "gathering = smart/explicit" og "forks = 20": deres YaML-ekvivalenter eksisterer ikke. Enten setter vi dem i ansible.cfg, eller så sender vi dem gjennom miljøvariablene ANSIBLE_GATHERING og ANSIBLE_FORKS.

Om Mitogen
– Hvor er dette om Mitogen? – du har rett til å spørre, kjære leser. Ingen steder i denne artikkelen. Men hvis du virkelig er klar til å lese koden og finne ut hvorfor spilleboken din krasjer med Mitogen, men fungerer bra med vanilje Ansible, eller hvorfor den samme spilleboken fungerte bra før, men etter en oppdatering begynte å gjøre rare ting - vel, Mitogen kan potensielt være verktøyet ditt. Bruk det, forstå det, skriv artikler - jeg vil lese det med interesse.

Hvorfor bruker jeg ikke Mitogen personlig? Fordi gladiolus fungerer det bare så lenge oppgavene er veldig enkle og alt er i orden. Men hvis du svinger litt til venstre eller høyre - det er det, vi har kommet: som svar flyr en håndfull utydelige unntak mot deg, og for å fullføre bildet, mangler det bare den vanlige setningen "takk alle sammen" , alle er fri." Generelt vil jeg bare ikke kaste bort tid på å finne ut årsakene til den neste "underjordiske bankingen".

Noen av disse innstillingene ble oppdaget under leseprosessen kildekode tilkoblingsplugin under det selvforklarende navnet "ssh.py". Jeg deler resultatene av lesingen i håp om at det vil inspirere noen andre til å se på kildene, lese dem, sjekke implementeringen, sammenligne med dokumentasjonen - tross alt før eller siden vil alt dette gi deg positive resultater. Lykke til!

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Hvilke av følgende Ansible-innstillinger bruker du for å få fart på prosjektene dine?

  • 69,6%pipelining=true32

  • 34,8%samling = smart/eksplisitt16

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

  • 17,4%transfer_method = piped8

  • 63,0%gafler = XXX29

  • 6,5%Ikke noe av dette, bare Mitogen3

  • 8,7%Mitogen + Jeg vil merke hvilke av disse innstillingene4

46 brukere stemte. 21 bruker avsto.

Vil du ha mer om Ansible?

  • 78,3%ja, selvfølgelig54

  • 21,7%ja, jeg vil bare ha mer hardcore ting!15

  • 0,0%nei, og det er ikke nødvendig for ingenting0

  • 0,0%nei, det er komplisert!!!0

69 brukere stemte. 7 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar