Ansible работи преку SSH врски со оддалечени хостови. Отвора SSH сесија, се најавува, го копира кодот на Python преку мрежата и го запишува во посебна привремена датотека. После тоа, ја извршува оваа датотека на оддалечената машина. Целата оваа низа на операции е прилично долга и мачна, па затоа постојат различни начини да се оптимизира.
Еден од овие начини е requiretty
поставување за судо во вашиот /etc/sudoers
датотека на оддалечената машина)
Нов начин за оверклокување на Ansible е библиотеката со питон наречена
Митоген во одредени околности може да го забрза вашиот Ansible код неколку пати и значително да ја намали потрошувачката на сообраќај. Ајде да ги провериме најпопуларните случаи за употреба и да видиме колку тоа ни помага.
Најмногу користам Ansible за: создавање датотеки за конфигурација на оддалечена машина, инсталирање пакети, копирање датотеки до и од оддалечената машина. Можеби имате други примери - напишете во коментарите.
Ајде да одиме!
Конфигурацијата на митоген за Ansible е многу едноставна:
Инсталирајте ја библиотеката Mitogen:
pip install mitogen
Сега постојат два еквивалентни начини - или конфигурирајте ги опциите во конфигурациската датотека ansible.cfg или поставете ги потребните променливи на околината.
Да претпоставиме дека патеката до инсталираниот Митоген ќе биде /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
. Потоа:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear
или
[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
Ајде да инсталираме Ansible во virtualenv, со и без Митоген:
virtualenv mitogen_ansible
./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
./pure_ansible/bin/pip install ansible==2.7.10
Имајте предвид дека Митоген 0.2.7 не работи со Ansible 2.8 (од мај 2019 година)
Правење псевдоними:
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'
Сега ајде да се обидеме да извршиме Playbook што создава датотеки на оддалечена машина:
---
- 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 }}
Ајде да го извршиме со и без Митоген за да создадеме 10 датотеки:
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.643s
Гледаме 2-кратно подобрување. Ајде да провериме за 20, 30, ..., 100 датотеки:
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.197s
Како резултат на тоа, го забрзавме извршувањето за повеќе од 10 пати!
Сега да пробаме различни сценарија и да видиме колку побрзо сè работи за нас:
-
Скрипта за копирање датотеки на оддалечен домаќин од локален (со модулот
copy
):
-
Скрипта за креирање датотеки на оддалечен домаќин со
copy
модул:
-
Сценарио со преземање датотеки од оддалечен домаќин на локален:
Ајде да пробаме сценарио со неколку (3) оддалечени машини, на пример сценарио со копирање датотеки на оддалечен домаќин:
Како што можете да видите, Митоген ни заштедува и време и сообраќај во овие сценарија. Но, ако тесното грло не е во Ansible, туку на пример во I/O на диск или мрежа, или на друго место, тогаш тешко е да се очекува дека Mitogen ќе ни помогне.
Ајде да пробаме скрипта со инсталирање пакети со yum/dnf и python модули користејќи pip. Пакетите беа кеширани за да не зависат од грешки во мрежата:
---
- 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
Со Митоген беа потребни 12 секунди, исто како и без него.
На страница
Митоген не може да го забрза модулот кога работи. Може само да го направи извршувањето на овој модул што е можно побрзо.
Затоа, важно е да ги пронајдете вашите тесни грла во вашето распоредување и ако тие се должат на Ansible, тогаш Mitogen ќе ви помогне да ги решите и значително да го забрза извршувањето на вашите книги за играње.
Извор: www.habr.com