is een van de populairste . Nadat is het aantal gestegen tot duizenden en Ansible is waarschijnlijk het meest gebruikte systeem voor implementatie en orkestratie geworden. De brede toepassingsgebieden zijn zeer indrukwekkend.
Ansible werkt via SSH-verbindingen naar externe hosts. Het opent een SSH-sessie, logt in, kopieert de Python-code over het netwerk en schrijft deze naar een apart tijdelijk bestand. Daarna voert het dit bestand uit op de externe machine. Deze reeks bewerkingen is vrij lang en saai, daarom zijn er verschillende manieren om deze te optimaliseren.
Een van deze manieren is die het mogelijk maakt om ƩƩn SSH-sessie te gebruiken voor het uitvoeren van instructies, in plaats van telkens een nieuwe sessie te openen, wat ons veel tijd kan besparen. (Vergeet alleen niet om de requiretty instelling voor sudo in uw /etc/sudoers bestand op de externe machine uit te schakelen)
Een nieuwe manier om Ansible te 'versnellen' is de Python-bibliotheek genaamd . Mocht iemand er nog niet van gehoord hebben ā ik zal kort de functionaliteit beschrijven. Het stelt u in staat om Python-code snel uit te voeren op een externe machine en Ansible is slechts ƩƩn van de voorbeelden van gebruik. Mitogen gebruikt UNIX-pipes op de externe machine en verzendt de Python-code gecomprimeerd met zlib en geserialiseerd met pickle. Dit helpt om het sneller uit te voeren en bespaart verkeer. Als u geĆÆnteresseerd bent in een meer gedetailleerde uitleg, kunt u het beste deze lezen op de pagina . Maar vandaag focussen we ons alleen op het gebruik van de bibliotheek met Ansible.
Mitogen kan onder bepaalde omstandigheden uw Ansible-code meerdere keren versnellen en het verkeer aanzienlijk verminderen. Laten we de meest populaire voorbeelden van gebruik bekijken en zien hoeveel dit ons helpt.
Ik gebruik Ansible het meest voor: het creĆ«ren van configuratiebestanden op een externe machine, het installeren van pakketten, bestanden naar de externe machine kopiĆ«ren en vice versa. Misschien heeft u andere voorbeelden ā laat het ons weten in de reacties.
Laten we beginnen!
De configuratie van Mitogen voor Ansible is heel eenvoudig:
Installeer de Mitogen-bibliotheek:
pip install mitogenEr zijn nu twee gelijkwaardige manieren ā ofwel de opties instellen in het configuratiebestand ansible.cfg, of de benodigde omgevingsvariabelen instellen.
Stel dat het pad naar het geĆÆnstalleerde Mitogen is /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Dan:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linearof
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategyLaten we Ansible installeren in virtualenv, met en zonder 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.10Let op dat Mitogen 0.2.7 niet werkt met Ansible 2.8 (in mei 2019)
Maak 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'Laten we nu proberen een playbook uit te voeren dat bestanden op een externe machine aanmaakt:
---
- hosts: all
gather_facts: false
tasks:
- name: Maak bestanden aan met de kopie-contentmodule
copy:
content: |
test bestand {{ item }}
dest: ~/bestand_{{ item }}
with_sequence: start=1 end={{ n }}En laten we het uitvoeren met en zonder Mitogen voor het aanmaken van 10 bestanden:
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.643sWe zien een verbetering van 2 keer. Laten we het controleren voor 20, 30, ..., 100 bestanden:
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.197sUiteindelijk hebben we de uitvoering meer dan 10 keer versneld!
Laten we nu verschillende scenario's proberen en zien hoe snel alles werkt:
Scenario voor het kopiƫren van bestanden naar een externe host vanaf lokaal (met de module
copy):
Scenario voor het aanmaken van bestanden op een externe host met
copymodule:
Scenario voor het downloaden van bestanden van een externe host naar lokaal:
Laten we een scenario proberen met meerdere (3) externe machines, bijvoorbeeld een scenario voor het kopiƫren van bestanden naar een externe host:
Zoals te zien is, bespaart Mitogen ons zowel tijd als bandbreedte in deze scenario's. Maar als de 'bottleneck' niet in Ansible zit, maar bijvoorbeeld in de I/O van de schijf of het netwerk, of ergens anders, dan is het moeilijk te verwachten dat Mitogen ons helpt.
Laten we een scenario proberen met het installeren van pakketten met yum/dnf en Python-modules met pip. De pakketten zijn gecached om niet afhankelijk te zijn van netwerkproblemen:
---
- hosts: all
gather_facts: false
tasks:
- name: Installeer pakketten
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Installeer pip-modules
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Met Mitogen duurde dit 12 seconden, net als zonder.
Op de pagina u kunt andere benchmarks en tests bekijken. Zoals vermeld op de pagina:
Mitogen kan een module niet versnellen wanneer deze wordt uitgevoerd. Het kan alleen de uitvoering van deze module zo snel mogelijk maken.
Daarom is het belangrijk om uw knelpunten bij de implementatie te vinden, en als deze door Ansible komen, kan Mitogen u helpen ze op te lossen en de uitvoering van uw playbooks aanzienlijk te versnellen.
Bron: habr.com
