Rapidigante Ansible

Rapidigante Ansible
Ne estas sekreto, ke kun la defaŭltaj agordoj Ansible ne povas fari sian laboron tre rapide. En la artikolo mi montros plurajn kialojn por tio kaj proponos utilan minimumon da agordoj kiuj, tre eble, efektive pliigos la rapidecon de via projekto.

Ĉi tie kaj sube ni diskutas Ansible 2.9.x, kiu estis instalita en ĵus kreita virtualenv laŭ via plej ŝatata maniero.

Post instalado, kreu "ansible.cfg" dosieron apud via ludlibro - ĉi tiu loko permesos al vi translokigi ĉi tiujn agordojn kune kun la projekto, kaj ili ŝargiĝos tute aŭtomate.

Dukto

Iuj eble jam aŭdis pri la bezono uzi pipelining, tio estas, ne kopii modulojn al la dosiersistemo de la celsistemo, sed transloki zip-arkivon envolvitan en Base64 rekte al la stdin de la Python-interpretilo, sed aliaj eble ne, sed la fakto. restas fakto: ĉi tiu agordo ankoraŭ restas subtaksita. Bedaŭrinde, kelkaj el la popularaj Linuksaj distribuaĵoj kutimis agordi sudo ne tre bone defaŭlte - tiel ke ĉi tiu komando postulis tty (terminalo), do Ansible lasis ĉi tiun tre utilan agordon malŝaltita defaŭlte.

pipelining = True

Kolektante faktojn

Ĉu vi scias, ke kun defaŭltaj agordoj, Ansible por ĉiu teatraĵo iniciatas la kolekton de faktoj por ĉiuj gastigantoj kiuj partoprenas en ĝi? Ĝenerale, se vi ne sciis, nun vi scias. Por eviti ke tio okazu, vi devas ebligi aŭ la eksplicitan petan reĝimon por kolekti faktojn (eksplicitan) aŭ la inteligentan reĝimon. En ĝi, faktoj estos kolektitaj nur de tiuj gastigantoj, kiuj ne estis renkontitaj en antaŭaj ludoj.
UPD. Kiam vi kopias, vi devos elekti unu el ĉi tiuj agordoj.

gathering = smart|explicit

Reuzado de ssh-konektoj

Se vi iam rulis Ansible en sencimiga reĝimo (la opcio "v", ripetita unu ĝis naŭ fojojn), vi eble rimarkis, ke ssh-konektoj konstante estas faritaj kaj rompitaj. Do, ankaŭ ĉi tie estas kelkaj subtilaĵoj.

Vi povas eviti la paŝon reestabli ssh-konekton je du niveloj samtempe: ambaŭ rekte en la ssh-kliento, kaj dum transdono de dosieroj al la administrita gastiganto de la administranto.
Por reuzi malfermitan ssh-konekton, simple transdonu la necesajn ŝlosilojn al la ssh-kliento. Tiam ĝi komencos fari la jenon: kiam oni establas ssh-konekton por la unua fojo, ĝi aldone kreos tiel nomatan kontrolkonekton, dum postaj instalaĵoj, ĝi kontrolos la ekziston de ĉi tiu sama ingo, kaj se sukcesos, reuzos la ekzistanta ssh-konekto. Kaj por ke ĉi tio ĉio havu sencon, ni agordu la tempon por konservi la konekton kiam neaktive. Vi povas legi pli en ssh dokumentaro, kaj en la kunteksto de Ansible ni simple uzas "sendi" la necesajn opciojn al la ssh-kliento.

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

Por reuzi jam malfermitan ssh-konekton dum transdono de dosieroj al administrita gastiganto, simple specifu alian nekonatan agordon ssh_transfer_method. La dokumentado pri ĉi tiu temo estas ege avara kaj misgvida, ĉar ĉi tiu opcio funkcias sufiĉe bone! Sed legado fontkodo permesas vin kompreni kio precize okazos: la dd-komando estos lanĉita sur la administrita gastiganto, rekte laborante kun la dezirata dosiero.

transfer_method = piped

Cetere, en la branĉo "evolui" ankaŭ ĉi tiu agordo ekzistas ne irante ien.

Ne timu la tranĉilon, timu la forkon

Alia utila agordo estas forkoj. Ĝi determinas la nombron da laborprocezoj, kiuj samtempe konektos al gastigantoj kaj plenumos taskojn. Pro la proprecoj de Python kiel lingvo, procezoj estas uzataj, ne fadenoj, ĉar Ansible ankoraŭ subtenas Python 2.7 - neniu asincio por vi, ne utilas enkonduki nesinkronan konduton ĉi tie! Defaŭlte Ansible funkcias kvin laboristoj, sed se demandite ĝuste, ĝi lanĉos pli:

forks = 20

Mi nur avertas vin tuj, ke eble estas iuj malfacilaĵoj ĉi tie rilate al la disponebla kvanto de memoro en la kontrolmaŝino. Alivorte, vi povas, kompreneble, agordi forkojn=100500, sed kiu diris, ke ĝi funkcios?

Kunmetante ĉion

Kiel rezulto, por ansible.cfg (ini-formato), la necesaj agordoj povas aspekti jene:

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

Kaj se vi volas kaŝi ĉion en normala YaML-inventaro de sana persono, tiam ĝi povas aspekti kiel ĉi tio:

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

Bedaŭrinde, ĉi tio ne funkcios kun la agordoj "kolektado = inteligenta/eksplicita" kaj "forkoj = 20": iliaj YaML-ekvivalentoj ne ekzistas. Aŭ ni metas ilin en ansible.cfg, aŭ ni pasas ilin tra la mediovariabloj ANSIBLE_GATHERING kaj ANSIBLE_FORKS.

Pri Mitogen
- Kie temas pri Mitogen? — vi rajtas demandi, kara leganto. Nenie en ĉi tiu artikolo. Sed se vi vere pretas legi ĝian kodon kaj eltrovi kial via ludlibro kraŝas kun Mitogen, sed funkcias bone kun vanilo Ansible, aŭ kial la sama ludlibro funkciis bone antaŭe, sed post ĝisdatigo komencis fari strangajn aferojn - nu, Mitogen povus esti via ilo. Apliku ĝin, komprenu ĝin, verku artikolojn - mi legos ĝin kun intereso.

Kial mi persone ne uzas Mitogen? Ĉar Gladiolus funkcias nur dum la taskoj estas vere simplaj kaj ĉio estas bona. Tamen, se vi turnas vin iomete maldekstren aŭ dekstren - jen, ni alvenis: responde, manpleno da neklaraj esceptoj flugas al vi, kaj por kompletigi la bildon, mankas nur la komuna frazo “dankon al vi ĉiuj. , ĉiuj estas liberaj.” Ĝenerale, mi simple ne volas perdi tempon por ekscii la kialojn de la sekva "subtera frapo".

Kelkaj el ĉi tiuj agordoj estis malkovritaj dum la legado fontkodo koneksa kromaĵo sub la memklarigebla nomo "ssh.py". Mi dividas la rezultojn de legado kun la espero, ke ĝi inspiros iun alian rigardi la fontojn, legi ilin, kontroli la efektivigon, kompari kun la dokumentado - finfine, baldaŭ ĉio ĉi alportos al vi pozitivajn rezultojn. Bonŝancon!

Nur registritaj uzantoj povas partopreni la enketon. Ensaluti, bonvolu.

Kiun el la sekvaj agordoj de Ansible vi uzas por akceli viajn projektojn?

  • 69,6%pipelining=true32

  • 34,8%kunveno = inteligenta/eksplicita16

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

  • 17,4%transfer_method = piped8

  • 63,0%forkoj = XXX29

  • 6,5%Nenio el ĉi tio, nur Mitogen3

  • 8,7%Mitogen + Mi notos, kiu el ĉi tiuj agordoj4

Voĉdonis 46 uzantoj. 21 uzanto sindetenis.

Ĉu vi volas pliajn aferojn pri Ansible?

  • 78,3%jes, kompreneble54

  • 21,7%jes, mi nur volas pli da malmolaj aferoj!15

  • 0,0%ne, kaj ne necesas por nenio0

  • 0,0%ne, estas komplike!!!0

69 uzantoj voĉdonis. 7 uzantoj sindetenis.

fonto: www.habr.com

Aldoni komenton