Ubrzavanje Ansiblea sa Mitogenom

Ansible postao jedan od najpopularnijih Upravljanje konfiguracijom sistema... Poslije je kupio Red Hat u broju za 2015 učesnici projekta premašio hiljade i Ansible je postao vjerovatno najčešće korišteni sistem za implementaciju i orkestraciju. Njegov širok spektar primjene je vrlo impresivan.

Ansible radi preko SSH konekcija na udaljene hostove. Otvara SSH sesiju, prijavljuje se, kopira Python kod preko mreže i upisuje ga u zasebnu privremenu datoteku. Nakon toga, pokreće ovu datoteku na udaljenoj mašini. Cijeli ovaj niz operacija je prilično dug i zamoran, tako da postoje različiti načini da ga optimizirate.

Jedan od ovih načina je SSH cjevovodi što nam omogućava da koristimo jednu SSH sesiju za izvršavanje instrukcija, umjesto da svaki put otvaramo novu sesiju, što nam može uštedjeti mnogo vremena. (Samo ne zaboravite da onemogućite requiretty postavka za sudo u vašem /etc/sudoers fajl na udaljenoj mašini)

Novi način za "overclockanje" Ansible-a je python biblioteka po imenu Mitogen. ako neko nije čuo za njega, ukratko ću opisati njegovu funkcionalnost. Omogućava brzo izvršavanje python koda na udaljenoj mašini, a Ansible je samo jedan od slučajeva upotrebe. Mitogen koristi UNIX cev na udaljenoj mašini i prenosi python kod komprimiran pomoću zlib-a i serijalizovan sa pickle-om. Ovo pomaže da se završi brže i štedi propusni opseg. Ako vas zanima detaljnije objašnjenje, najbolje je da o tome pročitate na stranici "Kako radi". Ali danas ćemo se fokusirati samo na to kako biblioteka radi sa Ansibleom.

Mitogen pod određenim okolnostima može ubrzati vaš Ansible kod nekoliko puta i značajno smanjiti potrošnju prometa. Pogledajmo najpopularnije slučajeve upotrebe i vidimo kako nam to pomaže.

Stvari koje najviše koristim Ansible su: kreiranje konfiguracionih fajlova na udaljenoj mašini, instaliranje paketa, kopiranje fajlova na i sa udaljene mašine. Možda imate i druge primjere - napišite u komentarima.

Idemo!

Mitogen konfiguracija za Ansible je vrlo jednostavna:
Instalirajte Mitogen biblioteku:

pip install mitogen

Sada postoje dva ekvivalentna načina - ili konfigurirati opcije u konfiguracijskoj datoteci ansible.cfg, ili postaviti potrebne varijable okruženja.

Pretpostavimo da će put do instaliranog Mitogena biti /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. onda:

export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
export ANSIBLE_STRATEGY=mitogen_linear

ili

[defaults]
strategy = mitogen_linear
strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy

Instalirajte Ansible u virtualenv, sa i bez Mitogena:

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

Imajte na umu da Mitogen 0.2.7 ne radi sa Ansible 2.8 (od maja 2019.)

Pravljenje alijasa:

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'

Sada pokušajmo da pokrenemo playbook koji kreira datoteke na udaljenoj mašini:

---
- 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 }}

I pokrenite sa i bez Mitogena da kreirate 10 datoteka:

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

Vidimo 2x poboljšanje. Provjerimo 20, 30, ..., 100 fajlova:

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

Kao rezultat toga, ubrzali smo izvršenje za više od 10 puta!
Isprobajmo sada različite scenarije i vidimo koliko nam sve brže funkcionira:

  • Skripta za kopiranje datoteka na udaljeni host sa lokalnog hosta (sa modulom copy):
    Ubrzavanje Ansiblea sa Mitogenom

  • Skripta za kreiranje datoteka na udaljenom hostu sa copy modul:
    Ubrzavanje Ansiblea sa Mitogenom

  • Scenarij sa preuzimanjem datoteka sa udaljenog hosta na lokalni:
    Ubrzavanje Ansiblea sa Mitogenom

Pokušajmo sa scenarijem s više (3) udaljenih mašina, kao što je kopiranje datoteka na udaljeni host:
Ubrzavanje Ansiblea sa Mitogenom

Kao što vidite, Mitogen nam štedi i vrijeme i promet u ovim scenarijima. Ali ako "usko grlo" nije u Ansibleu, već na primjer u disk I/O ili mreži, ili bilo gdje drugdje, onda je teško očekivati ​​da će nam Mitogen pomoći.

Hajde da isprobamo scenario sa instaliranjem yum/dnf paketa i python modula koristeći pip. Paketi su keširani kako ne bi ovisili o problemima u mreži:

---
- 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

Sa Mitogenom je trebalo 12 sekundi, kao i bez njega.
Na stranici Mitogen za Ansible stranicu možete vidjeti druga mjerila i testove. Kako piše na stranici:

Mitogen ne može ubrzati modul dok radi. To samo može učiniti izvršenje ovog modula što je brže moguće.

Stoga je važno pronaći svoja uska grla u implementaciji i ako su ona uzrokovana Ansible-om, onda će vam Mitogen pomoći da ih riješite i značajno ubrzati izvršavanje vaših priručnika.

izvor: www.habr.com

Dodajte komentar