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 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
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 mitogen
Nun 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_linear
oder
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Lassen 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.10
Bitte 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.643s
Wir 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.197s
Dadurch 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
copy
Modul:
-
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
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