Ansible wurket oer SSH-ferbiningen nei hosts op ôfstân. It iepenet in SSH-sesje, logt yn, kopiearret de Python-koade oer it netwurk en skriuwt it nei in apart tydlik bestân. Dêrnei rint it dit bestân op 'e masine op ôfstân. Dizze hiele folchoarder fan operaasjes is frij lang en saai, dus d'r binne ferskate manieren om it te optimalisearjen.
Ien fan dizze manieren is requiretty
ynstelling foar sudo yn jo /etc/sudoers
bestân op 'e masine op ôfstân)
In nije manier om Ansible te oerklokken is in python-bibleteek neamd
Mitogen kin yn bepaalde omstannichheden jo Ansible-koade ferskate kearen fersnelle en ferkearskonsumpsje signifikant ferminderje. Litte wy de populêrste gebrûksgefallen besjen en sjen hoefolle it ús helpt.
Ik brûk Ansible it meast foar: it meitsjen fan konfiguraasjebestannen op in masine op ôfstân, pakketten ynstallearje, bestannen kopiearje nei en fan 'e masine op ôfstân. Miskien hawwe jo oare foarbylden - skriuw yn 'e kommentaren.
Lit ús gean!
Mitogen-konfiguraasje foar Ansible is heul ienfâldich:
Ynstallearje de Mitogen-bibleteek:
pip install mitogen
No binne d'r twa lykweardige manieren - of konfigurearje de opsjes yn it konfiguraasjetriem ansible.cfg, of set de nedige omjouwingsfariabelen yn.
Lit ús oannimme dat it paad nei de ynstallearre Mitogen sil wêze /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Dan:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
of
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Litte wy Ansible yn virtualenv ynstallearje, mei en sûnder 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
Tink derom dat Mitogen 0.2.7 net wurket mei Ansible 2.8 (per maaie 2019)
Aliassen meitsje:
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'
Litte wy no besykje in playbook út te fieren dat bestannen makket op in masine op ôfstân:
---
- 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 }}
En litte wy it útfiere mei en sûnder Mitogen om 10 bestannen te meitsjen:
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
Wy sjogge in ferbettering fan 2 kear. Litte wy kontrolearje op 20, 30, ..., 100 bestannen:
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
As gefolch hawwe wy de útfiering mei mear dan 10 kear versneld!
Litte wy no ferskate senario's besykje en sjen hoefolle rapper alles foar ús wurket:
-
Skript foar it kopiearjen fan bestannen nei in host op ôfstân fan in lokale (mei de module
copy
):
-
Skript foar it meitsjen fan bestannen op in host op ôfstân mei
copy
module:
-
Senario mei it downloaden fan bestannen fan in host op ôfstân nei in lokale:
Litte wy in senario besykje mei ferskate (3) masines op ôfstân, bygelyks in senario mei it kopiearjen fan bestannen nei in host op ôfstân:
Sa't jo sjen kinne, besparret Mitogen ús sawol tiid as ferkear yn dizze senario's. Mar as it knyppunt is net yn Ansible, mar bygelyks yn de I/O fan in skiif of netwurk, of earne oars, dan is it dreech om te ferwachtsje dat Mitogen sil helpe ús.
Litte wy in skript besykje mei it ynstallearjen fan pakketten mei yum/dnf- en python-modules mei pip. De pakketten waarden yn 't cache bewarre om net ôfhinklik fan netwurkglitches:
---
- 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
Mei Mitogen duorre it 12 sekonden, itselde as sûnder.
Op pagina
Mitogen kin net flugger de module as it rint. It kin allinich de útfiering fan dizze module sa fluch mooglik meitsje.
Dêrom is it wichtich om jo knipepunten te finen yn jo ynset en as se binne troch Ansible, dan sil Mitogen jo helpe om se op te lossen en de útfiering fan jo playbooks signifikant te fersnellen.
Boarne: www.habr.com