Accélérez Ansible avec Mitogen!
â version russe
Ansible est l'un des systĂšmes de gestion de configuration les plus populaires de nos jours. AprĂšs son acquisition par Red Hat en 2015, Ansible a atteint des milliers de contributeurs et est peut-ĂȘtre devenu l'un des outils de dĂ©ploiement et d'orchestration les plus utilisĂ©s. Ses cas d'utilisation sont assez impressionnants.
Ansible fonctionne par connexions SSH vers des hÎtes distants. Il ouvre la session SSH, se connecte au shell, copie le code python via le réseau et crée un fichier temporaire sur les hÎtes distants avec ce code. Dans l'étape suivante, il exécute le fichier en cours avec l'interpréteur python. Tout ce flux de travail est assez lourd et il existe plusieurs façons de le rendre plus rapide et plus léger.
L'une de ces mĂ©thodes consiste Ă utiliser des pipelines SSH qui rĂ©utilisent une session SSH pour copier le code python de plusieurs tĂąches et empĂȘchent l'ouverture de plusieurs sessions, ce qui fait gagner beaucoup de temps. (N'oubliez pas de dĂ©sactiver les paramĂštres requiretty
pour sudo du cÎté distant dans /etc/sudoers
)
La nouvelle façon d'accĂ©lĂ©rer Ansible est une excellente bibliothĂšque python appelĂ©e Mitogen . Si quelqu'un comme moi ne le connaissait pas - cette bibliothĂšque permet une exĂ©cution rapide du code python sur un hĂŽte distant et Ansible n'est qu'un de ses cas. Mitogen utilise des canaux UNIX sur des machines distantes tout en transmettant du code python "dĂ©capĂ©" compressĂ© avec zlib. Cela permet de l'exĂ©cuter rapidement et sans trop de trafic. Si vous ĂȘtes intĂ©ressĂ©, vous pouvez lire les dĂ©tails de son fonctionnement sur sa page "Comment ça marche" . Mais nous allons nous concentrer aujourd'hui sur la partie liĂ©e Ă Ansible.
Mitogen dans des circonstances spécifiques peut accélérer votre Ansible en quelques temps et réduire considérablement votre bande passante. Vérifions les cas d'utilisation les plus populaires et voyons si cela nous est utile.
Les cas d'utilisation les plus populaires pour exĂ©cuter Ansible sont: la crĂ©ation de fichiers de configuration sur un hĂŽte distant, l'installation de packages, le tĂ©lĂ©chargement et le tĂ©lĂ©chargement de fichiers depuis et vers un hĂŽte distant. Vous souhaitez peut-ĂȘtre vĂ©rifier d'autres cas d'utilisation, veuillez laisser des commentaires sur cet article.
Commençons à rouler!
La configuration de Mitogen pour Ansible est assez simple:
Installez le module Mitogen:
pip install mitogen
Ensuite, configurez les variables d'environnement ou définissez les options de configuration dans le fichier ansible.cfg, les deux options conviennent:
Supposons que /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
soit votre chemin vers la bibliothÚque Mitogen installée.
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy export ANSIBLE_STRATEGY=mitogen_linear
ou
[defaults] strategy = mitogen_linear strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Préparez Ansible dans virtualenv, avec et sans Mitogen activé:
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
Veuillez noter que Mitogen 0.2.7 ne fonctionne pas avec Ansible 2.8 (pour mai 2019)
Créez des alias:
alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy:$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook'
Essayons maintenant le playbook qui crée un fichier à distance:
--- - 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écutez-le avec Mitogen et sans tout en créant 10 fichiers:
time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s
à l'heure actuelle, nous constatons une amélioration de x2 fois. Vérifions-le pour 20, 30, ..., 100 fichiers:
time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s
Finalement, nous avons amélioré le temps d'exécution de plus de 10 fois!
Essayons maintenant différents scénarios et voyons comment cela s'améliore:
Scénario de téléchargement de fichiers de l'hÎte local vers un serveur distant (avec module de copy
):

Scénario de création de fichiers sur l'hÎte distant avec module de copy
:

Scénario avec la récupération de fichiers de l'hÎte distant vers le local:

Essayons le dernier scénario sur quelques (3) hÎtes distants, par exemple le scénario de téléchargement de fichiers:

Comme nous pouvons le voir, le Mitogen nous fait gagner du temps et de la bande passante dans ces scénarios. Mais si le goulot d'étranglement n'est pas Ansible, mais par exemple les E / S du disque ou du réseau, ou ailleurs, alors il est difficile d'attendre de Mitogen qu'il aide bien sûr.
Lançons par exemple l'installation des packages avec yum / dnf et l'installation des modules python avec pip.
Les packages ont été pré-mis en cache pour éviter les dépendances sur les 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 prend 12 secondes, ainsi qu'avec Ansible pur.
Dans la page Mitogen pour Ansible, vous pouvez voir des repÚres et des mesures supplémentaires. Comme le déclare la page:
Mitogen ne peut pas améliorer un module une fois qu'il est en cours d'exécution, il ne peut que s'assurer que le module s'exécute aussi rapidement que possible
C'est pourquoi il est important de trouver oĂč se trouvent vos goulots d'Ă©tranglement et s'ils sont liĂ©s aux opĂ©rations Ansible, Mitogen vous aidera Ă le rĂ©soudre et Ă accĂ©lĂ©rer considĂ©rablement vos playbooks.