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 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 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
):
-
Skript pro vytváření souborů na vzdáleném hostiteli s
copy
modul:
-
Scénář se stahováním souborů ze vzdáleného hostitele do místního:
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:
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 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