Urýchlenie Ansible pomocou Mitogenu

Ansible sa stal jedným z najpopulárnejších Správa konfigurácie systému... Po bol zakúpený spoločnosťou Red Hat v roku 2015 číslo účastníkov projektu presiahol tisíce a Ansible sa stal pravdepodobne najpoužívanejším systémom nasadenia a orchestrácie. Jeho široká škála aplikácií je veľmi pôsobivá.

Ansible funguje cez SSH pripojenia k vzdialeným hostiteľom. Otvorí reláciu SSH, prihlási sa, skopíruje kód Pythonu cez sieť a zapíše ho do samostatného dočasného súboru. Potom spustí tento súbor na vzdialenom počítači. Celý tento sled operácií je dosť dlhý a zdĺhavý, takže existujú rôzne spôsoby, ako ho optimalizovať.

Jedným z týchto spôsobov je Potrubia SSH čo vám umožňuje použiť jednu reláciu SSH na vykonanie pokynov, namiesto toho, aby ste zakaždým otvárali novú reláciu, čo nám môže ušetriť veľa času. (Len nezabudnite vypnúť requiretty nastavenie pre sudo vo vašom /etc/sudoers súbor na vzdialenom počítači)

Novým spôsobom pretaktovania Ansible je knižnica pythonu s názvom Mitogen. Ak o ňom niekto nepočul, stručne popíšem jeho funkčnosť. Umožňuje rýchle spustenie kódu pythonu na vzdialenom počítači a Ansible je len jedným príkladom použitia. Mitogen používa UNIX pipe na vzdialenom počítači a prenáša python kód komprimovaný pomocou zlib a serializovaný pomocou pickle. Pomáha to dokončiť ho rýchlejšie a šetrí premávku. Ak máte záujem o podrobnejšie vysvetlenie, najlepšie je prečítať si o tom na stránke "Ako to funguje". Dnes sa ale zameriame len na to, ako knižnica funguje s Ansible.

Mitogen môže za určitých okolností niekoľkonásobne zrýchliť váš kód Ansible a výrazne znížiť spotrebu prevádzky. Pozrime sa na najpopulárnejšie prípady použitia a uvidíme, ako veľmi nám to pomáha.

Ansible používam najviac na: vytváranie konfiguračných súborov na vzdialenom počítači, inštaláciu balíkov, kopírovanie súborov do a zo vzdialeného počítača. Možno máte ďalšie príklady - napíšte do komentárov.

Poďme!

Konfigurácia mitogénu pre Ansible je veľmi jednoduchá:
Nainštalujte knižnicu Mitogen:

pip install mitogen

Teraz existujú dva ekvivalentné spôsoby - buď nakonfigurujte možnosti v konfiguračnom súbore ansible.cfg, alebo nastavte potrebné premenné prostredia.

Predpokladajme, že cesta k nainštalovanému mitogénu bude /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. potom:

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

alebo

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

Nainštalujeme Ansible vo virtualenv, s Mitogenom a bez neho:

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

Upozorňujeme, že Mitogen 0.2.7 nefunguje s Ansible 2.8 (od mája 2019)

Vytváranie aliasov:

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'

Teraz sa pokúsme spustiť playbook, ktorý vytvorí súbory na vzdialenom počítači:

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

A poďme to spustiť s Mitogenom a bez neho, aby sme vytvorili 10 súborov:

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

Vidíme 2-násobné zlepšenie. Skontrolujeme 20, 30, ..., 100 súborov:

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

V dôsledku toho sme zrýchlili realizáciu viac ako 10-krát!
Teraz skúsme rôzne scenáre a uvidíme, ako rýchlejšie nám všetko funguje:

  • Skript na kopírovanie súborov na vzdialený hostiteľ z lokálneho (s modulom copy):
    Urýchlenie Ansible pomocou Mitogenu

  • Skript na vytváranie súborov na vzdialenom hostiteľovi s copy modul:
    Urýchlenie Ansible pomocou Mitogenu

  • Scenár so sťahovaním súborov zo vzdialeného hostiteľa do lokálneho:
    Urýchlenie Ansible pomocou Mitogenu

Skúsme scenár s niekoľkými (3) vzdialenými počítačmi, napríklad scenár s kopírovaním súborov na vzdialený hostiteľ:
Urýchlenie Ansible pomocou Mitogenu

Ako vidíte, Mitogen nám v týchto scenároch šetrí čas aj premávku. Ale ak úzke miesto nie je v Ansible, ale napríklad v I/O disku alebo sieti, alebo niekde inde, potom je ťažké očakávať, že nám Mitogen pomôže.

Skúsme skript s inštaláciou balíkov s modulmi yum/dnf a python pomocou pip. Balíky boli uložené do vyrovnávacej pamäte, aby nezáviseli od sieťových závad:

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

S Mitogenom to trvalo 12 sekúnd, rovnako ako bez neho.
Na stránke Mitogén pre stránku Ansible môžete sa pozrieť na ďalšie benchmarky a testy. Ako uvádza stránka:

Mitogen nedokáže zrýchliť modul, keď je spustený. Môže iba urýchliť vykonanie tohto modulu.

Preto je dôležité nájsť svoje úzke miesta vo vašom nasadení a ak sú spôsobené Ansible, potom vám Mitogen pomôže vyriešiť ich a výrazne urýchli spustenie vašich playbookov.

Zdroj: hab.com

Pridať komentár