Urýchlenie Ansible

Urýchlenie Ansible
Nie je žiadnym tajomstvom, že s predvolenými nastaveniami Ansible nemôže robiť svoju prácu veľmi rýchlo. V článku poukážem na niekoľko dôvodov a ponúknem užitočné minimum nastavení, ktoré dosť možno skutočne zvýšia rýchlosť vášho projektu.

Tu a nižšie diskutujeme o Ansible 2.9.x, ktorý bol nainštalovaný v čerstvo vytvorenom virtualenv vašim obľúbeným spôsobom.

Po inštalácii vytvorte súbor „ansible.cfg“ vedľa vášho playbooku – toto umiestnenie vám umožní preniesť tieto nastavenia spolu s projektom a navyše sa načítajú celkom automaticky.

Potrubné vedenie

Niektorí už možno počuli o potrebe použiť pipelining, teda nekopírovať moduly do súborového systému cieľového systému, ale preniesť zip archív zabalený v Base64 priamo do stdin interpreta Pythonu, iní však možno nie, no fakt zostáva faktom: toto nastavenie stále zostáva podceňovaný. Bohužiaľ, niektoré z populárnych distribúcií Linuxu používané na konfiguráciu sudo nie sú v predvolenom nastavení veľmi dobre - takže tento príkaz vyžadoval tty (terminál), takže Ansible nechal toto veľmi užitočné nastavenie predvolene vypnuté.

pipelining = True

Zhromažďovanie faktov

Vedeli ste, že s predvolenými nastaveniami Ansible pre každú hru iniciuje zhromažďovanie faktov pre všetkých hostiteľov, ktorí sa jej zúčastňujú? Vo všeobecnosti, ak ste nevedeli, teraz viete. Aby ste tomu zabránili, musíte povoliť režim explicitnej požiadavky na zhromažďovanie faktov (explicitné) alebo inteligentný režim. V ňom sa budú zbierať fakty len od tých hostiteľov, s ktorými sa v predchádzajúcich hrách nestretli.
UPD. Pri kopírovaní budete musieť vybrať jedno z týchto nastavení.

gathering = smart|explicit

Opätovné použitie ssh pripojení

Ak ste niekedy spustili Ansible v režime ladenia (možnosť „v“, opakovaná jeden až deväťkrát), možno ste si všimli, že sa neustále vytvárajú a prerušujú pripojenia ssh. Takže aj tu je pár jemností.

Môžete sa vyhnúť kroku opätovného nadviazania ssh pripojenia na dvoch úrovniach naraz: na oboch úrovniach priamo v klientovi ssh a pri prenose súborov na spravovaného hostiteľa z manažéra.
Ak chcete znova použiť otvorené pripojenie ssh, jednoducho odovzdajte potrebné kľúče klientovi ssh. Potom začne robiť nasledovné: pri prvom nadviazaní ssh spojenia vytvorí dodatočne takzvanú riadiacu zásuvku, pri následných inštaláciách skontroluje existenciu práve tejto zásuvky, a ak bude úspešná, znovu použije existujúce ssh pripojenie. A aby to celé dávalo zmysel, nastavme čas na udržanie pripojenia, keď je neaktívne. Viac si môžete prečítať v ssh dokumentáciua v kontexte Ansible jednoducho používame „preposielanie“ potrebných možností ssh klientovi.

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

Ak chcete znova použiť už otvorené pripojenie ssh pri prenose súborov do spravovaného hostiteľa, stačí zadať iné neznáme nastavenie ssh_transfer_method. Dokumentácia na túto tému je mimoriadne lakomý a zavádzajúce, pretože táto možnosť funguje celkom dobre! Ale čítanie zdrojový kód vám umožní pochopiť, čo sa presne stane: príkaz dd sa spustí na spravovanom hostiteľovi, ktorý priamo pracuje s požadovaným súborom.

transfer_method = piped

Mimochodom, vo vetve „develop“ toto nastavenie tiež existuje nikam nejdem.

Nebojte sa noža, nebojte sa vidličky

Ďalším užitočným nastavením sú vidlice. Určuje počet pracovných procesov, ktoré sa budú súčasne pripájať k hostiteľom a vykonávať úlohy. Kvôli zvláštnostiam Pythonu ako jazyka sa používajú procesy, nie vlákna, pretože Ansible stále podporuje Python 2.7 – žiadne asyncio pre vás, nemá zmysel zavádzať asynchrónne správanie! V predvolenom nastavení beží Ansible päť pracovníkov, ale ak sa opýtate správne, spustí ďalšie:

forks = 20

Okamžite vás varujem, že sa tu môžu vyskytnúť určité ťažkosti súvisiace s dostupným množstvom pamäte na riadiacom stroji. Inými slovami, môžete, samozrejme, nastaviť forks=100500, ale kto povedal, že to bude fungovať?

Dávať to všetko dokopy

V dôsledku toho môžu potrebné nastavenia pre ansible.cfg (formát ini) vyzerať takto:

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

A ak chcete všetko skryť v normálnom inventári YaML zdravého človeka, môže to vyzerať takto:

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

Bohužiaľ to nebude fungovať s nastaveniami „zhromažďovanie = smart/explicit“ a „forks = 20“: ich ekvivalenty YaML neexistujú. Buď ich nastavíme v ansible.cfg, alebo ich prenesieme cez premenné prostredia ANSIBLE_GATHERING a ANSIBLE_FORKS.

O mitogéne
- Kde je to o Mitogene? - máte právo pýtať sa, milý čitateľ. Nikde v tomto článku. Ale ak ste naozaj pripravení prečítať si jeho kód a zistiť, prečo vaša príručka zlyhá s Mitogenom, ale funguje dobre s vanilkou Ansible, alebo prečo tá istá príručka fungovala dobre predtým, ale po aktualizácii začala robiť zvláštne veci - dobre, Mitogen by mohol môže byť vaším nástrojom. Aplikujte to, pochopte to, píšte články - so záujmom si to prečítam.

Prečo ja osobne nepoužívam Mitogen? Pretože gladiolus funguje len dovtedy, kým sú úlohy naozaj jednoduché a všetko je v poriadku. Ak sa však trochu otočíte doľava alebo doprava – to je všetko, dorazili sme: v reakcii na vás vyletí hŕstka nevýrazných výnimiek a na dokreslenie chýba už len obyčajná veta „ďakujem všetkým , všetci sú slobodní." Vo všeobecnosti nechcem strácať čas zisťovaním dôvodov ďalšieho „podzemného klepania“.

Niektoré z týchto nastavení boli objavené počas procesu čítania zdrojový kód plugin pre pripojenie pod samovysvetľujúcim názvom „ssh.py“. Zdieľam výsledky čítania v nádeji, že to inšpiruje niekoho iného, ​​aby si prezrel zdroje, prečítal ich, skontroloval implementáciu, porovnal s dokumentáciou - to všetko vám napokon skôr či neskôr prinesie pozitívne výsledky. Veľa štastia!

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Ktoré z nasledujúcich nastavení Ansible používate na zrýchlenie svojich projektov?

  • 69,6%pipelining=true32

  • 34,8%zhromažďovanie = inteligentné/explicitné16

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

  • 17,4%transfer_method = piped8

  • 63,0%vidlice = XXX29

  • 6,5%Nič z toho, len Mitogen3

  • 8,7%Mitogen + poznamenám, ktoré z týchto nastavení4

Hlasovalo 46 užívateľov. 21 používateľ sa zdržal hlasovania.

Chcete viac informácií o Ansible?

  • 78,3%áno, samozrejme 54

  • 21,7%áno, chcem len viac hardcore vecí! 15

  • 0,0%nie a nie je to potrebné pre nič 0

  • 0,0%nie, je to komplikované!!!0

Hlasovalo 69 užívateľov. 7 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár