stala jednou z nejpopulárnějších . Poté, co v roce 2015 počet překročil tisíce a Ansible se stal pravděpodobně nejpoužívanějším systémem pro nasazení a orchestraci. Jeho široké aplikační oblasti jsou velmi impozantní.
Ansible pracuje přes SSH spojení k vzdáleným hostitelům. Otevře SSH relaci, přihlásí se, zkopíruje kód v Pythonu přes síť a uloží jej do samostatného dočasného souboru. Poté spustí tento soubor na vzdáleném stroji. Celý tento sled operací je poměrně dlouhý a nudný, proto existují různé způsoby, jak jej optimalizovat.
Jedním z těchto způsobů je , který umožňuje použít jednu SSH relaci pro provádění instrukcí, místo aby se každýkrát otevírala nová relace, což může ušetřit spoustu času. (Jen nezapomeňte vypnout requiretty nastavení pro sudo ve vašem /etc/sudoers souboru na vzdáleném stroji)
Novým způsobem, jak „zrychlit“ Ansible, je knihovna Pythonu s názvem . Pokud o ní někdo neslyšel – pak v krátkosti popíšu její funkcionalitu. Umožňuje rychlé provádění kódu Pythonu na vzdáleném stroji a Ansible je pouze jedna z příkladů použití. Mitogen využívá UNIX pipe na vzdáleném stroji a přenáší kód Pythonu komprimovaný pomocí zlib a serializovaný pomocí pickle. To pomáhá rychleji provádět a šetří přenos dat. Pokud máte zájem o podrobnější vysvětlení, je nejlepší přečíst si o tom na stránce . Dnes se však zaměříme pouze na práci knihovny s Ansible.
Mitogen může v určitých okolnostech zrychlit váš Ansible kód několikrát a významně snížit spotřebu dat. Podívejme se na nejpopulárnější příklady použití a zjistíme, jak nám to pomáhá.
Nejvíce používám Ansible k: vytváření konfiguračních souborů na vzdáleném stroji, instalaci balíčků, kopírování souborů na vzdálený stroj a zpět. Možná máte další příklady – napište je do komentářů.
Začínáme!
Konfigurace Mitogen pro Ansible je velmi jednoduchá:
Nainstalujeme knihovnu Mitogen:
pip install mitogenNyní existují dva rovnocenné způsoby – buď nastavit možnosti v konfiguračním souboru ansible.cfg, nebo nastavit potřebné proměnné prostředí.
Předpokládejme, že cesta k nainstalovanému Mitogen 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_linearnebo
[defaults]
strategy = mitogen_linear
strategy_plugins = \/usr\/lib\/python2.7\/site-packages\/ansible_mitogen\/plugins\/strategyNainstalujeme Ansible v prostředí virtualenv, s Mitogen i 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.10Všimněte si, že Mitogen 0.2.7 nefunguje s Ansible 2.8 (k mému k květnu 2019)
Vytvoříme aliasy:
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'Teď se pokusíme spustit playbook, který vytváří soubory na vzdáleném stroji:
---
- hosts: all
gather_facts: false
tasks:
- name: Vytvořit soubory s modulem copy
copy:
content: |
testovací soubor {{ item }}
dest: ~\/file_{{ item }}
with_sequence: start=1 end={{ n }}A spustíme s Mitogen i bez něj pro vytvoření 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 zlepšení o 2x. Zkusme to pro 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.197sNakonec jsme zrychlili vykonávání více než 10krát!
Teď zkusíme různé scénáře a uvidíme, jak mnohem rychleji to funguje:
Scénář kopírování souborů na vzdálený host z místního (s modulem
smazat):
Scénář vytváření souborů na vzdáleném hostu s
smazatmodulem:
Scénář stahování souborů z vzdáleného hosta na místní:
Zkusíme scénář se třemi (3) vzdálenými stroji, například scénář s kopírováním souborů na vzdálený host:
Jak je vidět, Mitogen nám šetří jak čas, tak i provoz v těchto scénářích. Ale pokud je „úzké hrdlo“ nikoli v Ansible, ale například v I/O disku nebo síti, pak je těžké očekávat, že by nám Mitogen pomohl.
Zkusme scénář s instalací balíčků pomocí yum\/dnf a modulů Python pomocí pip. Balíčky byly vyrovnány, aby nespoléhali na chyby v síti:
---
- hosts: all
gather_facts: false
tasks:
- name: Nainstalovat balíčky
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Nainstalovat pip moduly
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
S Mitogen to trvalo 12 sekund, stejně jako bez něj.
Na stránce můžete si prohlédnout další benchmarky a testy. Jak se uvádí na stránce:
Mitogen nemůže zrychlit modul, když je vykonáván. Může pouze učinit vykonání tohoto modulu co nejrychlejším.
Proto je důležité najít vaše úzká místa ve nasazení, a pokud jsou způsobena Ansible, Mitogen vám pomůže je vyřešit a výrazně zrychlit vykonávání vašich playbooků.
Zdroj: habr.com
