Az Ansible felgyorsítása a Mitogennel

Ansible az egyik legnépszerűbb lett Rendszerkonfiguráció kezelése. Után a Red Hat vásárolta meg 2015-ben a szám projekt résztvevői meghaladta az ezret, és az Ansible valószínűleg a legtöbbet használt telepítési és hangszerelési rendszerré vált. Alkalmazási köre nagyon lenyűgöző.

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 SSH-csővezetékek amely lehetővé teszi, hogy egy SSH-munkamenetet használjon az utasítások végrehajtására, ahelyett, hogy minden alkalommal új munkamenetet nyitna meg, ami sok időt takaríthat meg. (Csak ne felejtse el kikapcsolni 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 Mitogén. Ha valaki még nem hallott róla, röviden leírom a működését. Lehetővé teszi a python kód gyors végrehajtását egy távoli gépen, és az Ansible csak egy példa a felhasználásra. A Mitogen UNIX-csövet használ a távoli gépen, és zlib-el tömörített és páccal sorosított python kódot továbbít. Ez segít gyorsabban befejezni és forgalmat takarít meg. Ha részletesebb magyarázatra kíváncsi, a legjobb, ha az oldalon olvashat róla "Hogyan működik". De ma csak arra összpontosítunk, hogyan működik a könyvtár az Ansible-vel.

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):
    Az Ansible felgyorsítása a Mitogennel

  • Szkript fájlok létrehozásához távoli gazdagépen copy modul:
    Az Ansible felgyorsítása a Mitogennel

  • Forgatókönyv a fájlok letöltésével távoli gazdagépről egy helyi gépre:
    Az Ansible felgyorsítása a Mitogennel

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:
Az Ansible felgyorsítása a Mitogennel

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 Mitogen for Ansible oldal megnézhet más benchmarkokat és teszteket. Ahogy az oldal írja:

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

Hozzászólás