Zrychlení Ansible pomocí Mitogenu

Možná se stal jedním z nejoblíbenějších Správa konfigurace systému. Po byl zakoupen společností Red Hat v roce 2015 číslo účastníci projektu přesáhl tisíce a Ansible se stal pravděpodobně nejpoužívanějším systémem nasazení a orchestrace. Jeho široká škála aplikací je velmi působivá.

Ansible funguje přes SSH připojení ke vzdáleným hostitelům. Otevře relaci SSH, přihlásí se, zkopíruje kód Pythonu přes síť a zapíše jej do samostatného dočasného souboru. Poté spustí tento soubor na vzdáleném počítači. Celá tato sekvence operací je poměrně dlouhá a zdlouhavá, takže existují různé způsoby, jak ji optimalizovat.

Jedním z těchto způsobů je SSH potrubí což vám umožňuje použít jednu relaci SSH k provádění instrukcí, spíše než pokaždé otevírat novou relaci, což nám může ušetřit spoustu času. (Jen nezapomeňte vypnout requiretty nastavení pro sudo ve vašem /etc/sudoers soubor na vzdáleném počítači)

Nový způsob přetaktování Ansible je python knihovna nazvaná Mitogen. Pokud o něm někdo neslyšel, stručně popíšu jeho funkce. Umožňuje rychlé provádění kódu pythonu na vzdáleném počítači a Ansible je jen jedním příkladem použití. Mitogen používá na vzdáleném počítači rouru UNIX a přenáší kód pythonu komprimovaný pomocí zlib a serializovaný pomocí pickle. To pomáhá dokončit jej rychleji a šetří provoz. Pokud máte zájem o podrobnější vysvětlení, je nejlepší si o tom přečíst na stránce "Jak to funguje". Dnes se ale zaměříme pouze na to, jak knihovna s Ansible pracuje.

Mitogen může za určitých okolností několikrát zrychlit váš kód Ansible a výrazně snížit spotřebu provozu. Pojďme se podívat na nejoblíbenější případy použití a uvidíme, jak moc nám to pomáhá.

Ansible používám nejvíce pro: vytváření konfiguračních souborů na vzdáleném počítači, instalaci balíčků, kopírování souborů do a ze vzdáleného počítače. Možná máte další příklady - napište do komentářů.

Pojďme!

Konfigurace mitogenu pro Ansible je velmi jednoduchá:
Nainstalujte knihovnu Mitogen:

pip install mitogen

Nyní existují dva ekvivalentní způsoby – buď nakonfigurujte možnosti v konfiguračním souboru ansible.cfg, nebo nastavte potřebné proměnné prostředí.

Předpokládejme, že cesta k nainstalovanému Mitogenu bude /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Pak:

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

nebo

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

Pojďme nainstalovat Ansible ve virtualenv, s Mitogenem a bez něj:

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

Vezměte prosím na vědomí, že Mitogen 0.2.7 nefunguje s Ansible 2.8 (od května 2019)

Vytváření aliasů:

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'

Nyní zkusme spustit playbook, který vytváří soubory na vzdáleném 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 spusťte to s Mitogenem a bez něj a vytvořte 10 souborů:

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 2násobné zlepšení. Zkontrolujeme 20, 30, ..., 100 souborů:

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 jsme zrychlili provádění více než 10krát!
Nyní zkusme různé scénáře a uvidíme, jak rychleji nám vše funguje:

  • Skript pro kopírování souborů na vzdálený hostitel z lokálního (s modulem copy):
    Zrychlení Ansible pomocí Mitogenu

  • Skript pro vytváření souborů na vzdáleném hostiteli s copy modul:
    Zrychlení Ansible pomocí Mitogenu

  • Scénář se stahováním souborů ze vzdáleného hostitele do místního:
    Zrychlení Ansible pomocí Mitogenu

Zkusme scénář s několika (3) vzdálenými stroji, například scénář s kopírováním souborů na vzdálený hostitel:
Zrychlení Ansible pomocí Mitogenu

Jak vidíte, Mitogen nám v těchto scénářích šetří čas i provoz. Pokud ale úzké hrdlo není v Ansible, ale například v I/O disku nebo sítě nebo někde jinde, pak těžko očekávat, že nám Mitogen pomůže.

Zkusme skript s instalací balíčků s moduly yum/dnf a python pomocí pip. Balíčky byly uloženy do mezipaměti, aby nezávisely na síťových závadách:

---
- 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 Mitogenem to trvalo 12 sekund, stejně jako bez něj.
Na stránce Mitogen pro stránku Ansible můžete se podívat na další benchmarky a testy. Jak uvádí stránka:

Mitogen nemůže zrychlit modul, když běží. Může pouze zrychlit provádění tohoto modulu.

Proto je důležité najít svá úzká místa ve vašem nasazení a pokud jsou způsobena Ansible, pak vám je Mitogen pomůže vyřešit a výrazně urychlí provádění vašich playbooků.

Zdroj: www.habr.com

Přidat komentář