Az Ansible SSH-kapcsolatokon keresztül működik távoli gazdagépekkel. Megnyit egy SSH-munkamenetet, bejelentkezik, átmásolja a Python kódot a hálózaton keresztül, és egy külön ideiglenes fájlba írja. Ezt követően ezt a fájlt futtatja a távoli gépen. Ez az egész műveletsor meglehetősen hosszú és fárasztó, ezért többféleképpen lehet optimalizálni.
Ezen módszerek egyike az requiretty
a sudo beállítása /etc/sudoers
fájl a távoli gépen)
Az Ansible túlhajtásának új módja a python könyvtár, az úgynevezett
A Mitogen bizonyos körülmények között többször is felgyorsíthatja az Ansible kódot, és jelentősen csökkentheti a forgalomfogyasztást. Nézzük meg a legnépszerűbb használati eseteket, és nézzük meg, mennyit segít nekünk.
Az Ansible-t leginkább a következőkre használom: konfigurációs fájlok létrehozása távoli gépen, csomagok telepítése, fájlok másolása a távoli gépre és onnan. Talán van más példája is - írja meg a megjegyzésekben.
Gyerünk!
Az Ansible mitogén konfigurációja nagyon egyszerű:
Telepítse a Mitogen könyvtárat:
pip install mitogen
Most két egyenértékű módja van – vagy konfigurálja a beállításokat az ansible.cfg konfigurációs fájlban, vagy állítsa be a szükséges környezeti változókat.
Tegyük fel, hogy a telepített Mitogén elérési útja ez lesz /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Akkor:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
vagy
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Telepítsük az Ansible-t virtualenv-ben, Mitogennel és anélkül:
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
Felhívjuk figyelmét, hogy a Mitogen 0.2.7 nem működik az Ansible 2.8-al (2019 májusától)
Álnevek készítése:
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'
Most próbáljunk meg futtatni egy játékkönyvet, amely fájlokat hoz létre egy távoli gépen:
---
- 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 }}
És futtassuk le Mitogennel és anélkül, hogy 10 fájlt hozzunk létre:
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
Kétszeres javulást látunk. Nézzünk meg 2, 20, ..., 30 fájlt:
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
Ennek eredményeként több mint 10-szeresére gyorsítottuk a végrehajtást!
Most próbáljunk ki különböző forgatókönyveket, és nézzük meg, mennyivel gyorsabban működik nálunk:
-
Szkript fájlok távoli gazdagépre másolásához egy helyi gépről (a modullal
copy
):
-
Szkript fájlok létrehozásához távoli gazdagépen
copy
modul:
-
Forgatókönyv a fájlok letöltésével távoli gazdagépről egy helyi gépre:
Próbáljunk ki egy forgatókönyvet több (3) távoli géppel, például egy forgatókönyvet a fájlok távoli gazdagépre másolásával:
Amint láthatja, a Mitogen időt és forgalmat takarít meg nekünk ezekben a forgatókönyvekben. De ha a szűk keresztmetszet nem az Ansible-ben van, hanem például egy lemez vagy hálózat I/O-jában, vagy máshol, akkor nehéz elvárni, hogy a Mitogen segítsen nekünk.
Próbáljunk ki egy szkriptet yum/dnf és python modulokkal rendelkező csomagok telepítésével a pip használatával. A csomagok gyorsítótárba kerültek, hogy ne függjenek a hálózati hibáktól:
---
- 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
Mitogennel 12 másodpercig tartott, ugyanúgy, mint nélküle.
Az oldalon
A Mitogen nem tudja felgyorsítani a modult működés közben. Csak a lehető leggyorsabbá teheti ennek a modulnak a végrehajtását.
Ezért fontos, hogy megtalálja a szűk keresztmetszeteket a telepítés során, és ha ezek az Ansible miatt vannak, akkor a Mitogen segít megoldani őket, és jelentősen felgyorsítja a játékkönyvek végrehajtását.
Forrás: will.com