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 requiretty
asetus sudolle /etc/sudoers
tiedosto etäkoneella)
Uusi tapa ylikellottaa Ansible on python-kirjasto nimeltä
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
):
-
Komentosarja tiedostojen luomiseen etäisännälle
copy
moduuli:
-
Skenaario tiedostojen lataamisesta etäisännästä paikalliseen:
Kokeillaan skenaariota useilla (3) etäkoneilla, esimerkiksi skenaario, jossa tiedostot kopioidaan etäisäntään:
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 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