Accélérer Ansible avec Mitogen

Ansible est devenu l'un des plus populaires Gestion de la configuration du systÚme... AprÚs a été acheté par Red Hat en 2015, le nombre participants au projet 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 Pipelines SSH 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 MitogĂšne. 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 "Comment ça fonctionne". 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 mitogen

Il 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_linear

ou

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Installons 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.10

Veuillez 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.643s

Nous 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.197s

En 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):
    Accélérer Ansible avec Mitogen

  • Script pour crĂ©er des fichiers sur un hĂŽte distant avec copy module:
    Accélérer Ansible avec Mitogen

  • ScĂ©nario de tĂ©lĂ©chargement de fichiers d'un hĂŽte distant vers un hĂŽte local :
    Accélérer Ansible avec Mitogen

Essayons un scĂ©nario avec plusieurs (3) machines distantes, par exemple un scĂ©nario avec copie de fichiers sur un hĂŽte distant :
Accélérer Ansible avec Mitogen

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 Page MitogĂšne pour Ansible 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

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster