blev en af de mest populære . Efter at i 2015 oversteg antallet tusinder, og Ansible blev nok det mest anvendte system til deployment og orchestration. Dets brede anvendelsesområder er meget imponerende.
Ansible arbejder via SSH-forbindelser til eksterne værter. Det åbner en SSH-session, logger ind, kopierer Python-koden over netværket og gemmer den i en midlertidig fil. Derefter kører det denne fil på den eksterne maskine. Hele denne sekvens af operationer er ret lang og kedelig, derfor findes der forskellige måder at optimere den på.
En af disse måder er som gør det muligt at bruge én SSH-session til at udføre instruktioner i stedet for at åbne en ny session hver gang, hvilket kan spare os meget tid. (Bare glem ikke at deaktivere requiretty indstillingen for sudo i din /etc/sudoers fil på den eksterne maskine)
En ny måde at 'booste' Ansible på er et Python-bibliotek ved navn . Hvis nogen ikke har hørt om det — så vil jeg kort beskrive dets funktionalitet. Det muliggør hurtig udførelse af Python-kode på den eksterne maskine, og Ansible er kun et af eksemplerne på brugen. Mitogen bruger UNIX-pipes på den eksterne maskine og overfører Python-koden, komprimeret med zlib og serialiseret med pickle. Dette hjælper med at køre det hurtigere og sparer båndbredde. Hvis du er interesseret i en mere detaljeret forklaring, er det bedst at læse om det på siden . Men i dag fokuserer vi kun på, hvordan biblioteket arbejder med Ansible.
Mitogen kan under bestemte omstændigheder accelerere din Ansible-kode flere gange og betydeligt reducere båndbåndsforbruget. Lad os tjekke de mest populære anvendelseseksempler og se, hvor meget det hjælper os.
Jeg bruger mest Ansible til: at oprette konfigurationsfiler på den eksterne maskine, installere pakker, kopiere filer til og fra den eksterne maskine. Måske har du andre eksempler — skriv i kommentarerne.
Lad os komme i gang!
Konfigurationen af Mitogen til Ansible er meget enkel:
Installer Mitogen-biblioteket:
pip install mitogenNu er der to lige muligheder — enten at konfigurere indstillingerne i ansible.cfg-filen eller at sætte de nødvendige miljøvariabler.
Lad os antage, at stien til den installerede Mitogen vil være /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Sådan:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_lineareller
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLad Ansible i virtualenv, med Mitogen og uden:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Bemærk, at Mitogen 0.2.7 ikke fungerer med Ansible 2.8 (pr. maj 2019)
Opretter aliases:
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'Lad os nu prøve at køre et playbook, der opretter filer på en fjernmaskine:
---
- hosts: all
gather_facts: false
tasks:
- name: Opret filer med copy content-modulet
copy:
content: |
testfil {{ item }}
dest: ~/file_{{ item }}
with_sequence: start=1 end={{ n }}Og lad os køre det med og uden Mitogen for at oprette 10 filer:
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.643sVi ser en forbedring på 2 gange. Lad os kontrollere for 20, 30, …, 100 filer:
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.197sResultatet er, at vi har accelereret eksekveringen mere end 10 gange!
Lad os nu prøve forskellige scenarier og se, hvor hurtigt alt fungerer:
Scenarie for at kopiere filer til en fjernhost fra lokale (med modulet
copy):
Scenarie for at oprette filer på en fjernhost med
copymodulet:
Scenarie for at hente filer fra en fjernhost til lokale:
Lad os prøve et scenarie med flere (3) fjernmaskiner, for eksempel et scenarie for at kopiere filer til en fjernhost:
Som det ses, sparer Mitogen både tid og båndbredde i disse scenarier. Men hvis "flaskehalsen" ikke er i Ansible, men for eksempel i disk I/O eller netværket, eller et andet sted, er det svært at forvente, at Mitogen vil hjælpe os.
Lad os prøve et scenarie med installation af pakker med yum/dnf og Python-moduler ved hjælp af pip. Pakkerne blev cachelagret for ikke at være afhængige af netværksproblemer:
---
- hosts: all
gather_facts: false
tasks:
- name: Installer pakker
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Installer pip-moduler
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Med Mitogen tog det 12 sekunder, ligesom uden det.
På siden du kan se andre benchmarking- og testresultater. Som det angives på siden:
Mitogen kan ikke accelerere modulet, når det udføres. Det kan kun gøre udførelsen af dette modul så hurtig som muligt.
Derfor er det vigtigt at finde dine flaskehalse i implementeringen, og hvis de skyldes Ansible, så kan Mitogen hjælpe dig med at løse dem og betydeligt øge hastigheden på dine playbooks.
Kilde: habr.com
