Ansible funciona mitjançant connexions SSH a amfitrions remots. Obre una sessió SSH, inicia sessió, copia el codi de Python a la xarxa i l'escriu en un fitxer temporal separat. Després d'això, executa aquest fitxer a la màquina remota. Tota aquesta seqüència d'operacions és força llarga i tediosa, per la qual cosa hi ha diverses maneres d'optimitzar-la.
Una d'aquestes maneres és requiretty
configuració de sudo al vostre /etc/sudoers
fitxer a la màquina remota)
Una nova manera d'overclockejar Ansible és una biblioteca Python anomenada
Mitogen en determinades circumstàncies pot accelerar el vostre codi Ansible diverses vegades i reduir significativament el consum de trànsit. Mirem els casos d'ús més populars i veiem fins a quin punt ens ajuda.
Utilitzo Ansible més per: crear fitxers de configuració en una màquina remota, instal·lar paquets, copiar fitxers cap a i des de la màquina remota. Potser teniu altres exemples: escriviu als comentaris.
Anem!
La configuració de Mitogen per a Ansible és molt senzilla:
Instal·leu la biblioteca Mitogen:
pip install mitogen
Ara hi ha dues maneres equivalents: configurar les opcions del fitxer de configuració ansible.cfg o establir les variables d'entorn necessàries.
Suposem que el camí cap al Mitogen instal·lat serà /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Llavors:
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
Instal·lem Ansible a virtualenv, amb i sense 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
Tingueu en compte que Mitogen 0.2.7 no funciona amb Ansible 2.8 (a partir del maig de 2019)
Creació d'àlies:
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'
Ara intentem executar un llibre de jocs que creï fitxers en una màquina 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 }}
I executem-lo amb i sense Mitogen per crear 10 fitxers:
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
Veiem una millora doble. Comprovem si hi ha 2, 20, ..., 30 fitxers:
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
Com a resultat, hem accelerat l'execució més de 10 vegades!
Ara provem diferents escenaris i veiem com més ràpid ens funciona tot:
-
Script per copiar fitxers a un host remot des d'un de local (amb el mòdul
copy
):
-
Script per crear fitxers en un host remot amb
copy
mòdul:
-
Escenari amb la descàrrega de fitxers d'un amfitrió remot a un de local:
Provem un escenari amb diverses (3) màquines remotes, per exemple, un escenari amb la còpia de fitxers a un host remot:
Com podeu veure, Mitogen ens estalvia temps i trànsit en aquests escenaris. Però si el coll d'ampolla no es troba a Ansible, sinó, per exemple, a l'E/S d'un disc o xarxa, o en un altre lloc, és difícil esperar que Mitogen ens ajudi.
Provem un script amb la instal·lació de paquets amb mòduls yum/dnf i python amb pip. Els paquets es van guardar a la memòria cau per no dependre dels errors de la xarxa:
---
- 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
Amb Mitogen va trigar 12 segons, el mateix que sense.
A la pàgina
Mitogen no pot accelerar el mòdul quan s'està executant. Només pot fer que l'execució d'aquest mòdul sigui el més ràpida possible.
Per tant, és important trobar els vostres colls d'ampolla en el vostre desplegament i, si es deuen a Ansible, Mitogen us ajudarà a resoldre'ls i accelerarà significativament l'execució dels vostres llibres de joc.
Font: www.habr.com