se stal jedním z nejoblíbenějších . Po v roce 2015 číslo 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 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á . 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 . 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 mitogenNyní 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_linearnebo
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyPojď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.10Vezmě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.643sVidí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.197sV 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
copymodul:
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 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
