blev en av de mest populära . Efter 2015 antalet översteg tusentals och Ansible blev förmodligen det mest använda distributions- och orkestreringssystemet. Dess breda utbud av applikationer är mycket imponerande.
Ansible fungerar över SSH-anslutningar till fjärrvärdar. Den öppnar en SSH-session, loggar in, kopierar Python-koden över nätverket och skriver den till en separat temporär fil. Efter det kör den den här filen på fjärrmaskinen. Hela den här operationssekvensen är ganska lång och tråkig, så det finns olika sätt att optimera den.
Ett av dessa sätt är som låter dig använda en SSH-session för att utföra instruktioner, istället för att öppna en ny session varje gång, vilket kan spara oss mycket tid. (Kom bara ihåg att stänga av requiretty inställning för sudo i din /etc/sudoers fil på fjärrmaskinen)
Ett nytt sätt att överklocka Ansible är ett pythonbibliotek som heter . Om någon inte har hört talas om det, ska jag kort beskriva dess funktionalitet. Det tillåter snabb exekvering av python-kod på en fjärrdator, och Ansible är bara ett exempel på användning. Mitogen använder ett UNIX-rör på fjärrmaskinen och överför pythonkod komprimerad med zlib och serialiserad med pickle. Detta hjälper till att slutföra det 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 bara att fokusera på hur biblioteket fungerar med Ansible.
Mitogen kan under vissa omständigheter påskynda din Ansible-kod flera gånger och avsevärt minska trafikförbrukningen. Låt oss kolla in de mest populära användningsfallen och se hur mycket det hjälper oss.
Jag använder Ansible mest för: skapa konfigurationsfiler på en fjärrdator, installera paket, kopiera filer till och från fjärrmaskinen. Du kanske har andra exempel - skriv i kommentarerna.
Låt oss gå!
Mitogen-konfigurationen för Ansible är mycket enkel:
Installera Mitogen-biblioteket:
pip install mitogenNu finns det två likvärdiga sätt - antingen konfigurera alternativen i konfigurationsfilen ansible.cfg, eller ställ in nödvändiga miljövariabler.
Låt oss anta att vägen till den installerade Mitogen kommer att vara /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Sedan:
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/strategyLåt oss installera 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 (från och med 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'Låt oss nu försöka köra en spelbok som skapar filer på en fjärrdator:
---
- 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 }}Och låt oss köra det med och utan Mitogen 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 2-faldig förbättring. Låt oss leta efter 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.197sSom ett resultat har vi accelererat utförandet med mer än 10 gånger!
Låt oss nu prova olika scenarier och se hur mycket snabbare allt fungerar för oss:
Skript för att kopiera filer till en fjärrvärd från en lokal (med modulen
copy):
Skript för att skapa filer på en fjärrvärd med
copymodul:
Scenario med nedladdning av filer från en fjärrvärd till en lokal:
Låt oss prova ett scenario med flera (3) fjärrmaskiner, till exempel ett scenario med kopiering av filer till en fjärrvärd:
Som du kan se sparar Mitogen oss både tid och trafik i dessa scenarier. Men om flaskhalsen inte finns i Ansible, utan till exempel i I/O på en disk eller ett nätverk, eller någon annanstans, så är det svårt att förvänta sig att Mitogen kommer att hjälpa oss.
Låt oss prova ett skript med att installera paket med yum/dnf och python-moduler med hjälp av pip. Paketen cacheades för att inte bero på nätverksfel:
---
- 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 tog det 12 sekunder, samma som utan.
På sidan du kan titta på andra riktmärken och tester. Som det står på sidan:
Mitogen kan inte påskynda modulen när den är igång. Det kan bara göra exekveringen av denna modul så snabbt som möjligt.
Därför är det viktigt att hitta dina flaskhalsar i din utplacering och om de beror på Ansible, så hjälper Mitogen dig att lösa dem och avsevärt påskynda exekveringen av dina playbooks.
Källa: will.com
