est devenu l'un des plus populaires . AprÚs que en 2015, le nombre de a dépassé les mille et Ansible est probablement devenu le systÚme de déploiement et d'orchestration le plus utilisé. Ses vastes domaines d'application sont trÚs impressionnants.
Ansible fonctionne via des connexions SSH vers des hÎtes distants. Il ouvre une session SSH, se connecte, copie du code Python sur le réseau et l'enregistre dans un fichier temporaire distinct. Ensuite, il exécute ce fichier sur la machine distante. Toute cette séquence d'opérations est assez longue et fastidieuse, donc il existe différentes façons de l'optimiser.
L'une de ces façons est qui permettent d'utiliser une seule session SSH pour exécuter des instructions, au lieu d'ouvrir une nouvelle session à chaque fois, ce qui peut nous faire gagner beaucoup de temps. (N'oubliez simplement pas de désactiver la requiretty dans votre fichier sudo sur la machine distante) /etc/sudoers fichier sur une machine distante)
Un nouveau moyen d'accĂ©lĂ©rer Ansible est une bibliothĂšque Python appelĂ©e . Si quelqu'un n'en a jamais entendu parler, je vais briĂšvement en dĂ©crire la fonctionnalitĂ©. Elle permet une exĂ©cution rapide du code Python sur la machine distante et Ansible n'est qu'un des exemples d'utilisation. Mitogen utilise un pipe UNIX sur la machine distante et transmet le code Python compressĂ© avec zlib et sĂ©rialisĂ© Ă l'aide de pickle. Cela aide Ă l'exĂ©cuter plus rapidement et Ă©conomise de la bande passante. Si vous ĂȘtes intĂ©ressĂ© par une explication plus dĂ©taillĂ©e, il est prĂ©fĂ©rable de lire 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 bande passante. Vérifions les exemples les plus populaires d'utilisation et voyons dans quelle mesure cela nous aide.
J'utilise surtout Ansible pour : crĂ©er des fichiers de configuration sur la machine distante, installer des packages, copier des fichiers sur la machine distante et vice versa. Vous avez peut-ĂȘtre d'autres exemples - n'hĂ©sitez pas Ă les partager dans les commentaires.
Allons-y !
La configuration de Mitogen pour Ansible est trĂšs simple :
Installer la bibliothĂšque Mitogen :
pip install mitogenIl existe maintenant deux façons é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 Mitogen installé soit /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 un virtualenv, avec Mitogen et sans lui :
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 (en mai 2019)
Créons 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: Créer des fichiers avec le module de contenu copy
copy:
content: |
fichier test {{ item }}
dest: ~/file_{{ item }}
with_sequence: start=1 end={{ n }}Et exécutons avec Mitogen et sans lui 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 voyons une amĂ©lioration de 2 fois. VĂ©rifions pour 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 fin de compte, nous avons accéléré l'exécution de plus de 10 fois !
Essayons maintenant différents scénarios et voyons combien cela fonctionne plus rapidement :
Scénario de copie de fichiers sur un hÎte distant depuis le local (avec le module
copy):
Scénario de création de fichiers sur un hÎte distant avec
copyle module :
Scénario de téléchargement de fichiers depuis un hÎte distant vers le local :
Essayons un scénario avec plusieurs (3) machines distantes, par exemple un scénario de copie de fichiers sur un hÎte distant :
Comme on peut le voir, Mitogen nous fait économiser à la fois du temps et du trafic dans ces scénarios. Mais si le « goulot d'étranglement » n'est pas dans Ansible, mais par exemple dans l'I/O du disque ou du réseau, ou ailleurs, alors il est difficile de s'attendre à ce que Mitogen nous aide.
Essayons un scénario avec l'installation de paquets avec yum/dnf et de modules python avec pip. Les paquets ont été mis en cache pour ne pas dépendre des bugs du réseau :
---
- hosts: all
gather_facts: false
tasks:
- name: Installer des paquets
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Installer des modules pip
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Avec Mitogen, cela a pris 12 secondes, tout comme sans lui.
Sur la page Vous pouvez consulter d'autres benchmarks et tests. Comme indiqué sur la page :
Mitogen ne peut pas accélérer un module lorsqu'il est exécuté. Il peut seulement rendre l'exécution de ce module aussi rapide que possible.
Il est donc important de trouver vos goulets d'étranglement dans le déploiement et s'ils sont causés par Ansible, Mitogen peut vous aider à les résoudre et à accélérer considérablement l'exécution de vos playbooks.
Source : habr.com
