fariĝis unu el la plej popularaj . Post en 2015 la nombro superis milojn kaj Ansible iĝis verŝajne la plej uzita deplojo kaj orkestradsistemo. Ĝia larĝa gamo de aplikoj estas tre impona.
Ansible funkcias per SSH-konektoj al foraj gastigantoj. Ĝi malfermas SSH-sesion, ensalutas, kopias la Python-kodon tra la reto kaj skribas ĝin al aparta provizora dosiero. Post tio, ĝi rulas ĉi tiun dosieron sur la fora maŝino. Ĉi tiu tuta sekvenco de operacioj estas sufiĉe longa kaj teda, do ekzistas diversaj manieroj optimumigi ĝin.
Unu el ĉi tiuj manieroj estas kiu permesas vin uzi unu SSH-sesion por ekzekuti instrukciojn, prefere ol malfermi novan sesion ĉiufoje, kio povas ŝpari al ni multan tempon. (Nur memoru malŝalti requiretty agordo por sudo en via /etc/sudoers dosiero sur la fora maŝino)
Nova maniero por overclock Ansible estas python-biblioteko nomita . Se iu ne aŭdis pri ĝi, mi mallonge priskribos ĝian funkcion. Ĝi permesas rapidan ekzekuton de python-kodo sur fora maŝino, kaj Ansible estas nur unu ekzemplo de uzo. Mitogen uzas UNIX-pipon sur la fora maŝino kaj transdonas python-kodon kunpremitan per zlib kaj seriigitan per piklo. Ĉi tio helpas kompletigi ĝin pli rapide kaj ŝparas trafikon. Se vi interesiĝas pri pli detala klarigo, estas plej bone legi pri ĝi sur la paĝo . Sed hodiaŭ ni koncentriĝos nur pri kiel la biblioteko funkcias kun Ansible.
Mitogen en certaj cirkonstancoj povas plirapidigi vian Ansible-kodon plurfoje kaj signife redukti trafikan konsumon. Ni rigardu la plej popularajn uzkazojn kaj vidu kiom ĝi helpas nin.
Mi uzas Ansible plej por: krei agordajn dosierojn sur fora maŝino, instali pakaĵojn, kopii dosierojn al kaj de la fora maŝino. Eble vi havas aliajn ekzemplojn - skribu en la komentoj.
Ni iru!
Mitogen-agordo por Ansible estas tre simpla:
Instalu la Mitogen-bibliotekon:
pip install mitogenNun ekzistas du ekvivalentaj manieroj - aŭ agordi la opciojn en la agorda dosiero ansible.cfg, aŭ agordi la necesajn mediovariablojn.
Ni supozu, ke la vojo al la instalita Mitogen estos /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Tiam:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearaŭ
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyNi instalu Ansible en virtualenv, kun kaj sen Mitogen:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Bonvolu noti, ke Mitogen 0.2.7 ne funkcias kun Ansible 2.8 (de majo 2019)
Farante kaŝnomojn:
alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook'
alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook'Nun ni provu ruli ludlibron, kiu kreas dosierojn sur fora maŝino:
---
- hosts: all
gather_facts: false
tasks:
- name: Create files with copy content module
copy:
content: |
test file {{ item }}
dest: ~/file_{{ item }}
with_sequence: start=1 end={{ n }}Kaj ni rulu ĝin kun kaj sen Mitogen por krei 10 dosierojn:
time mitogen-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null
real 0m2.603s
user 0m1.152s
sys 0m0.096s
time pure-ansible-playbook file_creation.yml -i hosts -e n=10 &>/dev/null
real 0m5.908s
user 0m1.745s
sys 0m0.643sNi vidas 2-oblan plibonigon. Ni kontrolu 20, 30, ..., 100 dosierojn:
time pure-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null
real 0m51.775s
user 0m8.039s
sys 0m6.305s
time mitogen-ansible-playbook file_creation.yml -i hosts -e n=100 &>/dev/null
real 0m4.331s
user 0m1.903s
sys 0m0.197sKiel rezulto, ni akcelis ekzekuton pli ol 10 fojojn!
Nun ni provu malsamajn scenarojn kaj vidu kiom pli rapide ĉio funkcias por ni:
Skripto por kopii dosierojn al fora gastiganto de loka (kun la modulo
copy):
Skripto por krei dosierojn sur fora gastiganto kun
copymodulo:
Scenaro kun elŝutado de dosieroj de fora gastiganto al loka:
Ni provu scenaron kun pluraj (3) foraj maŝinoj, ekzemple scenaron kun kopiado de dosieroj al fora gastiganto:
Kiel vi povas vidi, Mitogen ŝparas al ni tempon kaj trafikon en ĉi tiuj scenaroj. Sed se la botelkolo ne estas en Ansible, sed ekzemple en la I/O de disko aŭ reto, aŭ ie aliloke, tiam estas malfacile atendi, ke Mitogen helpos nin.
Ni provu skripton kun instalado de pakaĵoj kun yum/dnf kaj python-moduloj uzante pip. La pakaĵoj estis kaŝmemorigitaj por ne dependi de retaj misfunkciadoj:
---
- hosts: all
gather_facts: false
tasks:
- name: Install packages
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Install pip modules
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Kun Mitogen daŭris 12 sekundojn, same kiel sen ĝi.
Sur paĝo vi povas rigardi aliajn komparnormojn kaj testojn. Kiel la paĝo deklaras:
Mitogen ne povas akceli la modulon kiam ĝi funkcias. Ĝi nur povas fari la ekzekuton de ĉi tiu modulo kiel eble plej rapide.
Tial gravas trovi viajn proplempunktojn en via deplojo kaj se ili ŝuldiĝas al Ansible, tiam Mitogen helpos vin solvi ilin kaj signife akceli la ekzekuton de viaj ludlibroj.
fonto: www.habr.com
