ble en av de mest populære . Etter i 2015 tallet oversteg tusenvis og Ansible ble sannsynligvis det mest brukte distribusjons- og orkestreringssystemet. Det brede spekteret av bruksområder er veldig imponerende.
Ansible fungerer over SSH-tilkoblinger til eksterne verter. Den åpner en SSH-sesjon, logger på, kopierer Python-koden over nettverket og skriver den til en egen midlertidig fil. Etter det kjører den denne filen på den eksterne maskinen. Hele denne operasjonssekvensen er ganske lang og kjedelig, så det er forskjellige måter å optimalisere den på.
En av disse måtene er som lar deg bruke én SSH-økt til å utføre instruksjoner, i stedet for å åpne en ny økt hver gang, noe som kan spare oss for mye tid. (Bare husk å slå av requiretty innstilling for sudo i din /etc/sudoers fil på den eksterne maskinen)
En ny måte å overklokke Ansible på er et python-bibliotek som heter . Hvis noen ikke har hørt om det, vil jeg kort beskrive funksjonaliteten. Den tillater rask utførelse av python-kode på en ekstern maskin, og Ansible er bare ett eksempel på bruk. Mitogen bruker et UNIX-rør på den eksterne maskinen og overfører pythonkode komprimert med zlib og serialisert med pickle. Dette bidrar til å fullføre det raskere og sparer trafikk. Hvis du er interessert i en mer detaljert forklaring, er det best å lese om det på siden . Men i dag skal vi kun fokusere på hvordan biblioteket fungerer med Ansible.
Mitogen kan under visse omstendigheter øke hastigheten på Ansible-koden flere ganger og redusere trafikkforbruket betydelig. La oss sjekke ut de mest populære brukstilfellene og se hvor mye det hjelper oss.
Jeg bruker Ansible mest for: å lage konfigurasjonsfiler på en ekstern maskin, installere pakker, kopiere filer til og fra den eksterne maskinen. Kanskje du har andre eksempler - skriv i kommentarfeltet.
La oss gå!
Mitogen-konfigurasjonen for Ansible er veldig enkel:
Installer Mitogen-biblioteket:
pip install mitogenNå er det to tilsvarende måter - enten konfigurer alternativene i konfigurasjonsfilen ansible.cfg, eller angi de nødvendige miljøvariablene.
La oss anta at banen til den installerte Mitogen vil være /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Deretter:
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/strategyLa oss installere Ansible i virtualenv, med og uten Mitogen:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10Vær oppmerksom på at Mitogen 0.2.7 ikke fungerer med Ansible 2.8 (per mai 2019)
Lage aliaser:
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'La oss nå prøve å kjøre en spillebok som lager filer på en ekstern maskin:
---
- 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 }}Og la oss kjøre den med og uten Mitogen for å lage 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 dobbel forbedring. La oss se etter 2, 20, ..., 30 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.197sSom et resultat akselererte vi utførelsen med mer enn 10 ganger!
La oss nå prøve forskjellige scenarier og se hvor mye raskere alt fungerer for oss:
Skript for å kopiere filer til en ekstern vert fra en lokal (med modulen
copy):
Skript for å lage filer på en ekstern vert med
copymodul:
Scenario med nedlasting av filer fra en ekstern vert til en lokal:
La oss prøve et scenario med flere (3) eksterne maskiner, for eksempel et scenario med kopiering av filer til en ekstern vert:
Som du ser sparer Mitogen oss for både tid og trafikk i disse scenariene. Men hvis flaskehalsen ikke er i Ansible, men for eksempel i I/O på en disk eller et nettverk, eller et annet sted, så er det vanskelig å forvente at Mitogen vil hjelpe oss.
La oss prøve et skript med å installere pakker med yum/dnf og python-moduler ved å bruke pip. Pakkene ble bufret for ikke å være avhengig av nettverksfeil:
---
- 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
Med Mitogen tok det 12 sekunder, det samme som uten.
Side du kan se på andre benchmarks og tester. Som det står på siden:
Mitogen kan ikke øke hastigheten på modulen når den kjører. Det kan bare gjøre utførelsen av denne modulen så rask som mulig.
Derfor er det viktig å finne flaskehalsene dine i distribusjonen din, og hvis de skyldes Ansible, vil Mitogen hjelpe deg med å løse dem og øke hastigheten på utførelsen av spillebøkene betydelig.
Kilde: www.habr.com
