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:
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_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ě
transfer_method = piped
Mimochodem, ve větvi „develop“ toto nastavení také existuje
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
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í
Průzkumu se mohou zúčastnit pouze registrovaní uživatelé.
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