est devenu l'un des plus populaires ... AprÚs en 2015, le nombre a dépassé les milliers et Ansible est probablement devenu le systÚme de déploiement et d'orchestration le plus utilisé. Sa large gamme d'applications est trÚs impressionnante.
Ansible fonctionne via des connexions SSH vers des hÎtes distants. Il ouvre une session SSH, se connecte, copie le code Python sur le réseau et l'écrit dans un fichier temporaire distinct. AprÚs cela, il exécute ce fichier sur la machine distante. Toute cette séquence d'opérations est assez longue et fastidieuse, il existe donc différentes maniÚres de l'optimiser.
L'une de ces façons est ce qui permet d'utiliser une seule session SSH pour exécuter des instructions, plutÎt que d'ouvrir une nouvelle session à chaque fois, ce qui peut nous faire gagner beaucoup de temps. (N'oubliez pas d'éteindre requiretty paramÚtre pour sudo dans votre /etc/sudoers fichier sur la machine distante)
Une nouvelle façon d'overclocker Ansible est une bibliothĂšque Python appelĂ©e . Si quelquâun nâen a pas entendu parler, je vais dĂ©crire briĂšvement ses fonctionnalitĂ©s. Il permet une exĂ©cution rapide du code Python sur une machine distante, et Ansible n'est qu'un exemple d'utilisation. Mitogen utilise un tube UNIX sur la machine distante et transfĂšre le code python compressĂ© avec zlib et sĂ©rialisĂ© avec pickle. Cela permet de le terminer plus rapidement et dâĂ©conomiser du trafic. Si vous ĂȘtes intĂ©ressĂ© par une explication plus dĂ©taillĂ©e, il est prĂ©fĂ©rable de la lire sur la page . Mais aujourdâhui, nous nous concentrerons uniquement sur le fonctionnement de la bibliothĂšque avec Ansible.
Mitogen, dans certaines circonstances, peut accĂ©lĂ©rer votre code Ansible plusieurs fois et rĂ©duire considĂ©rablement la consommation de trafic. Jetons un coup d'Ćil aux cas d'utilisation les plus populaires et voyons Ă quel point cela nous aide.
J'utilise principalement Ansible pour : crĂ©er des fichiers de configuration sur une machine distante, installer des packages, copier des fichiers vers et depuis la machine distante. Peut-ĂȘtre avez-vous d'autres exemples - Ă©crivez dans les commentaires.
Allons-y!
La configuration de Mitogen pour Ansible est trĂšs simple :
Installez la bibliothĂšque Mitogen :
pip install mitogenIl existe désormais deux maniÚres équivalentes : soit configurer les options dans le fichier de configuration ansible.cfg, soit définir les variables d'environnement nécessaires.
Supposons que le chemin vers le Mitogen installé sera /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Alors:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearou
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyInstallons Ansible dans virtualenv, avec et sans 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.10Veuillez noter que Mitogen 0.2.7 ne fonctionne pas avec Ansible 2.8 (Ă partir de mai 2019)
Créer des 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'Essayons maintenant d'exécuter un playbook qui crée des fichiers sur une machine distante :
---
- 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 }}Et exécutons-le avec et sans Mitogen pour créer 10 fichiers :
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.643sNous constatons une multiplication par 2. Vérifions 20, 30, ..., 100 fichiers :
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.197sEn consĂ©quence, nous avons accĂ©lĂ©rĂ© lâexĂ©cution de plus de 10 fois !
Essayons maintenant différents scénarios et voyons à quel point tout fonctionne plus rapidement pour nous :
Script pour copier des fichiers vers un hĂŽte distant depuis un hĂŽte local (avec le module
copy):
Script pour créer des fichiers sur un hÎte distant avec
copymodule:
Scénario de téléchargement de fichiers d'un hÎte distant vers un hÎte local :
Essayons un scénario avec plusieurs (3) machines distantes, par exemple un scénario avec copie de fichiers sur un hÎte distant :
Comme vous pouvez le constater, Mitogen nous fait gagner du temps et du trafic dans ces scénarios. Mais si le goulot d'étranglement ne se situe pas dans Ansible, mais par exemple dans les E/S d'un disque ou d'un réseau, ou ailleurs, alors il est difficile d'espérer que Mitogen nous aidera.
Essayons un script avec l'installation de packages avec les modules yum/dnf et python à l'aide de pip. Les packages ont été mis en cache afin de ne pas dépendre des problÚmes de réseau :
---
- 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
Avec Mitogen, cela a pris 12 secondes, comme sans.
Sur la page vous pouvez consulter d'autres benchmarks et tests. Comme l'indique la page :
Mitogen ne peut pas accĂ©lĂ©rer le module lorsqu'il est en cours d'exĂ©cution. Cela ne peut que rendre lâexĂ©cution de ce module aussi rapide que possible.
Par conséquent, il est important de trouver vos goulots d'étranglement dans votre déploiement et s'ils sont dus à Ansible, alors Mitogen vous aidera à les résoudre et à accélérer considérablement l'exécution de vos playbooks.
Source: habr.com
