Accelerazione di Ansible

Accelerazione di Ansible
Ùn hè micca sicretu chì cù i paràmetri predeterminati Ansible ùn pò micca fà u so travagliu assai rapidamente. In l'articulu, indicà parechji motivi per questu è offre un minimu utile di paràmetri chì, assai possibbilmente, in realtà aumenteranu a velocità di u vostru prughjettu.

Quì è quì sottu discutemu Ansible 2.9.x, chì hè stata installata in un virtualenv appena creatu in u vostru modu favuritu.

Dopu à a stallazione, crea un schedariu "ansible.cfg" accantu à u vostru playbook - stu locu vi permetterà di trasfiriri sti paràmetri cù u prugettu, in più ch'elli caricanu abbastanza automaticamente.

Pipeline

Qualchidunu pò avè digià intesu parlà di a necessità di usà pipelining, vale à dì, micca di cupià i moduli à u sistema di schedarii di u sistema di destinazione, ma trasfirendu un archiviu zip imballatu in Base64 direttamente à u stdin di l'interprete Python, ma altri ùn ponu micca, ma u fattu. resta un fattu: stu paràmetru resta sempre sottovalutata. Sfurtunatamente, alcune di e distribuzioni Linux populari utilizati per cunfigurà sudo ùn sò micca bè per difettu - cusì chì questu cumandimu necessitava un tty (terminale), cusì Ansible hà lasciatu sta paràmetra assai utile disattivata per automaticamente.

pipelining = True

Raccolta di fatti

Sapete chì cù i paràmetri predeterminati, Ansible per ogni ghjocu inizia a cullizzioni di fatti per tutti l'ospiti chì participanu à questu? In generale, sè ùn sapete micca, avà sapete. Per impediscenu chì questu succede, avete bisognu di attivà sia u modu di dumanda esplicita per a cullizzioni di fatti (esplicito) sia u modu intelligente. In questu, i fatti seranu recullati solu da quelli òspiti chì ùn anu micca scontru in ghjoculi precedenti.
UPD. Quandu copia, vi tuccherà à sceglie unu di sti paràmetri.

gathering = smart|explicit

Riutilizà e cunnessione ssh

Se avete mai eseguitu Ansible in modu di debugging (l'opzione "v", ripetuta da una à nove volte), pudete avè nutatu chì e cunnessione ssh sò constantemente fatte è rotte. Dunque, ci sò ancu un paru di suttilità quì.

Pudete evitari u passu di ristabilisce una cunnessione ssh à dui livelli à una volta: sia direttamente in u cliente ssh, sia quandu si trasferisce i fugliali à l'ospite gestitu da u manager.
Per reutilizà una cunnessione ssh aperta, basta passà e chjave necessarie à u cliente ssh. Allora cumminciarà à fà ciò chì segue: quandu stabilisce una cunnessione ssh per a prima volta, hà da creà in più un cusì chjamatu socket di cuntrollu, in installazioni successive, verificarà l'esistenza di questu socket, è se successu, reutilizà u socket. cunnessione ssh esistente. È per fà tuttu questu sensu, stabiliscemu u tempu per mantene a cunnessione quandu inattivu. Pudete leghje più in documentazione ssh, è in u cuntestu di Ansible simpricimenti aduprà "invià" l'opzioni necessarii à u cliente ssh.

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

Per riutilizà una cunnessione ssh dighjà aperta quandu si trasferisce i fugliali à un host gestionatu, basta à specificà un altru paràmetru scunnisciutu ssh_transfer_method. A documentazione nantu à questu sughjettu hè estremamente avara è ingannevole, perchè sta opzione funziona abbastanza bè! Ma leghje codice fonte permette di capisce ciò chì accadrà esattamente: u cumandamentu dd serà lanciatu nantu à l'ospite gestitu, travagliendu direttamente cù u schedariu desideratu.

transfer_method = piped

Per via, in u ramu "sviluppà" sta paràmetru esiste ancu ùn andà in nudda parte.

Ùn àbbia paura di u cuteddu, a paura di a forchetta

Un altru paràmetru utile hè forchetta. Determina u numeru di prucessi di travagliu chì si cunnettanu simultaneamente à l'ospiti è eseguisce e so attività. A causa di e peculiarità di Python cum'è una lingua, i prucessi sò usati, micca i fili, perchè Ansible sustene sempre Python 2.7 - ùn ci hè micca asinciu per voi, ùn ci hè nunda d'introduce un cumpurtamentu asincronu quì! Per difettu, Ansible corre cinque i travagliadori, ma s'ellu hè dumandatu bè, lanciarà più:

forks = 20

Solu avvistu subitu chì ci ponu esse alcune difficultà quì ligati à a quantità di memoria dispunibule nantu à a macchina di cuntrollu. In altri palori, pudete, sicuru, stabilisce forche = 100500, ma quale hà dettu ch'ellu hà da travaglià?

Mettendu tuttu inseme

In u risultatu, per ansible.cfg (formatu ini), i paràmetri necessarii ponu vede cusì:

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

È se vulete ammuccià tuttu in un inventariu YaML normale di una persona sana, allora pò vede qualcosa cusì:

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

Sfortunatamente, questu ùn funziona micca cù i paràmetri "gathering = smart / esplicit" è "forks = 20": i so equivalenti YaML ùn esistenu micca. O l'avemu stabilitu in ansible.cfg, o li passamu per e variabili di l'ambiente ANSIBLE_GATHERING è ANSIBLE_FORKS.

À propositu di Mitogen
- Induve hè questu nantu à Mitogen ? - avete u dirittu di dumandà, caru lettore. Nunda in questu articulu. Ma s'è vo site veramente prontu à leghje u so codice è capisce perchè u vostru playbook crashes cù Mitogen, ma funziona bè cù vaniglia Ansible, o perchè u listessu playbook era travagliatu bè prima, ma dopu un aghjurnamentu cuminciò à fà cose strane - bè, Mitogen puderia esse u vostru strumentu. Applicà, capiscenu, scrivite articuli - a leghje cun interesse.

Perchè ùn aghju micca aduprà personalmente Mitogen? Perchè Gladiolus travaglia solu finu à chì i travaglii sò veramente simplici è tuttu hè bè. In ogni casu, s'ellu si gira un pocu à a manca o à a diritta - hè questu, avemu ghjuntu: in risposta, una mansa di eccezzioni indistinte volanu à voi, è per compie u ritrattu, tuttu ciò chì manca hè a frasa cumuna "grazie à tutti. , tutti sò liberi ". In generale, ùn vogliu micca perde u tempu per scopre i motivi di u prossimu "coccu sotterraneo".

Alcune di sti paràmetri sò stati scuperti durante u prucessu di lettura codice fonte plugin di cunnessione sottu u nome auto-esplicativu "ssh.py". I sparte i risultati di a lettura in a speranza chì ispirarà à qualchissia altru per fighjà i fonti, leghje, verificate l'implementazione, paragunate cù a documentazione - dopu tuttu, prima o dopu tuttu questu vi purterà risultati pusitivi. Bona Furtuna !

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Quale di i seguenti paràmetri Ansible aduprate per accelerà i vostri prughjetti?

  • 69,6%pipelining=true32

  • 34,8%riunione = intelligente/esplicito16

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

  • 17,4%trasferimentu_metudu = piped8

  • 63,0%forchetta = XXX29

  • 6,5%Nimu di questu, solu Mitogen3

  • 8,7%Mitogen + notaraghju quale di questi paràmetri4

46 utilizatori anu vutatu. 21 utilizatore s'hè astenutu.

Vulete più cose nantu à Ansible?

  • 78,3%iè, sicuru 54

  • 21,7%iè, vogliu solu più cose hardcore !15

  • 0,0%no, è ùn hè micca necessariu per nunda0

  • 0,0%nò, hè cumplicatu !!!0

69 utilizatori anu vutatu. 7 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment