Ansiblen nopeuttaminen Mitogenin avulla

Ansible tuli yksi suosituimmista Järjestelmän kokoonpanon hallinta. Jälkeen sen osti Red Hat vuonna 2015 numero projektin osallistujia ylitti tuhansia ja Ansiblesta tuli luultavasti käytetyin käyttöönotto- ja orkestrointijärjestelmä. Sen laaja sovellusvalikoima on erittäin vaikuttava.

Ansible toimii SSH-yhteyksien kautta etäisäntäkoneisiin. Se avaa SSH-istunnon, kirjautuu sisään, kopioi Python-koodin verkon yli ja kirjoittaa sen erilliseen väliaikaiseen tiedostoon. Sen jälkeen se suorittaa tämän tiedoston etäkoneella. Tämä koko toimintosarja on melko pitkä ja työläs, joten sen optimoimiseen on useita tapoja.

Yksi näistä tavoista on SSH-putkistot jonka avulla voit käyttää yhtä SSH-istuntoa ohjeiden suorittamiseen sen sijaan, että avaat uuden istunnon joka kerta, mikä voi säästää meiltä paljon aikaa. (Muista vain sammuttaa requiretty asetus sudolle /etc/sudoers tiedosto etäkoneella)

Uusi tapa ylikellottaa Ansible on python-kirjasto nimeltä Mitogeeni. Jos joku ei ole kuullut siitä, kuvailen lyhyesti sen toimivuutta. Se mahdollistaa python-koodin nopean suorittamisen etäkoneella, ja Ansible on vain yksi esimerkki käytöstä. Mitogen käyttää UNIX-putkea etäkoneessa ja siirtää zlibillä pakatun python-koodin ja sarjoitetun pippurin kanssa. Tämä auttaa suorittamaan sen nopeammin ja säästää liikennettä. Jos olet kiinnostunut tarkemmasta selityksestä, on parasta lukea se sivulta "Kuinka se toimii". Mutta tänään keskitymme vain siihen, miten kirjasto toimii Ansiblen kanssa.

Mitogen voi tietyissä olosuhteissa nopeuttaa Ansible-koodiasi useita kertoja ja vähentää merkittävästi liikenteen kulutusta. Katsotaanpa suosituimpia käyttötapauksia ja katsotaan kuinka paljon se auttaa meitä.

Käytän Ansiblea eniten: konfigurointitiedostojen luomiseen etäkoneella, pakettien asentamiseen, tiedostojen kopioimiseen etäkoneelle ja sieltä pois. Ehkä sinulla on muita esimerkkejä - kirjoita kommentteihin.

Mennään!

Mitogeenin konfigurointi Ansiblelle on hyvin yksinkertainen:
Asenna Mitogen-kirjasto:

pip install mitogen

Nyt on kaksi vastaavaa tapaa - joko määrittää asetukset ansible.cfg-määritystiedostossa tai asettaa tarvittavat ympäristömuuttujat.

Oletetaan, että polku asennettuun mitogeeniin on /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Sitten:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

tai

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Asennamme Ansiblen virtualenv:hen Mitogenin kanssa ja ilman:

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

Huomaa, että Mitogen 0.2.7 ei toimi Ansible 2.8:n kanssa (toukokuusta 2019 alkaen)

Aliaksien tekeminen:

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'

Yritetään nyt ajaa pelikirja, joka luo tiedostoja etäkoneelle:

---
- 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 }}

Ja suoritetaan se Mitogenin kanssa ja ilman luodaksesi 10 tiedostoa:

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

Näemme kaksinkertaisen parannuksen. Tarkistetaan 2, 20, ..., 30 tiedostoa:

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

Tämän seurauksena nopeutimme toteutusta yli 10 kertaa!
Kokeillaan nyt erilaisia ​​skenaarioita ja katsotaan kuinka paljon nopeammin kaikki toimii meillä:

  • Komentosarja tiedostojen kopioimiseksi etäisäntään paikalliselta koneelta (moduulin kanssa copy):
    Ansiblen nopeuttaminen Mitogenin avulla

  • Komentosarja tiedostojen luomiseen etäisännälle copy moduuli:
    Ansiblen nopeuttaminen Mitogenin avulla

  • Skenaario tiedostojen lataamisesta etäisännästä paikalliseen:
    Ansiblen nopeuttaminen Mitogenin avulla

Kokeillaan skenaariota useilla (3) etäkoneilla, esimerkiksi skenaario, jossa tiedostot kopioidaan etäisäntään:
Ansiblen nopeuttaminen Mitogenin avulla

Kuten näette, Mitogen säästää sekä aikaa että liikennettä näissä skenaarioissa. Mutta jos pullonkaula ei ole Ansiblessa, vaan esimerkiksi levyn tai verkon I/O:ssa tai jossain muualla, niin on vaikea odottaa Mitogenin auttavan meitä.

Kokeillaan komentosarjaa, jossa asennetaan paketit yum/dnf- ja python-moduuleilla pip:llä. Paketit tallennettiin välimuistiin, jotta ne eivät olisi riippuvaisia ​​verkkohäiriöistä:

---
- 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

Mitogenilla se kesti 12 sekuntia, sama kuin ilman sitä.
Sivulla Mitogen for Ansible -sivu voit tarkastella muita vertailuarvoja ja testejä. Kuten sivulla sanotaan:

Mitogen ei voi nopeuttaa moduulia sen ollessa käynnissä. Se voi vain tehdä tämän moduulin suorittamisesta mahdollisimman nopeaa.

Siksi on tärkeää löytää käyttöönoton pullonkaulat ja jos ne johtuvat Ansiblesta, Mitogen auttaa sinua ratkaisemaan ne ja nopeuttaa pelikirjojen suorittamista merkittävästi.

Lähde: will.com

Lisää kommentti