Ansible werk deur SSH-verbindings na afgeleë gashere. Dit maak 'n SSH-sessie oop, meld aan, kopieer die Python-kode oor die netwerk en skryf dit na 'n aparte tydelike lêer. Daarna loop dit hierdie lêer op die afgeleë masjien. Hierdie hele reeks bewerkings is nogal lank en vervelig, so daar is verskeie maniere om dit te optimaliseer.
Een van hierdie maniere is requiretty
instelling vir sudo in jou /etc/sudoers
lêer op die afgeleë masjien)
Die nuwe manier om Ansible te "oorklok" is die luislang-biblioteek by die naam
Mitogen kan onder sekere omstandighede jou Ansible-kode verskeie kere versnel en verkeersverbruik aansienlik verminder. Kom ons kyk na die gewildste gebruiksgevalle en kyk hoe dit ons help.
Die dinge wat ek Ansible die meeste gebruik, is: die skep van konfigurasielêers op 'n afgeleë masjien, die installering van pakkette, die kopiëring van lêers na en van 'n afgeleë masjien. Miskien het jy ander voorbeelde - skryf in die kommentaar.
Kom ons gaan!
Die Mitogen-konfigurasie vir Ansible is baie eenvoudig:
Installeer Mitogen-biblioteek:
pip install mitogen
Nou is daar twee ekwivalente maniere - óf konfigureer opsies in die ansible.cfg konfigurasielêer, óf stel die nodige omgewingsveranderlikes.
Kom ons neem aan dat die pad na die geïnstalleerde Mitogen sal wees /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Toe:
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
Installeer Ansible in virtualenv, met en sonder 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
Neem asseblief kennis dat Mitogen 0.2.7 nie met Ansible 2.8 werk nie (vanaf Mei 2019)
Maak aliasse:
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'
Kom ons probeer nou om 'n speelboek te laat loop wat lêers op 'n afgeleë masjien skep:
---
- 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 hardloop met en sonder Mitogen om 10 lêers te skep:
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
Ons sien 'n 2x verbetering. Kom ons kyk vir 20, 30, ..., 100 lêers:
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
Gevolglik het ons die uitvoering met meer as 10 keer versnel!
Kom ons probeer nou verskillende scenario's en kyk hoeveel vinniger alles vir ons werk:
-
Skrip vir die kopiëring van lêers na 'n afgeleë gasheer vanaf 'n plaaslike gasheer (met die module
copy
):
-
Skrip om lêers op 'n afgeleë gasheer mee te skep
copy
module:
-
Scenario met die aflaai van lêers van 'n afgeleë gasheer na 'n plaaslike een:
Kom ons probeer 'n scenario met veelvuldige (3) afgeleë masjiene, soos die kopiëring van lêers na 'n afgeleë gasheer:
Soos u kan sien, spaar Mitogen ons beide tyd en verkeer in hierdie scenario's. Maar as die "bottelneck" nie in Ansible is nie, maar byvoorbeeld in skyf I / O of netwerk, of enige ander plek, dan is dit moeilik om te verwag dat Mitogen ons sal help.
Kom ons probeer 'n scenario met die installering van yum/dnf-pakkette en python-modules met behulp van pip. Die pakkies is gekas om nie afhanklik te wees van foute in die netwerk nie:
---
- 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
Met Mitogen het dit 12 sekondes geneem, sowel as daarsonder.
Op bladsy
Mitogen kan nie 'n module versnel terwyl dit loop nie. Dit kan die uitvoering van hierdie module net so vinnig moontlik maak.
Daarom is dit belangrik om u ontplooiingsknelnekke te vind en as dit te wyte is aan Ansible, sal Mitogen u help om dit op te los en die uitvoering van u speelboeke aansienlik te bespoedig.
Bron: will.com