Ansible radi preko SSH konekcija na udaljene hostove. Otvara SSH sesiju, prijavljuje se, kopira Python kod preko mreže i upisuje ga u zasebnu privremenu datoteku. Nakon toga, pokreće ovu datoteku na udaljenoj mašini. Cijeli ovaj niz operacija je prilično dug i zamoran, tako da postoje različiti načini da ga optimizirate.
Jedan od ovih načina je requiretty
postavka za sudo u vašem /etc/sudoers
fajl na udaljenoj mašini)
Novi način za "overclockanje" Ansible-a je python biblioteka po imenu
Mitogen pod određenim okolnostima može ubrzati vaš Ansible kod nekoliko puta i značajno smanjiti potrošnju prometa. Pogledajmo najpopularnije slučajeve upotrebe i vidimo kako nam to pomaže.
Stvari koje najviše koristim Ansible su: kreiranje konfiguracionih fajlova na udaljenoj mašini, instaliranje paketa, kopiranje fajlova na i sa udaljene mašine. Možda imate i druge primjere - napišite u komentarima.
Idemo!
Mitogen konfiguracija za Ansible je vrlo jednostavna:
Instalirajte Mitogen biblioteku:
pip install mitogen
Sada postoje dva ekvivalentna načina - ili konfigurirati opcije u konfiguracijskoj datoteci ansible.cfg, ili postaviti potrebne varijable okruženja.
Pretpostavimo da će put do instaliranog Mitogena biti /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. onda:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
ili
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Instalirajte Ansible u virtualenv, sa i bez Mitogena:
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
Imajte na umu da Mitogen 0.2.7 ne radi sa Ansible 2.8 (od maja 2019.)
Pravljenje alijasa:
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'
Sada pokušajmo da pokrenemo playbook koji kreira datoteke na udaljenoj mašini:
---
- 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 }}
I pokrenite sa i bez Mitogena da kreirate 10 datoteka:
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
Vidimo 2x poboljšanje. Provjerimo 20, 30, ..., 100 fajlova:
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
Kao rezultat toga, ubrzali smo izvršenje za više od 10 puta!
Isprobajmo sada različite scenarije i vidimo koliko nam sve brže funkcionira:
-
Skripta za kopiranje datoteka na udaljeni host sa lokalnog hosta (sa modulom
copy
):
-
Skripta za kreiranje datoteka na udaljenom hostu sa
copy
modul:
-
Scenarij sa preuzimanjem datoteka sa udaljenog hosta na lokalni:
Pokušajmo sa scenarijem s više (3) udaljenih mašina, kao što je kopiranje datoteka na udaljeni host:
Kao što vidite, Mitogen nam štedi i vrijeme i promet u ovim scenarijima. Ali ako "usko grlo" nije u Ansibleu, već na primjer u disk I/O ili mreži, ili bilo gdje drugdje, onda je teško očekivati da će nam Mitogen pomoći.
Hajde da isprobamo scenario sa instaliranjem yum/dnf paketa i python modula koristeći pip. Paketi su keširani kako ne bi ovisili o problemima u mreži:
---
- 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
Sa Mitogenom je trebalo 12 sekundi, kao i bez njega.
Na stranici
Mitogen ne može ubrzati modul dok radi. To samo može učiniti izvršenje ovog modula što je brže moguće.
Stoga je važno pronaći svoja uska grla u implementaciji i ako su ona uzrokovana Ansible-om, onda će vam Mitogen pomoći da ih riješite i značajno ubrzati izvršavanje vaših priručnika.
izvor: www.habr.com