postao jedan od najpopularnijih ... Poslije u broju za 2015 premašio hiljade i Ansible je postao vjerovatno najčešće korišteni sistem za implementaciju i orkestraciju. Njegov širok spektar primjene je vrlo impresivan.
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 što nam omogućava da koristimo jednu SSH sesiju za izvršavanje instrukcija, umjesto da svaki put otvaramo novu sesiju, što nam može uštedjeti mnogo vremena. (Samo ne zaboravite da onemogućite 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 . ako neko nije čuo za njega, ukratko ću opisati njegovu funkcionalnost. Omogućava brzo izvršavanje python koda na udaljenoj mašini, a Ansible je samo jedan od slučajeva upotrebe. Mitogen koristi UNIX cev na udaljenoj mašini i prenosi python kod komprimiran pomoću zlib-a i serijalizovan sa pickle-om. Ovo pomaže da se završi brže i štedi propusni opseg. Ako vas zanima detaljnije objašnjenje, najbolje je da o tome pročitate na stranici . Ali danas ćemo se fokusirati samo na to kako biblioteka radi sa Ansibleom.
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 mitogenSada 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_linearili
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyInstalirajte 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.10Imajte 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.643sVidimo 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.197sKao 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
copymodul:
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 možete vidjeti druga mjerila i testove. Kako piše 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
