стана еден од најпопуларните . По во 2015 година бројот надмина илјадници и Ansible стана веројатно најкористениот систем за распоредување и оркестрација. Неговиот широк опсег на апликации е многу импресивен.
Ansible работи преку SSH врски со оддалечени хостови. Отвора SSH сесија, се најавува, го копира кодот на Python преку мрежата и го запишува во посебна привремена датотека. После тоа, ја извршува оваа датотека на оддалечената машина. Целата оваа низа на операции е прилично долга и мачна, па затоа постојат различни начини да се оптимизира.
Еден од овие начини е што ви овозможува да користите една SSH сесија за извршување инструкции, наместо да отворате нова сесија секој пат, што може да ни заштеди многу време. (Само не заборавајте да го исклучите requiretty поставување за судо во вашиот /etc/sudoers датотека на оддалечената машина)
Нов начин за оверклокување на Ansible е библиотеката со питон наречена . Ако некој не слушнал за него, накратко ќе ја опишам неговата функционалност. Овозможува брзо извршување на python код на оддалечена машина, а Ansible е само еден пример за употреба. Митоген користи цевка UNIX на оддалечената машина и пренесува python код компримиран со zlib и серијализиран со кисели краставички. Ова помага да се заврши побрзо и заштедува сообраќај. Доколку ве интересира подетално објаснување, најдобро е да прочитате за тоа на страницата . Но, денес ќе се фокусираме само на тоа како работи библиотеката со 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
