wurde eines der beliebtesten . Nachdem im Jahr 2015 ĂŒberschritt die Anzahl 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 , 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 . 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 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 mitogenNun 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_linearoder
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLass 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.10Bitte 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.643sWir 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.197sInsgesamt 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):
Szenario zur Dateierstellung auf dem entfernten Host mit
copyModul:
Szenario mit dem Herunterladen von Dateien vom entfernten Host auf lokal:
Wir versuchen ein Szenario mit mehreren (3) entfernten Maschinen, zum Beispiel ein Szenario zum Kopieren von Dateien auf den entfernten Host:
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 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
