Hraða upp Ansible með Mitogen

Ansible varð einn af þeim vinsælustu Kerfisstillingarstjórnun. Eftir var keypt af Red Hat árið 2015 númerið þátttakendur verkefnisins fór yfir þúsundir og Ansible varð líklega mest notaða dreifingar- og hljómsveitarkerfið. Fjölbreytt notkunarsvið hennar er mjög áhrifamikið.

Ansible virkar yfir SSH tengingar við ytri gestgjafa. Það opnar SSH lotu, skráir sig inn, afritar Python kóðann yfir netið og skrifar hann í sérstaka tímabundna skrá. Eftir það keyrir það þessa skrá á ytri vélinni. Öll þessi röð aðgerða er frekar löng og leiðinleg, svo það eru ýmsar leiðir til að hagræða henni.

Ein af þessum leiðum er SSH leiðslur sem gerir þér kleift að nota eina SSH lotu til að framkvæma leiðbeiningar, frekar en að opna nýja lotu í hvert sinn, sem getur sparað okkur mikinn tíma. (Mundu bara að slökkva requiretty stilling fyrir sudo í þínu /etc/sudoers skrá á ytri vélinni)

Ný leið til að yfirklukka Ansible er python bókasafn sem heitir Mítógen. Ef einhver hefur ekki heyrt um það mun ég lýsa stuttlega virkni þess. Það gerir hraðvirka framkvæmd python kóða á fjartengdri vél og Ansible er aðeins eitt dæmi um notkun. Mitogen notar UNIX pípu á ytri vélinni og flytur python kóða þjappað með zlib og raðnúmerað með súrum gúrkum. Þetta hjálpar til við að klára það hraðar og sparar umferð. Ef þú hefur áhuga á ítarlegri útskýringu er best að lesa um það á síðunni "Hvernig það virkar". En í dag munum við einblína aðeins á hvernig bókasafnið virkar með Ansible.

Mitogen getur við vissar aðstæður flýtt fyrir Ansible kóðanum þínum nokkrum sinnum og dregið verulega úr umferðarnotkun. Við skulum skoða vinsælustu notkunartilvikin og sjá hversu mikið það hjálpar okkur.

Ég nota Ansible mest fyrir: búa til stillingarskrár á ytri vél, setja upp pakka, afrita skrár til og frá ytri vélinni. Kannski hefurðu önnur dæmi - skrifaðu í athugasemdunum.

Við skulum fara!

Mítógen stillingar fyrir Ansible er mjög einföld:
Settu upp Mitogen bókasafnið:

pip install mitogen

Nú eru tvær jafngildar leiðir - annað hvort stilla valkostina í ansible.cfg stillingarskránni, eða stilla nauðsynlegar umhverfisbreytur.

Gerum ráð fyrir að leiðin að uppsettu Mitogen verði /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

eða

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

Við skulum setja upp Ansible í virtualenv, með og án 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.10

Vinsamlegast athugaðu að Mitogen 0.2.7 virkar ekki með Ansible 2.8 (frá og með maí 2019)

Að búa til samheiti:

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'

Nú skulum við reyna að keyra leikbók sem býr til skrár á ytri vél:

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

Og við skulum keyra það með og án Mitogen til að búa til 10 skrár:

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

Við sjáum tvöfalda framför. Við skulum athuga með 2, 20, ..., 30 skrár:

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

Fyrir vikið flýttum við framkvæmd um meira en 10 sinnum!
Nú skulum við prófa mismunandi aðstæður og sjá hversu miklu hraðar allt virkar fyrir okkur:

  • Forskrift til að afrita skrár á ytri hýsil frá staðbundnum (með einingunni copy):
    Hraða upp Ansible með Mitogen

  • Forskrift til að búa til skrár á ytri vél með copy mát:
    Hraða upp Ansible með Mitogen

  • Atburðarás með því að hlaða niður skrám frá ytri hýsil til staðbundins:
    Hraða upp Ansible með Mitogen

Við skulum reyna atburðarás með nokkrum (3) fjartengdum vélum, til dæmis atburðarás þar sem skrár eru afritaðar á ytri hýsil:
Hraða upp Ansible með Mitogen

Eins og þú sérð sparar Mitogen okkur bæði tíma og umferð í þessum aðstæðum. En ef flöskuhálsinn er ekki í Ansible, heldur til dæmis í I/O á diski eða neti, eða einhvers staðar annars staðar, þá er erfitt að búast við því að Mitogen hjálpi okkur.

Prófum skriftu með því að setja upp pakka með yum/dnf og python einingum með því að nota pip. Pakkarnir voru í skyndiminni til að vera ekki háðir netgöllum:

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

Með Mitogen tók það 12 sekúndur, það sama og án hans.
Á síðunni Mitogen fyrir Ansible síðu þú getur skoðað önnur viðmið og próf. Eins og segir á síðunni:

Mitogen getur ekki flýtt fyrir einingunni þegar hún er í gangi. Það getur aðeins gert framkvæmd þessarar einingu eins hratt og mögulegt er.

Þess vegna er mikilvægt að finna flöskuhálsana þína í dreifingunni þinni og ef þeir eru vegna Ansible, þá mun Mitogen hjálpa þér að leysa þá og flýta verulega fyrir framkvæmd leikbókanna þinna.

Heimild: www.habr.com

Bæta við athugasemd