Zrychlení Ansible

Zrychlení Ansible
Není žádným tajemstvím, že s výchozím nastavením Ansible svou práci nezvládne příliš rychle. V článku poukážu na několik důvodů a nabídnu užitečné minimum nastavení, které dost možná skutečně zvýší rychlost vašeho projektu.

Zde a níže diskutujeme o Ansible 2.9.x, který byl nainstalován do čerstvě vytvořeného virtualenv vaším oblíbeným způsobem.

Po instalaci vytvořte vedle svého playbooku soubor „ansible.cfg“ – toto umístění vám umožní přenést tato nastavení spolu s projektem a navíc se načtou zcela automaticky.

Potrubí

Někteří už možná slyšeli o nutnosti použít pipelining, tedy nekopírovat moduly do souborového systému cílového systému, ale přenést zip archiv zabalený v Base64 přímo do stdin interpretu Pythonu, ale jiní možná ne, ale fakt zůstává faktem: toto nastavení stále zůstává podceňována. Bohužel některé z populárních linuxových distribucí používané ke konfiguraci sudo ve výchozím nastavení nebyly příliš dobré - takže tento příkaz vyžadoval tty (terminál), takže Ansible nechal toto velmi užitečné nastavení ve výchozím nastavení zakázáno.

pipelining = True

Shromažďování faktů

Věděli jste, že s výchozím nastavením Ansible pro každou hru zahájí shromažďování faktů pro všechny hostitele, kteří se jí účastní? Obecně platí, že pokud jste nevěděli, nyní to víte. Abyste tomu zabránili, musíte povolit buď režim explicitního požadavku na shromažďování faktů (explicitní), nebo inteligentní režim. V něm budou shromažďována fakta pouze od těch hostitelů, se kterými se v předchozích hrách nesetkali.
UPD. Při kopírování budete muset vybrat jedno z těchto nastavení.

gathering = smart|explicit

Opětovné použití ssh připojení

Pokud jste někdy spouštěli Ansible v režimu ladění (volba „v“, opakující se jednou až devětkrát), možná jste si všimli, že se neustále vytvářejí a přerušují připojení ssh. Takže i zde je pár jemností.

Můžete se vyhnout kroku opětovného navázání ssh připojení na dvou úrovních najednou: jak přímo v klientovi ssh, tak při přenosu souborů na spravovaný hostitel z manažera.
Chcete-li znovu použít otevřené připojení ssh, jednoduše předejte potřebné klíče klientovi ssh. Poté začne provádět následující: při prvním navazování ssh připojení navíc vytvoří tzv. kontrolní soket, při následných instalacích zkontroluje existenci právě tohoto soketu a v případě úspěchu znovu použije stávající ssh připojení. A aby to celé dávalo smysl, nastavme čas pro udržování připojení, když je neaktivní. Více si můžete přečíst v ssh dokumentacia v kontextu Ansible jednoduše používáme „předávání“ potřebných voleb klientovi ssh.

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

Chcete-li znovu použít již otevřené připojení ssh při přenosu souborů na spravovaného hostitele, stačí zadat jiné neznámé nastavení ssh_transfer_method. Dokumentace na toto téma je extrémně lakomý a zavádějící, protože tato možnost funguje docela dobře! Ale čtení zdrojový kód vám umožní pochopit, co se přesně stane: příkaz dd bude spuštěn na spravovaném hostiteli a bude přímo pracovat s požadovaným souborem.

transfer_method = piped

Mimochodem, ve větvi „develop“ toto nastavení také existuje nikam nechodit.

Nebojte se nože, nebojte se vidličky

Dalším užitečným nastavením jsou vidlice. Určuje počet pracovních procesů, které se budou současně připojovat k hostitelům a provádět úkoly. Vzhledem ke zvláštnostem jazyka Python se používají procesy, nikoli vlákna, protože Ansible stále podporuje Python 2.7 – žádné asyncio pro vás, nemá smysl zde zavádět asynchronní chování! Ve výchozím nastavení běží Ansible pět pracovníků, ale pokud se zeptáte správně, spustí další:

forks = 20

Jen vás hned varuji, že zde mohou nastat určité potíže související s dostupným množstvím paměti na řídicím stroji. Jinými slovy, můžete samozřejmě nastavit forks=100500, ale kdo řekl, že to bude fungovat?

Dát to všechno dohromady

V důsledku toho mohou potřebná nastavení pro ansible.cfg (formát ini) vypadat takto:

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

A pokud chcete vše skrýt v normálním inventáři YaML zdravého člověka, může to vypadat nějak takto:

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

Bohužel to nebude fungovat s nastavením „gathering = smart/explicit“ a „forks = 20“: jejich ekvivalenty YaML neexistují. Buď je nastavíme v ansible.cfg, nebo je předáme přes proměnné prostředí ANSIBLE_GATHERING a ANSIBLE_FORKS.

O Mitogenu
- Kde je to o Mitogenu? - máte právo se ptát, milý čtenáři. Nikde v tomto článku. Ale pokud jste opravdu připraveni přečíst si jeho kód a zjistit, proč vaše příručka selhává s Mitogenem, ale funguje dobře s vanilla Ansible, nebo proč stejná příručka fungovala dobře předtím, ale po aktualizaci začala dělat divné věci - no, Mitogen by mohl potenciálně vaším nástrojem. Aplikujte to, pochopte to, pište články - se zájmem si to přečtu.

Proč já osobně Mitogen nepoužívám? Protože mečík funguje jen tak dlouho, dokud jsou úkoly opravdu jednoduché a vše je v pořádku. Když se však otočíte trochu doleva nebo doprava – je to, dorazili jsme: v reakci na vás letí hrstka nevýrazných výjimek a k dokreslení chybí už jen obyčejná věta „děkuji všem , všichni jsou svobodní." Obecně jen nechci ztrácet čas zjišťováním důvodů dalšího „podzemního klepání“.

Některá z těchto nastavení byla objevena během procesu čtení zdrojový kód plugin pro připojení pod samovysvětlujícím názvem „ssh.py“. Výsledky čtení sdílím v naději, že to někoho dalšího inspiruje k tomu, aby se podíval na zdroje, přečetl je, zkontroloval implementaci, porovnal s dokumentací – vždyť to vše vám dříve nebo později přinese pozitivní výsledky. Hodně štěstí!

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Které z následujících nastavení Ansible používáte k urychlení svých projektů?

  • 69,6%pipelining=true32

  • 34,8%shromažďování = chytré/explicitní16

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

  • 17,4%transfer_method = piped8

  • 63,0%vidlice = XXX29

  • 6,5%Nic z toho, jen Mitogen3

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

Hlasovalo 46 uživatelů. 21 uživatel se zdržel hlasování.

Chcete více informací o Ansible?

  • 78,3%ano, samozřejmě 54

  • 21,7%ano, chci jen více hardcore věcí! 15

  • 0,0%ne a není to nutné k ničemu 0

  • 0,0%ne, je to složité!!!0

Hlasovalo 69 uživatelů. 7 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář