Ansible-ի արագացում Mitogen-ի հետ

Հղիություն դարձավ ամենահայտնիներից մեկը Համակարգի կոնֆիգուրացիայի կառավարում. հետո գնվել է Red Hat-ի կողմից համարը 2015թ ծրագրի մասնակիցները գերազանցեց հազարավորները, և Ansible-ը դարձավ, հավանաբար, ամենաշատ օգտագործվող տեղակայման և նվագախմբային համակարգը: Նրա կիրառությունների լայն շրջանակը շատ տպավորիչ է:

Ansible-ն աշխատում է հեռավոր հոսթերների SSH կապերի միջոցով: Այն բացում է SSH նիստ, մուտք է գործում, պատճենում է Python կոդը ցանցի միջոցով և գրում այն ​​առանձին ժամանակավոր ֆայլում: Դրանից հետո այն գործարկում է այս ֆայլը հեռավոր մեքենայի վրա: Գործողությունների այս ամբողջ հաջորդականությունը բավականին երկար է և հոգնեցուցիչ, ուստի կան այն օպտիմալացնելու տարբեր եղանակներ:

Այդ ուղիներից մեկն է SSH խողովակաշարեր որը թույլ է տալիս օգտագործել մեկ SSH նիստ հրահանգներ կատարելու համար, այլ ոչ թե ամեն անգամ նոր նիստ բացել, ինչը կարող է մեզ շատ ժամանակ խնայել: (Պարզապես հիշեք, որ անջատեք requiretty ընդլայնված sudo ձեր /etc/sudoers ֆայլ հեռավոր մեքենայի վրա)

Ansible-ի օվերքլոկի նոր միջոցը python գրադարանն է, որը կոչվում է Միտոգեն. Եթե ​​որևէ մեկը չի լսել դրա մասին, ես համառոտ կներկայացնեմ դրա ֆունկցիոնալությունը: Այն թույլ է տալիս արագ կատարել python կոդը հեռավոր մեքենայի վրա, և Ansible-ը օգտագործման ընդամենը մեկ օրինակ է: Միտոգենն օգտագործում է UNIX խողովակ հեռավոր մեքենայի վրա և փոխանցում է python կոդը՝ սեղմված zlib-ով և սերիականացված թթու վարունգով: Սա օգնում է ավելի արագ ավարտել այն և խնայում է երթևեկությունը: Եթե ​​ձեզ հետաքրքրում է ավելի մանրամասն բացատրություն, ավելի լավ է այդ մասին կարդալ էջում "Ինչպես է դա աշխատում". Բայց այսօր մենք կկենտրոնանանք միայն այն բանի վրա, թե ինչպես է գրադարանն աշխատում Ansible-ի հետ:

Միտոգենը որոշակի հանգամանքներում կարող է մի քանի անգամ արագացնել ձեր Ansible կոդը և զգալիորեն նվազեցնել երթևեկության սպառումը: Եկեք ստուգենք օգտագործման ամենատարածված դեպքերը և տեսնենք, թե որքանով է դա մեզ օգնում:

Ես օգտագործում եմ Ansible-ն ամենից շատ՝ հեռակառավարվող սարքի վրա կազմաձևման ֆայլեր ստեղծելու, փաթեթներ տեղադրելու, ֆայլերի պատճենման և հեռակառավարման սարքից: Միգուցե դուք ունեք այլ օրինակներ - գրեք մեկնաբանություններում:

Եկեք գնանք.

Ansible-ի համար Mitogen կոնֆիգուրացիան շատ պարզ է.
Տեղադրեք 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-ում՝ 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

Խնդրում ենք նկատի ունենալ, որ Mitogen 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'

Հիմա եկեք փորձենք գործարկել խաղագիրք, որը ֆայլեր է ստեղծում հեռավոր մեքենայի վրա.

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

Եվ եկեք գործարկենք այն Mitogen-ով և առանց դրա՝ 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):
    Ansible-ի արագացում Mitogen-ի հետ

  • Հեռակա հոսթի վրա ֆայլեր ստեղծելու սկրիպտ copy մոդուլ:
    Ansible-ի արագացում Mitogen-ի հետ

  • Հեռավոր հոսթից տեղական ֆայլեր ներբեռնելու սցենար.
    Ansible-ի արագացում Mitogen-ի հետ

Եկեք փորձենք մի սցենար մի քանի (3) հեռավոր մեքենաներով, օրինակ՝ մի սցենար՝ ֆայլերը հեռակա հոսթին պատճենելով.
Ansible-ի արագացում Mitogen-ի հետ

Ինչպես տեսնում եք, Mitogen-ը մեզ խնայում է և՛ ժամանակը, և՛ երթեւեկությունը այս սցենարներում: Բայց եթե խցանումը 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

Mitogen-ի հետ դա տեւեց 12 վայրկյան, նույնը, ինչ առանց դրա:
Էջում Միտոգեն Ansible էջի համար դուք կարող եք դիտել այլ չափորոշիչներ և թեստեր: Ինչպես նշված է էջում.

Միտոգենը չի կարող արագացնել մոդուլը, երբ այն աշխատում է: Այն կարող է միայն հնարավորինս արագ դարձնել այս մոդուլի կատարումը:

Հետևաբար, կարևոր է գտնել ձեր խցանումները ձեր տեղակայման մեջ, և եթե դրանք պայմանավորված են Ansible-ով, ապա Mitogen-ը կօգնի ձեզ լուծել դրանք և զգալիորեն արագացնել ձեր գրքույկների կատարումը:

Source: www.habr.com

Добавить комментарий