a devenit una dintre cele mai populare . După ce în 2015, numărul a depășit mii, iar Ansible a devenit probabil cel mai utilizat sistem de desfășurare și orchestration. Domeniile sale de aplicare sunt foarte impresionante.
Ansible funcționează prin conexiuni SSH la gazdele remote. Deschide o sesiune SSH, se conectează, copiază cod Python prin rețea și îl înregistrează într-un fișier temporar separat. Apoi rulează acest fișier pe mașina remote. Întreaga secvență de operațiuni este destul de lungă și plictisitoare, de aceea există diverse modalități de a o optimiza.
Una dintre aceste modalități este care permit utilizarea unei singure sesiuni SSH pentru executarea instrucțiunilor, fără a deschide de fiecare dată o nouă sesiune, ceea ce ne poate economisi mult timp. (Doar nu uitați să dezactivați requiretty din configurația sudo în fișierul vostru de pe mașina remote) /etc/sudoers O nouă modalitate de a „îmbunătăți” Ansible este biblioteca Python numită
Mitogen „Cum funcționează” Mitogen, în anumite condiții, poate accelera codul vostru Ansible de câteva ori și poate reduce semnificativ consumul de trafic. Să verificăm cele mai populare exemple de utilizare și să vedem cât de mult ne ajută.
Cel mai mult folosesc Ansible pentru: crearea fișierelor de configurație pe mașina remote, instalarea pachetelor, copierea fișierelor pe mașina remote și înapoi. Poate aveți și alte exemple – scrieți în comentarii.
Să începem!
Configurarea Mitogen pentru Ansible este foarte simplă:
Instalăm biblioteca Mitogen:
pip install mitogen
Acum există două moduri echivalente – fie să configurăm opțiunile în fișierul de configurare ansible.cfg, fie să setăm variabilele de mediu necesare.Să presupunem că calea către Mitogen instalat va fi
Să presupunem că calea către Mitogen-ul instalat va fi /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Atunci:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearsau
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyVom instala Ansible în virtualenv, cu și fără Mitogen:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Rețineți că Mitogen 0.2.7 nu funcționează cu Ansible 2.8 (în mai 2019)
Facem aliasuri:
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'Acum vom încerca să rulăm un playbook care creează fișiere pe o mașină remote:
---
- 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 vom rula cu Mitogen și fără el pentru a crea 10 fișiere:
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.643sVedem o îmbunătățire de 2 ori. Să verificăm pentru 20, 30, …, 100 fișiere:
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În concluzie, am accelerat execuția de mai mult de 10 ori!
Acum vom încerca diferite scenarii și vom vedea cât de mult se îmbunătățește totul:
Scenariul de copiere a fișierelor pe un host remote din cel local (cu modulul
copy):
Scenariul de creare a fișierelor pe un host remote cu
copymodulul:
Scenariul de descărcare a fișierelor de pe un host remote pe cel local:
Vom încerca un scenariu cu mai multe (3) mașini remote, de exemplu, scenariul de copiere a fișierelor pe un host remote:
După cum se poate observa, Mitogen economisește atât timp, cât și trafic în aceste scenarii. Dar dacă "gâtul de sticlă" nu este în Ansible, ci, de exemplu, în I/O-ul discului sau în rețea, sau în altă parte, atunci este greu de așteptat ca Mitogen să ne ajute.
Să încercăm un scenariu cu instalarea pachetelor folosind yum/dnf și module python cu ajutorul pip. Pachetele au fost cache-uite pentru a nu depinde de problemele de rețea:
---
- 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
Cu Mitogen, a durat 12 secunde, la fel ca și fără el.
Pe pagina Puteți vizualiza alte benchmark-uri și teste. Așa cum se afirmă pe pagină:
Mitogen nu poate accelera un modul atunci când acesta este în execuție. Poate doar să facă execuția acestui modul cât mai rapidă posibil.
Prin urmare, este important să identificați zonele necorespunzătoare în desfășurarea dumneavoastră, iar dacă acestea sunt cauzate de Ansible, Mitogen vă va ajuta să le rezolvați și să accelerați semnificativ execuția playbook-urilor dumneavoastră.
Sursa: habr.com
