Versnel Ansible met Mitogen

Ansible een van die gewildste geword Stelselkonfigurasiebestuur... Na is deur Red Hat gekoop in 2015-nommer projek deelnemers duisende oorskry en Ansible het waarskynlik die mees gebruikte ontplooiing en orkestrasiestelsel geword. Die wye reeks toepassings is baie indrukwekkend.

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 SSH pypleidings wat ons toelaat om een ​​SSH-sessie te gebruik om instruksies uit te voer, eerder as om elke keer 'n nuwe sessie oop te maak, wat ons baie tyd kan bespaar. (Moet net nie vergeet om te deaktiveer nie 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. as iemand nie daarvan gehoor het nie, sal ek kortliks die funksionaliteit daarvan beskryf. Dit laat vinnige uitvoering van python-kode op 'n afgeleë masjien toe en Ansible is net een van die gebruiksgevalle. Mitogen gebruik 'n UNIX-pyp op die afgeleë masjien en dra python-kode oor wat deur zlib saamgepers en met piekel gerangskik is. Dit help om dit vinniger te voltooi en bespaar bandwydte. As jy belangstel in 'n meer gedetailleerde verduideliking, is dit die beste om daaroor te lees op die bladsy "Hoe dit werk". Maar vandag sal ons net fokus op hoe die biblioteek met Ansible werk.

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):
    Versnel Ansible met Mitogen

  • Skrip om lêers op 'n afgeleë gasheer mee te skep copy module:
    Versnel Ansible met Mitogen

  • Scenario met die aflaai van lêers van 'n afgeleë gasheer na 'n plaaslike een:
    Versnel Ansible met Mitogen

Kom ons probeer 'n scenario met veelvuldige (3) afgeleë masjiene, soos die kopiëring van lêers na 'n afgeleë gasheer:
Versnel Ansible met Mitogen

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 vir Ansible bladsy jy kan ander maatstawwe en toetse sien. Soos die bladsy sê:

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

Voeg 'n opmerking