ist zu einem der beliebtesten . Nachdem überschritt die Zahl der die Tausender-Marke und Ansible ist wahrscheinlich das am häufigsten verwendete Tool für Bereitstellung und Orchestrierung. Seine breite Anwendbarkeit ist sehr beeindruckend.
Ansible arbeitet über SSH-Verbindungen zu entfernten Hosts. Es öffnet eine SSH-Session, meldet sich an, kopiert den Python-Code über das Netzwerk und speichert ihn in einer 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, weshalb es verschiedene Möglichkeiten gibt, sie zu optimieren.
Eine dieser Methoden ist , die es ermöglichen, eine einzige SSH-Session für die Ausführung von Befehlen zu verwenden, anstatt jedes Mal eine neue Session zu öffnen, was uns viel Zeit sparen kann. (Vergessen Sie nicht, die requiretty Einstellung für sudo in Ihrer /etc/sudoers Datei auf der entfernten Maschine zu deaktivieren)
Eine neue Methode zur „Beschleunigung“ von Ansible ist die Python-Bibliothek namens . Falls jemand noch nichts davon gehört hat – hier eine kurze Übersicht über die Funktionsweise. Es ermöglicht die schnelle Ausführung von Python-Code auf einer entfernten Maschine und Ansible ist nur eines der Beispiele, wie man es nutzen kann. Mitogen verwendet UNIX-Pipes auf der entfernten Maschine und überträgt den Python-Code komprimiert mit zlib und serialisiert mit pickle. Das hilft, die Ausführung zu beschleunigen und spart Traffic. Wenn Sie an einer detaillierteren Erklärung interessiert sind, lesen Sie am besten die entsprechende Seite. . Aber heute konzentrieren wir uns nur auf die Nutzung der Bibliothek mit Ansible.
Mitogen kann unter bestimmten Bedingungen Ihren Ansible-Code mehrfach beschleunigen und den Datenverbrauch erheblich reduzieren. Lassen Sie uns die beliebtesten Anwendungsbeispiele betrachten und sehen, wie viel es uns hilft.
Am häufigsten verwende ich Ansible für: die Erstellung von Konfigurationsdateien auf der entfernten Maschine, die Installation von Paketen, das Kopieren von Dateien auf die entfernte Maschine und zurück. Vielleicht haben Sie andere Beispiele – hinterlassen Sie einen Kommentar.
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 zu konfigurieren oder die benötigten Umgebungsvariablen festzulegen.
Angenommen, der Pfad zu dem 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_linearoder
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLassen Sie 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 Sie, dass Mitogen 0.2.7 nicht mit Ansible 2.8 funktioniert (Stand: Mai 2019)
Legen wir Aliases an:
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 Remote-Maschine erstellt:
---
- hosts: all
gather_facts: false
tasks:
- name: Dateien mit dem Copy-Inhaltsmodul erstellen
copy:
content: |
Testdatei {{ item }}
dest: ~/file_{{ item }}
with_sequence: start=1 end={{ n }}Und wir führen es sowohl mit als auch ohne Mitogen zur Erstellung von 10 Dateien aus:
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 100 %. Lassen Sie uns das für 20, 30, …, 100 Dateien überprü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 probieren wir verschiedene Szenarien aus und sehen, wie viel schneller alles funktioniert:
Szenario zum Kopieren von Dateien auf einen entfernten Host von lokal (mit dem Modul
copy):
Szenario zum Erstellen von Dateien auf dem entfernten Host mit
copyModul:
Szenario mit dem Herunterladen von Dateien von einem entfernten Host auf lokal:
Lassen Sie uns ein Szenario mit mehreren (3) entfernten Maschinen ausprobieren, zum Beispiel ein Szenario zum Kopieren von Dateien auf einen entfernten Host:
Wie man sieht, spart Mitogen sowohl Zeit als auch Traffic in diesen Szenarien. Wenn jedoch der 'Flaschenhals' nicht in Ansible, sondern zum Beispiel in der I/O des Disk oder im Netzwerk oder irgendwo anders ist, ist es schwer zu erwarten, dass Mitogen uns hilft.
Lassen Sie uns ein Szenario mit der Installation von Paketen mit yum/dnf und Python-Modulen mit pip ausprobieren. Die Pakete wurden zwischengespeichert, um nicht von Netzwerkproblemen 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 auch ohne.
Auf der Seite Sie können sich andere Benchmarks und Tests ansehen. Auf der Seite steht:
Mitogen kann das Modul beim Ausführen nicht beschleunigen. Es kann nur die Ausführung dieses Moduls so schnell wie möglich gestalten.
Daher ist es wichtig, Engpässe in Ihrer Bereitstellung zu finden. Wenn diese durch Ansible verursacht werden, kann Ihnen Mitogen helfen, sie zu lösen und die Ausführung Ihrer Playbooks erheblich zu beschleunigen.
Quelle: habr.com
