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 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 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
):
-
Skript na vytváranie súborov na vzdialenom hostiteľovi s
copy
modul:
-
Scenár so sťahovaním súborov zo vzdialeného hostiteľa do lokálneho:
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ľ:
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
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