wurde zu einem der beliebtesten . Nachdem im Jahr 2015 die Zahl überstieg Tausende und Ansible wurde wahrscheinlich zum am häufigsten verwendeten Bereitstellungs- und Orchestrierungssystem. Sein breites Anwendungsspektrum ist sehr beeindruckend.
Ansible funktioniert über SSH-Verbindungen zu Remote-Hosts. Es öffnet eine SSH-Sitzung, meldet sich an, kopiert den Python-Code über das Netzwerk und schreibt ihn in eine separate temporäre Datei. Anschließend wird diese Datei auf dem Remote-Computer ausgeführt. Diese ganze Abfolge von Vorgängen ist ziemlich langwierig und mühsam, daher gibt es verschiedene Möglichkeiten, sie zu optimieren.
Eine dieser Möglichkeiten ist Dadurch können Sie eine SSH-Sitzung zum Ausführen von Anweisungen verwenden, anstatt jedes Mal eine neue Sitzung zu öffnen, was uns viel Zeit sparen kann. (Denken Sie daran, es auszuschalten requiretty Einstellung für Sudo in Ihrem /etc/sudoers Datei auf dem Remote-Computer)
Eine neue Möglichkeit, Ansible zu übertakten, ist eine Python-Bibliothek namens . Falls jemand noch nichts davon gehört hat, beschreibe ich kurz seine Funktionsweise. Es ermöglicht die schnelle Ausführung von Python-Code auf einem Remote-Rechner und Ansible ist nur ein Anwendungsbeispiel. Mitogen verwendet eine UNIX-Pipe auf dem Remote-Computer und überträgt mit zlib komprimierten und mit pickle serialisierten Python-Code. Dies hilft, den Vorgang schneller abzuschließen und Verkehr zu sparen. Wenn Sie an einer ausführlicheren Erklärung interessiert sind, lesen Sie am besten auf der Seite nach . Heute konzentrieren wir uns jedoch nur auf die Funktionsweise der Bibliothek mit Ansible.
Unter bestimmten Umständen kann Mitogen Ihren Ansible-Code um ein Vielfaches beschleunigen und den Verkehrsverbrauch erheblich reduzieren. Schauen wir uns die beliebtesten Anwendungsfälle an und sehen, wie sehr es uns hilft.
Ich verwende Ansible am häufigsten zum Erstellen von Konfigurationsdateien auf einem Remote-Computer, zum Installieren von Paketen und zum Kopieren von Dateien zum und vom Remote-Computer. Vielleicht haben Sie noch andere Beispiele – schreiben Sie in die Kommentare.
Lassen Sie uns gehen!
Die Mitogen-Konfiguration für Ansible ist sehr einfach:
Installieren Sie die Mitogen-Bibliothek:
pip install mitogenNun gibt es zwei äquivalente Möglichkeiten: entweder die Optionen in der Konfigurationsdatei ansible.cfg konfigurieren oder die erforderlichen Umgebungsvariablen festlegen.
Nehmen wir an, dass 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_linearoder
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLassen Sie uns Ansible in Virtualenv installieren, 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.10Bitte beachten Sie, dass Mitogen 0.2.7 nicht mit Ansible 2.8 funktioniert (Stand Mai 2019)
Aliase erstellen:
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 wir nun, ein Playbook auszuführen, das Dateien auf einem Remote-Computer erstellt:
---
- 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 lassen Sie es uns 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 zweifache Verbesserung. Lassen Sie uns nach 2, 20, ..., 30 Dateien suchen:
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.197sDadurch haben wir die Ausführung um mehr als das Zehnfache beschleunigt!
Probieren wir nun verschiedene Szenarien aus und sehen, wie viel schneller bei uns alles funktioniert:
Skript zum Kopieren von Dateien von einem lokalen auf einen Remote-Host (mit dem Modul
copy):
Skript zum Erstellen von Dateien auf einem Remote-Host mit
copyModul:
Szenario mit dem Herunterladen von Dateien von einem Remote-Host auf einen lokalen:
Versuchen wir ein Szenario mit mehreren (3) Remote-Rechnern, zum Beispiel ein Szenario mit dem Kopieren von Dateien auf einen Remote-Host:
Wie Sie sehen, spart uns Mitogen in diesen Szenarien sowohl Zeit als auch Verkehr. Aber wenn der Engpass nicht in Ansible liegt, sondern zum Beispiel im I/O einer Festplatte oder eines Netzwerks oder woanders, dann ist es schwer zu erwarten, dass Mitogen uns helfen wird.
Versuchen wir es mit einem Skript zur Installation von Paketen mit yum/dnf- und Python-Modulen mithilfe von pip. Die Pakete wurden zwischengespeichert, um nicht von Netzwerkstörungen 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, genauso wie ohne.
Auf Seite Sie können sich andere Benchmarks und Tests ansehen. Auf der Seite heißt es:
Mitogen kann das Modul nicht beschleunigen, wenn es läuft. Es kann nur die Ausführung dieses Moduls so schnell wie möglich machen.
Daher ist es wichtig, Ihre Engpässe in Ihrer Bereitstellung zu finden. Wenn diese auf Ansible zurückzuführen sind, hilft Ihnen Mitogen bei der Lösung dieser Engpässe und beschleunigt die Ausführung Ihrer Playbooks erheblich.
Source: habr.com
