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 requiretty
agordo por sudo en via /etc/sudoers
dosiero sur la fora maŝino)
Nova maniero por overclock Ansible estas python-biblioteko nomita
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 mitogen
Nun 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_linear
aŭ
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Ni 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.10
Bonvolu 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.643s
Ni 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.197s
Kiel 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
copy
modulo:
-
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
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