Ansible travaglia nantu à cunnessione SSH à ospiti remoti. Apertura una sessione SSH, accede, copia u codice Python nantu à a reta è scrive in un schedariu tempurale separatu. Dopu quì, corre stu schedariu nantu à a macchina remota. Sta sequenza sana di l'operazioni hè abbastanza longa è tediosa, cusì ci sò parechje manere di ottimisimu.
Unu di sti modi hè requiretty
setting for sudo in your /etc/sudoers
u schedariu nantu à a macchina remota)
Un novu modu di overclock Ansible hè una biblioteca di pitone chjamata
Mitogen in certi circustanze pò accelerà u vostru codice Ansible parechje volte è riduce significativamente u cunsumu di trafficu. Fighjemu i casi di usu più populari è vede quantu ci aiuta.
Aduprà Ansible più per: creà schedarii di cunfigurazione in una macchina remota, installà pacchetti, copià i fugliali da è da a macchina remota. Forsi avete altri esempi - scrivite in i cumenti.
Let's go!
A cunfigurazione di Mitogen per Ansible hè assai simplice:
Installa a libreria Mitogen:
pip install mitogen
Avà ci sò dui modi equivalenti - o cunfigurà l'opzioni in u schedariu di cunfigurazione ansible.cfg, o stabilisce e variabili di l'ambienti necessarii.
Assumimu chì u percorsu à u Mitogen installatu serà /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Allora:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
o
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Installemu Ansible in virtualenv, cù è senza 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.10
Per piacè nutate chì Mitogen 0.2.7 ùn funziona micca cù Ansible 2.8 (da maghju 2019)
Creazione di alias:
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'
Avà pruvemu à eseguisce un playbook chì crea schedari nantu à una macchina remota:
---
- 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 }}
E corremu cù è senza Mitogen per creà 10 schedari:
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
Avemu vistu una migliione 2 volte. Cuntrollamu per 20, 30, ..., 100 schedari:
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
In u risultatu, avemu acceleratu l'esecuzione di più di 10 volte!
Avà pruvemu diversi scenarii è vede quantu più veloce tuttu funziona per noi:
-
Script per cupià i fugliali à un host remoto da un locu (cù u modulu
copy
):
-
Script per creà fugliali nantu à un host remoto cù
copy
modulu:
-
Scenariu cù scaricamentu di fugliali da un host remoto à un locu locale:
Pruvemu un scenariu cù parechje (3) macchine remoti, per esempiu un scenariu cù copia di schedari à un host remoto:
Comu pudete vede, Mitogen ci salva u tempu è u trafficu in questi scenarii. Ma s'è u bottleneck ùn hè micca in Ansible, ma per esempiu in l'I / O di un discu o rete, o in un altru locu, allora hè difficiule d'aspittà chì Mitogen ci aiuterà.
Pruvate un script cù l'installazione di pacchetti cù moduli yum/dnf è python cù pip. I pacchetti sò stati in cache per ùn dipende micca di i glitches di a rete:
---
- 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
Cù Mitogen hà pigliatu 12 seconde, cum'è senza ellu.
In pàgina
Mitogen ùn pò micca accelerà u modulu quandu hè in esecuzione. Puderà solu fà l'esekzione di stu modulu u più veloce pussibule.
Per quessa, hè impurtante di truvà i vostri colli di bottiglia in a vostra implementazione è s'ellu sò dovuti à Ansible, allora Mitogen vi aiuterà à risolviri è accelerà significativamente l'esekzione di i vostri playbooks.
Source: www.habr.com