postao je jedan od najpopularnijih . Nakon što je 2015. godine broj prešao je tisuće i Ansible je postao vjerojatno najkorišteniji sustav za implementaciju i orkestraciju. Njegova široka područja primjene su vrlo impresivna.
Ansible radi putem SSH veza s udaljenim hostovima. Otvara SSH sesiju, prijavljuje se, kopira Python kod putem mreže i zapisuje ga u privremenu datoteku. Nakon toga pokreće tu datoteku na udaljenoj mašini. Cijela ova sekvenca radnji je prilično spora i zamorna, zbog čega postoje različiti načini za optimizaciju.
Jedan od tih načina je koji omogućuje korištenje jedne SSH sesije za izvršavanje instrukcija, umjesto da se svaki put otvara nova sesija, što može uštedjeti mnogo vremena. (Samo ne zaboravite isključiti requiretty određivanje za sudo u vašem /etc/sudoers datoteci na udaljenoj mašini)
Novi način „ubrzavanja“ Ansibla je Python biblioteka po imenu . Ako netko o njoj nije čuo — ukratko ću opisati njenu funkcionalnost. Omogućuje brzo izvršavanje Python koda na udaljenoj mašini, a Ansible je samo jedan od primjera korištenja. Mitogen koristi UNIX cijev na udaljenoj mašini i prenosi Python kod komprimiran zlib i serijaliziran pomoću picklea. To pomaže u bržem izvršenju i štedi propusnost. Ako ste zainteresirani za detaljnije objašnjenje, najbolje je pročitati o tome na stranici . No, danas ćemo se fokusirati samo na rad biblioteke s Ansibleom.
Mitogen u određenim okolnostima može ubrzati vaš Ansible kod nekoliko puta i značajno smanjiti potrošnju prometa. Pogledajmo najpopularnije primjere korištenja i vidimo koliko nam to pomaže.
Najviše koristim Ansible za: izradu datoteka konfiguracije na udaljenoj mašini, instalaciju paketa, kopiranje datoteka na udaljenu mašinu i nazad. Možda imate druge primjere — napišite u komentarima.
Idemo!
Konfiguracija Mitogen za Ansible je vrlo jednostavna:
Instaliramo Mitogen biblioteku:
pip install mitogenSada postoje dva jednaka načina — ili postaviti 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. Tada:
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/strategyInstalirajmo Ansible u virtualenv, s Mitogen i bez njega:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Napomena: Mitogen 0.2.7 ne radi s Ansible 2.8 (od svibnja 2019)
Napravimo alias-e:
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 probajmo pokrenuti playbook koji stvara datoteke na udaljenoj mašini:
---
- hosts: all
gather_facts: false
tasks:
- name: Stvori datoteke s modulom za kopiranje sadržaja
copy:
content: |
testna datoteka {{ item }}
dest: ~/datoteka_{{ item }}
with_sequence: start=1 end={{ n }}I pokrenut ćemo s Mitogen i bez njega kako bismo stvorili 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 poboljšanje od 2 puta. Provjerimo za 20, 30, …, 100 datoteka:
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.197sNa kraju, ubrzali smo izvođenje više od 10 puta!
Sada probajmo različite scenarije i vidimo koliko brže sve radi:
Scenarij kopiranja datoteka na udaljeni host s lokalnog (s modulom
copy):
Scenarij stvaranja datoteka na udaljenom hostu s
copymodulom:
Scenarij s preuzimanjem datoteka s udaljenog hosta na lokalni:
Probajmo scenarij s nekoliko (3) udaljenih mašina, na primjer, scenarij s kopiranjem datoteka na udaljeni host:
Kao što vidimo, Mitogen nam štedi i vrijeme i promet u ovim scenarijima. No, ako je 'usko grlo' izvan Ansible-a, na primjer, u I/O diska ili mreži, ili negdje drugdje, teško je očekivati da će nam Mitogen pomoći.
Probajmo scenarij s instalacijom paketa s yum/dnf i modula python pomoću pipa. Paketi su bili keširani kako ne bismo ovisili o problemima u mreži:
---
- hosts: all
gather_facts: false
tasks:
- name: Instaliraj pakete
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Instaliraj pip module
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
S Mitogenom to je trajalo 12 sekundi, kao i bez njega.
korisnik postavlja ime novo stvorene mreže. možete pogledati druge benchmarke i testove. Kao što se tvrdi na stranici:
Mitogen ne može ubrzati modul kada se izvršava. Može samo učiniti izvršavanje tog modula što bržim koliko god je to moguće.
Zato je važno pronaći svoje uska grla u implementaciji i ako su ona uzrokovana Ansibleom, Mitogen će vam pomoći da ih riješite i značajno ubrza izvršavanje vaših playbookova.
Izvor: habr.com
