Beschleunigen Sie Ansible mit Mitogen

Ansible hat sich zu einem der beliebtesten Konfigurationsmanagementsysteme entwickelt . Nach dem Kauf von Red Hat im Jahr 2015 überstieg die Anzahl der Projektteilnehmer Tausende, und Ansible war wahrscheinlich das am häufigsten verwendete Bereitstellungs- und Orchestrierungssystem. Die breiten Anwendungen sind sehr beeindruckend.


Ansible funktioniert über SSH-Verbindungen zu Remote-Hosts. Es öffnet eine SSH-Sitzung, erstellt eine Anmeldung, kopiert Python-Code über das Netzwerk und schreibt ihn in eine separate temporäre Datei. Danach führt er diese Datei auf dem Remote-Computer aus. Diese gesamte Abfolge von Vorgängen ist ziemlich lang und langwierig, daher gibt es verschiedene Möglichkeiten, sie zu optimieren.


Eine dieser Methoden sind SSH-Pipelines, mit denen Sie eine SSH-Sitzung zum Ausführen von Anweisungen verwenden können, anstatt jedes Mal eine neue Sitzung zu öffnen, was uns viel Zeit sparen kann. ( requiretty daran, die requiretty Einstellung für sudo in Ihrer Datei /etc/sudoers auf dem Remote-Computer zu deaktivieren.)


Eine neue Möglichkeit, Ansible zu "übertakten", ist die Python-Bibliothek Mitogen . Wenn jemand nichts davon gehört hat, werde ich kurz seine Funktionalität beschreiben. Es ermöglicht die schnelle Ausführung von Python-Code auf einem Remotecomputer, und Ansible ist nur ein Anwendungsfall. Mitogen verwendet eine UNIX-Pipe auf einem Remote-Computer und übergibt die mit Python-Code komprimierte zlib und serialisiert mit pickle. Dies hilft, es schneller auszuführen und spart Verkehr. Wenn Sie an einer ausführlicheren Erklärung interessiert sind, lesen Sie diese am besten auf der Seite Funktionsweise. Aber heute werden wir uns nur auf die Bibliothek mit Ansible konzentrieren.


Mitogen kann unter bestimmten Umständen Ihren Ansible-Code mehrmals beschleunigen und den Verkehrsverbrauch erheblich reduzieren. Lassen Sie uns die beliebtesten Anwendungsfälle überprüfen und sehen, wie uns dies hilft.


Ich verwende Ansible am häufigsten für: Erstellen von Konfigurationsdateien auf einem Remotecomputer, Installieren von Paketen, Kopieren von Dateien auf und von einem Remotecomputer. Vielleicht haben Sie andere Beispiele - schreiben Sie in die Kommentare.


Lass uns gehen!


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


 pip install mitogen 

Jetzt gibt es zwei äquivalente Möglichkeiten: entweder um Optionen in der Konfigurationsdatei ansible.cfg zu konfigurieren oder um die erforderlichen Umgebungsvariablen festzulegen.


Angenommen, der Pfad zum installierten Mitogen lautet /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 

Installieren Sie Ansible in virtualenv mit und ohne 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 

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


Wir machen 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' 

Versuchen Sie nun, das Playbook auszuführen und Dateien auf dem Remote-Computer zu erstellen:


 --- - 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 }} 

Und mit und ohne Mitogen ausführen, um 10 Dateien zu erstellen:


 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 

Wir sehen eine zweifache Verbesserung. Lassen Sie uns nach 20, 30, ..., 100 Dateien suchen:


 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 

Infolgedessen haben wir die Ausführung um mehr als das Zehnfache beschleunigt!
Probieren wir nun verschiedene Szenarien aus und sehen, wie viel schneller alles für uns funktioniert:


  • Skript zum Kopieren von Dateien von lokal auf einen Remote-Host (mit Kopiermodul):
    Dateien hochladen


  • Skript zum Erstellen von Dateien auf einem Remote-Host mit Kopiermodul:
    Dateien erstellen


  • Szenario mit dem Herunterladen von Dateien von einem Remote-Host auf einen lokalen:
    Dateien abrufen


  • Skript zum Erstellen von Vorlagen auf einem dedizierten Host mit einigen Variablen und Berechnungen in Jinja
    Vorlagendateien



Versuchen wir ein Szenario mit mehreren (3) Remotecomputern, z. B. ein Szenario mit dem Kopieren von Dateien auf einen Remotehost:
Hochladen von Dateien auf mehrere Hosts


Wie Sie sehen, spart Mitogen in diesen Szenarien sowohl Zeit als auch Verkehr. Wenn der „Engpass“ jedoch nicht bei Ansible liegt, sondern beispielsweise bei einer E / A-Festplatte oder einem Netzwerk oder an einem anderen Ort, ist es schwer zu erwarten, dass Mitogen uns hilft.


Versuchen wir ein Skript, um Pakete mit yum / dnf- und Python-Modulen mithilfe von pip zu installieren. Pakete wurden zwischengespeichert, um nicht von Störungen im Netzwerk abhängig zu sein:


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

Mit Mitogen dauerte es 12 Sekunden, wie ohne.
Auf der Seite Mitogen for Ansible sehen Sie andere Benchmarks und Tests. Wie auf der Seite angegeben:


Mitogen kann ein Modul bei seiner Ausführung nicht beschleunigen. Es kann nur die Ausführung dieses Moduls so schnell wie möglich machen.

Daher ist es wichtig, Ihre Engpässe bei der Bereitstellung zu finden. Wenn diese auf Ansible zurückzuführen sind, hilft Ihnen Mitogen, diese zu lösen und die Ausführung Ihrer Playbooks erheblich zu beschleunigen.


Bearbeiten: Skript mit Vorlagen hinzugefügt

Source: https://habr.com/ru/post/de453520/


All Articles