Shtëpi Ansible me Mitogen

Ansible u bë një nga më të njohurat sistemet e Menaxhimit të Konfigurimeve. Pasi që u ble nga Red Hat në vitin 2015, numri i pjesëmarrësve në projekt ka tejkaluar mijëra dhe Ansible ka ndoshta qenë sistemi më i përdorur për shpërndarje dhe orkestrim. Fushat e tij të gjera të aplikimit janë shumë impresive.

Ansible punon përmes lidhjeve SSH me hostet e largët. Ai hap një sesion SSH, bën login, kopjon kodin në Python përmes rrjetit dhe e regjistron atë në një skedar kalimtar të veçantë. Pas kësaj, ai ekzekuton këtë skedar në makinën e largët. E gjithë kjo sekuencë operacionesh është mjaft e gjatë dhe e lodhshme, prandaj ekzistojnë mënyra të ndryshme për ta optimizuar.

Një nga këto metoda është tubacioneve SSH e cila lejon përdorimin e një sesioni SSH për ekzekutimin e instrukcioneve, në vend që të hapim çdo herë një sesion të ri, gjë që mund të na kursejë shumë kohë. (Vetëm mos harroni të shkoni në requiretty në konfigurimin e sudo në /etc/sudoers skedarin tuaj në makinën e largët)

NjĂ« nga mĂ«nyrat e reja pĂ«r 'tĂ« acceleruar' Ansible Ă«shtĂ« biblioteka python me emrin Mitogen. nĂ«se dikush nuk e ka dĂ«gjuar pĂ«r tĂ« — do ta pĂ«rshkruaj shkurtimisht funksionalitetin e saj. Ajo lejon ekzekutimin e shpejtĂ« tĂ« kodit python nĂ« makinĂ«n e largĂ«t dhe Ansible Ă«shtĂ« vetĂ«m njĂ« nga shembujt e pĂ«rdorimit. Mitogen pĂ«rdor tubacionin UNIX nĂ« makinĂ«n e largĂ«t dhe dĂ«rgon kodin python tĂ« kompresuar me zlib dhe tĂ« serizuar me pickle. Kjo ndihmon nĂ« ekzekutimin e tij mĂ« shpejt dhe kursen trafik. NĂ«se jeni tĂ« interesuar pĂ«r njĂ« shpjegim mĂ« tĂ« detajuar, Ă«shtĂ« mĂ« mirĂ« tĂ« lexoni rreth tij nĂ« faqen ‘Si funksionon’. Por sot do tĂ« fokusohemi vetĂ«m nĂ« punĂ«n e bibliotekĂ«s me Ansible.

Mitogen nën rrethana të caktuara mund të përshpejtojë kodin tuaj Ansible disa herë dhe të reduktojë ndjeshëm konsumin e trafik. Le të kontrollojmë shembujt më të njohur të përdorimit dhe të shohim sa ndihmon kjo.

UnĂ« pĂ«rdor mĂ« sĂ« shumti Ansible pĂ«r: krijimin e skedarĂ«ve tĂ« konfigurimeve nĂ« makinĂ«n e largĂ«t, instalimin e paketave, kopjimin e skedarĂ«ve nĂ« makinĂ«n e largĂ«t dhe pĂ«rmbys. Ndoshta keni shembuj tĂ« tjerĂ« — mĂ« tregoni nĂ« komentet.

Le të shkojmë!

Konfigurimi i Mitogen për Ansible është shumë i thjeshtë:
Instaloni bibliotekën Mitogen:

pip install mitogen

Tani ka dy mĂ«nyra ekuivalente — ose konfigurojeni opsionet nĂ« skedarin e konfigurimit ansible.cfg, ose vendosni variablet e nevojshme tĂ« ambientit.

Supozoni se rruga për Mitogen të instaluar do të jetë /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Atëherë:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

ose

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Të instalojmë Ansible në virtualenv, me Mitogen dhe pa të:

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

Vini re se Mitogen 0.2.7 nuk punon me Ansible 2.8 (më maj 2019)

Krijojmë aliaset:

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'

Tani le të provojmë të rregullojmë një playbook që krijon skedarë në makinën e largët:

---
- 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 }}

Dhe do ta ekzekutojmë me Mitogen dhe pa të për krijimin e 10 skedarëve:

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

Shohim përmirësim prej 2 herësh. Le të kontrollojmë për 20, 30, 
, 100 skedarë:

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

Në fund, ne e përshpejtuam ekzekutimin më shumë se 10 herë!
Tani le të provojmë skenarë të ndryshëm dhe të shohim sa më shpejt punojnë të gjitha:

  • Skenari i kopjimit tĂ« skedarĂ«ve nĂ« hostin e largĂ«t nga lokal (me modul copy):
    Shtëpi Ansible me Mitogen

  • Skenari i krijimit tĂ« skedarĂ«ve nĂ« hostin e largĂ«t me copy modulin:
    Shtëpi Ansible me Mitogen

  • Skenari me ngarkimin e skedarĂ«ve nga hosti i largĂ«t nĂ« lokal:
    Shtëpi Ansible me Mitogen

Le të provojmë një skenar me disa (3) makina të largëta, për shembull skenari i kopjimit të skedarëve në hostin e largët:
Shtëpi Ansible me Mitogen

Siç shihet, Mitogen na e kursen si kohën ashtu edhe trafikun në këto skenarë. Por nëse 'bottle neck' nuk është te Ansible, por në I/O të diskut ose në rrjet, ose kudo tjetër, atëherë është e vështirë të pritet që Mitogen të na ndihmojë.

Le të provojmë një skenar me instalimin e paketave me yum/dnf dhe moduleve python me pip. Paketat ishin të ruajtura që të mos varim nga gabimet në rrjet:

---
- 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

Me Mitogen kjo zuri 12 sekonda, ashtu si edhe pa të.
Në faqen Faqja Mitogen për Ansible mund të shikoni benchmark-e dhe teste të tjera. Siç thuhet në faqe:

Mitogen nuk mund ta përshpejtojë një modul kur ai ekzekutohet. Ai vetëm mund ta bëjë ekzekutimin e këtij moduli aq të shpejt sa të jetë e mundur.

Prandaj është e rëndësishme të gjeni ngushticat tuaja në implementim dhe nëse ato ndodhin për shkak të Ansible, atëherë Mitogen do t'ju ndihmojë t'i zgjidhni ato dhe të përshpejtoni ndjeshëm ekzekutimin e playbook-ëve tuaj.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster