blev en av de mest populÀra . Efter att 2015 uppgick antalet till över tusen och Ansible blev antagligen det mest anvÀnda systemet för distribution och orchestration. Dess breda tillÀmpningar Àr verkligen imponerande.
Ansible arbetar genom SSH-anslutningar till fjÀrrvÀrdar. Den öppnar en SSH-session, loggar in, kopierar koden i Python över nÀtverket och skriver den i en separat temporÀr fil. Efter detta kör den filen pÄ den fjÀrrmaskinen. Hela denna sekvens av operationer Àr ganska lÄngsam och trÄkig, sÄ det finns olika sÀtt att optimera den.
Ett av dessa sÀtt Àr som tillÄter att anvÀnda en SSH-session för att köra instruktioner snarare Àn att öppna en ny session varje gÄng, vilket kan spara oss mycket tid. (Glöm bara inte att stÀnga av requiretty instÀllningen för sudo i din /etc/sudoers fil pÄ den fjÀrrmaskinen)
Ett nytt sĂ€tt att 'turba' Ansible Ă€r ett Python-bibliotek som heter . Om nĂ„gon inte har hört talas om det â sĂ„ ska jag kort beskriva dess funktionalitet. Det möjliggör snabb körning av Python-kod pĂ„ en fjĂ€rrmaskin och Ansible Ă€r bara ett av exemplen pĂ„ dess anvĂ€ndning. Mitogen anvĂ€nder UNIX-pipe pĂ„ fjĂ€rrmaskinen och överför Python-kod som Ă€r komprimerad med zlib och serialiserad med hjĂ€lp av pickle. Detta gör att den körs snabbare och sparar trafik. Om du Ă€r intresserad av en mer detaljerad förklaring, Ă€r det bĂ€st att lĂ€sa om det pĂ„ sidan . Men idag kommer vi att fokusera pĂ„ hur biblioteket fungerar med Ansible.
Mitogen kan under vissa omstÀndigheter öka hastigheten pÄ din Ansible-kod flera gÄnger och avsevÀrt minska trafikförbrukningen. LÄt oss kolla de mest populÀra exemplen pÄ anvÀndning och se hur mycket det hjÀlper oss.
Jag anvĂ€nder mest Ansible för: att skapa konfigurationsfiler pĂ„ fjĂ€rrmaskiner, installera paket, kopiera filer till fjĂ€rrmaskiner och tillbaka. Kanske har du andra exempel â skriv dem i kommentarerna.
LÄt oss köra!
Konfigurationen av Mitogen för Ansible Àr vÀldigt enkel:
Installerar Mitogen-biblioteket:
pip install mitogenNu finns det tvĂ„ lika sĂ€tt â antingen konfigurera alternativ i konfigurationsfilen ansible.cfg, eller stĂ€lla in nödvĂ€ndiga miljövariabler.
Anta att sökvÀgen till den installerade Mitogen kommer att /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. DÄ:
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/strategyInstallera Ansible i virtualenv, med och utan 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.10Observera att Mitogen 0.2.7 inte fungerar med Ansible 2.8 (maj 2019)
Skapa alias:
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'Nu prövar vi att köra playbook som skapar filer pÄ en fjÀrrmaskin:
---
- hosts: all
gather_facts: false
tasks:
- name: Skapa filer med copy content-modulen
copy:
content: |
testfil {{ item }}
dest: ~/file_{{ item }}
with_sequence: start=1 end={{ n }}Och vi kör med Mitogen och utan för att skapa 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 förbĂ€ttring med 2 gĂ„nger. LĂ„t oss kontrollera för 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.197sI slutÀndan har vi ökat hastigheten med mer Àn 10 gÄnger!
Nu prövar vi olika scenarier och ser hur mycket snabbare allt fungerar:
Scenario för att kopiera filer till en fjÀrrvÀrd frÄn lokal (med modulen
copy):
Scenario för att skapa filer pÄ fjÀrrvÀrden med
copymodulen:
Scenario med nedladdning av filer frÄn fjÀrrvÀrd till lokal:
LÄt oss prova ett scenario med flera (3) fjÀrrmaskiner, till exempel ett scenario för att kopiera filer till en fjÀrrvÀrd:
Som vi ser sparar Mitogen bÄde tid och trafik i dessa scenarier. Men om "flaskhalsen" inte ligger i Ansible, utan exempelvis i I/O frÄn disken eller nÀtverket, eller nÄgon annanstans, Àr det svÄrt att förvÀnta sig att Mitogen hjÀlper oss.
LÄt oss pröva ett scenario för att installera paket med yum/dnf och Python-moduler med pip. Paketen har cachats för att inte bero pÄ nÀtverksproblem:
---
- hosts: all
gather_facts: false
tasks:
- name: Installera paket
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Installera pip-moduler
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Med Mitogen tog detta 12 sekunder, precis som utan.
PÄ sidan Du kan titta pÄ andra benchmarkingtester. Som anges pÄ sidan:
Mitogen kan inte snabba upp modulen nÀr den körs. Den kan bara göra körningen av denna modul sÄ snabb som möjligt.
DÀrför Àr det viktigt att hitta dina flaskhalsar i distributionen, och om de beror pÄ Ansible, kan Mitogen hjÀlpa dig att lösa dem och avsevÀrt öka hastigheten pÄ körningen av dina playbooks.
KĂ€lla: habr.com
