Wir beschleunigen Ansible mit Mitogen

Ansible wurde eines der beliebtesten Konfigurationsmanagement-Systeme. Nachdem es von Red Hat erworben wurde im Jahr 2015 ĂŒberschritt die Anzahl der Projektbeteiligten die Tausende und Ansible wurde wahrscheinlich das am hĂ€ufigsten verwendete System fĂŒr Bereitstellung und Orchestrierung. Seine breiten Anwendungsmöglichkeiten sind sehr beeindruckend.

Ansible arbeitet ĂŒber SSH-Verbindungen zu entfernten Hosts. Es öffnet eine SSH-Sitzung, meldet sich an, kopiert den Python-Code ĂŒber das Netzwerk und speichert ihn in einer separaten temporĂ€ren Datei. Danach fĂŒhrt es diese Datei auf der entfernten Maschine aus. Diese gesamte Abfolge von Operationen ist recht langwierig und mĂŒhsam, daher gibt es verschiedene Möglichkeiten, sie zu optimieren.

Eine dieser Möglichkeiten sind SSH-Pipelines , die es ermöglichen, eine SSH-Sitzung zur AusfĂŒhrung von Befehlen zu verwenden, anstatt jedes Mal eine neue Sitzung zu öffnen, was viel Zeit sparen kann. (Vergessen Sie nur nicht, die requiretty -Einstellung fĂŒr sudo in Ihrem /etc/sudoers Datei auf der entfernten Maschine)

Eine neue Methode, um Ansible "aufzupeppen", ist die Python-Bibliothek mit dem Namen Mitogen. Falls jemand noch nichts davon gehört hat – ich werde ihre FunktionalitĂ€t kurz beschreiben. Sie ermöglicht die schnelle AusfĂŒhrung von Python-Code auf einer entfernten Maschine, und Ansible ist nur ein Beispiel fĂŒr die Verwendung. Mitogen verwendet UNIX-Pipes auf der entfernten Maschine und ĂŒbertrĂ€gt den Python-Code komprimiert mit zlib und serialisiert mit pickle. Das hilft, sie schneller auszufĂŒhren und Datenverkehr einzusparen. Wenn Sie an einer detaillierteren ErklĂ€rung interessiert sind, ist es am besten, auf der Seite "Wie es funktioniert"nachzulesen. Aber heute konzentrieren wir uns nur auf die Arbeit der Bibliothek mit Ansible.

Mitogen kann unter bestimmten UmstĂ€nden Ihren Ansible-Code um ein Vielfaches beschleunigen und die Bandbreitennutzung erheblich reduzieren. Lassen Sie uns die gĂ€ngigsten Anwendungsbeispiele ĂŒberprĂŒfen und sehen, wie sehr uns das hilft.

Ich benutze Ansible am hĂ€ufigsten fĂŒr: das Erstellen von Konfigurationsdateien auf der entfernten Maschine, die Installation von Paketen, das Kopieren von Dateien zur entfernten Maschine und zurĂŒck. Vielleicht haben Sie andere Beispiele – schreiben Sie sie in die Kommentare.

Los geht's!

Die Konfiguration von Mitogen fĂŒr Ansible ist sehr einfach:
Installieren Sie die Mitogen-Bibliothek:

pip install mitogen

Nun gibt es zwei gleichwertige Möglichkeiten – entweder die Optionen in der Konfigurationsdatei ansible.cfg einzustellen oder die erforderlichen Umgebungsvariablen zu setzen.

Angenommen, der Pfad zum installierten Mitogen wÀre /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Dann:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

oder

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

Lass uns Ansible in einer virtualenv mit und ohne Mitogen installieren:

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

Bitte beachten, dass Mitogen 0.2.7 nicht mit Ansible 2.8 funktioniert (Stand Mai 2019)

Wir erstellen Aliase:

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'

Jetzt versuchen wir ein Playbook auszufĂŒhren, das Dateien auf der entfernten Maschine erstellt:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Erstelle Dateien mit dem Modul zur Inhaltenkopie
      copy:
        content: |
          Testdatei {{ item }}
        dest: ~/file_{{ item }}
      with_sequence: start=1 end={{ n }}

Und wir werden es mit und ohne Mitogen ausfĂŒhren, um 10 Dateien zu erstellen:

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

Wir sehen eine Verbesserung von 2-fach. Lassen Sie uns fĂŒr 20, 30, 
, 100 Dateien prĂŒfen:

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

Insgesamt haben wir die AusfĂŒhrung um mehr als das 10-fache beschleunigt!
Jetzt versuchen wir verschiedene Szenarien und sehen, wie viel schneller alles funktioniert:

  • Szenario zum Kopieren von Dateien auf den entfernten Host von lokal (mit dem Modul copy):
    Wir beschleunigen Ansible mit Mitogen

  • Szenario zur Dateierstellung auf dem entfernten Host mit copy Modul:
    Wir beschleunigen Ansible mit Mitogen

  • Szenario mit dem Herunterladen von Dateien vom entfernten Host auf lokal:
    Wir beschleunigen Ansible mit Mitogen

Wir versuchen ein Szenario mit mehreren (3) entfernten Maschinen, zum Beispiel ein Szenario zum Kopieren von Dateien auf den entfernten Host:
Wir beschleunigen Ansible mit Mitogen

Wie man sieht, spart Mitogen uns sowohl Zeit als auch Bandbreite in diesen Szenarien. Wenn jedoch das "Engpass" nicht bei Ansible, sondern zum Beispiel bei I/O der Festplatte oder im Netzwerk liegt, wird es schwierig sein zu erwarten, dass Mitogen uns hilft.

Lass uns ein Szenario mit der Installation von Paketen mit yum/dnf und Python-Modulen mit pip versuchen. Die Pakete wurden zwischengespeichert, um nicht von Netzwerkanomalien abhÀngig zu sein:

---
- hosts: all
  gather_facts: false
  tasks:
    - name: Pakete installieren
      become: true
      package:
        name:
          - samba
          - httpd
          - nano
          - ruby
        state: present

    - name: Pip-Module installieren
      become: true
      pip:
        name:
          - pytest-split-tests
          - bottle
          - pep8
          - flask
        state: present

Mit Mitogen dauerte es 12 Sekunden, wie ohne ihn.
Auf der Seite Mitogen fĂŒr die Ansible-Seite Sie können sich andere Benchmarks und Tests ansehen. Wie auf der Seite angegeben:

Mitogen kann das Modul nicht beschleunigen, wĂ€hrend es ausgefĂŒhrt wird. Es kann nur die AusfĂŒhrung des Moduls so schnell wie möglich gestalten.

Deshalb ist es wichtig, Ihre EngpĂ€sse bei der Bereitstellung zu finden, und wenn sie durch Ansible verursacht werden, hilft Ihnen Mitogen, diese zu lösen und die AusfĂŒhrung Ihrer Playbooks erheblich zu beschleunigen.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster